Skip to content

Commit ba4cf9a

Browse files
authored
Add max length validation for app name in V3 API (#4928)
When creating or updating an app with a name exceeding 255 characters, the database would raise a constraint violation error that was not caught, resulting in an unhelpful "UnknownError" (code 10001) response. This adds explicit length validation to AppCreateMessage and AppUpdateMessage to provide a meaningful error message before the request reaches the database layer. - Add length validation (max 255 chars) to AppCreateMessage - Add length validation (max 255 chars) to AppUpdateMessage - Add corresponding unit tests for both messages
1 parent 8e48a63 commit ba4cf9a

File tree

4 files changed

+36
-2
lines changed

4 files changed

+36
-2
lines changed

app/messages/app_create_message.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def self.lifecycle_type_requested?
1616
validates_with NoAdditionalKeysValidator, RelationshipValidator
1717
validates_with LifecycleValidator, if: lifecycle_type_requested?
1818

19-
validates :name, string: true
19+
validates :name, string: true, length: { maximum: 255, message: 'is too long (maximum is 255 characters)' }
2020
validates :environment_variables, hash: true, allow_nil: true
2121

2222
validates :lifecycle_type,

app/messages/app_update_message.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def self.lifecycle_type_requested?
1818
validates_with NoAdditionalKeysValidator
1919
validates_with LifecycleValidator, if: lifecycle_requested?
2020

21-
validates :name, string: true, allow_nil: true
21+
validates :name, string: true, allow_nil: true, length: { maximum: 255, message: 'is too long (maximum is 255 characters)' }
2222

2323
validates :lifecycle_type,
2424
string: true,

spec/unit/messages/app_create_message_spec.rb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,29 @@ module VCAP::CloudController
6767
end
6868
end
6969

70+
context 'when name is too long' do
71+
let(:params) do
72+
{
73+
name: 'a' * 256,
74+
relationships: { space: { data: { guid: 'space-guid' } } },
75+
lifecycle: {
76+
type: 'buildpack',
77+
data: {
78+
buildpack: 'nil',
79+
stack: Stack.default.name
80+
}
81+
}
82+
}
83+
end
84+
85+
it 'is not valid' do
86+
message = AppCreateMessage.new(params)
87+
88+
expect(message).not_to be_valid
89+
expect(message.errors_on(:name)).to include('is too long (maximum is 255 characters)')
90+
end
91+
end
92+
7093
context 'when environment_variables is not an object' do
7194
let(:params) do
7295
{

spec/unit/messages/app_update_message_spec.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,17 @@ module VCAP::CloudController
2626
end
2727
end
2828

29+
context 'when name is too long' do
30+
let(:params) { { name: 'a' * 256 } }
31+
32+
it 'is not valid' do
33+
message = AppUpdateMessage.new(params)
34+
35+
expect(message).not_to be_valid
36+
expect(message.errors_on(:name)).to include('is too long (maximum is 255 characters)')
37+
end
38+
end
39+
2940
context 'when we have more than one error' do
3041
let(:params) { { name: 3.5, unexpected: 'foo' } }
3142

0 commit comments

Comments
 (0)