Skip to content
This repository was archived by the owner on May 6, 2020. It is now read-only.

Commit 0dd48e2

Browse files
author
Matthew Fisher
committed
feat(api): allow app names up to 63 characters in length
1 parent 24675b5 commit 0dd48e2

3 files changed

Lines changed: 39 additions & 4 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.10.4 on 2017-01-11 22:15
3+
from __future__ import unicode_literals
4+
5+
import api.models.app
6+
import api.models.certificate
7+
from django.db import migrations, models
8+
9+
10+
class Migration(migrations.Migration):
11+
12+
dependencies = [
13+
('api', '0022_add_private_key_validation'),
14+
]
15+
16+
operations = [
17+
migrations.AlterField(
18+
model_name='app',
19+
name='id',
20+
field=models.SlugField(max_length=63, null=True, unique=True, validators=[api.models.app.validate_app_id, api.models.app.validate_reserved_names]),
21+
),
22+
]

rootfs/api/models/app.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,12 @@
2020

2121
from api.models import get_session
2222
from api.models import UuidAuditedModel, AlreadyExists, DeisException, ServiceUnavailable
23-
24-
from api.utils import generate_app_name, async_run
2523
from api.models.config import Config
2624
from api.models.domain import Domain
2725
from api.models.release import Release
2826
from api.models.tls import TLS
2927
from api.models.appsettings import AppSettings
30-
28+
from api.utils import generate_app_name, async_run
3129
from scheduler import KubeHTTPException, KubeException
3230

3331
logger = logging.getLogger(__name__)
@@ -69,7 +67,7 @@ class App(UuidAuditedModel):
6967
"""
7068

7169
owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
72-
id = models.SlugField(max_length=24, unique=True, null=True,
70+
id = models.SlugField(max_length=63, unique=True, null=True,
7371
validators=[validate_app_id,
7472
validate_reserved_names])
7573
structure = JSONField(default={}, blank=True, validators=[validate_app_structure])

rootfs/api/tests/test_app.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,21 @@ def test_app(self, mock_requests):
7070
response = self.client.delete(url)
7171
self.assertEqual(response.status_code, 204, response.data)
7272

73+
def test_app_name_length(self, mock_requests):
74+
"""
75+
Test that the app name length cannot be longer than the maximum length dictated by
76+
Kubernetes' maximum service name length.
77+
"""
78+
name = 'a' * 64
79+
body = {'id': name}
80+
response = self.client.post('/v2/apps', body)
81+
print(response)
82+
self.assertEqual(
83+
response.data,
84+
{'id': ['Ensure this field has no more than 63 characters.']}
85+
)
86+
self.assertEqual(response.status_code, 400)
87+
7388
def test_response_data(self, mock_requests):
7489
"""Test that the serialized response contains only relevant data."""
7590
body = {'id': 'app-{}'.format(random.randrange(1000, 10000))}

0 commit comments

Comments
 (0)