Skip to content

Commit 088070a

Browse files
committed
Change route update/create logic according to specs
1 parent 5fe5c4c commit 088070a

File tree

4 files changed

+13
-14
lines changed

4 files changed

+13
-14
lines changed

app/actions/manifest_route_update.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,9 @@ def find_or_create_valid_route(app, manifest_route, user_audit_info)
9292
domain: existing_domain,
9393
manifest_triggered: true
9494
)
95-
elsif route[:options] != manifest_route[:options]
95+
elsif manifest_route[:options] && route[:options] != manifest_route[:options]
96+
# remove nil values from options
97+
manifest_route[:options] = manifest_route[:options].compact
9698
message = RouteUpdateMessage.new({
9799
'options' => manifest_route[:options]
98100
})

app/actions/route_update.rb

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,14 @@ def update(route:, message:)
44
Route.db.transaction do
55
if message.requested?(:options)
66
route.options = if message.options.nil?
7-
route.options
7+
nil
88
elsif route.options.nil?
99
message.options
1010
else
1111
route.options.merge(message.options)
1212
end
1313
end
1414

15-
# remove nil values from options
16-
route.options = route.options.compact if route.options
17-
1815
route.save
1916
MetadataUpdate.update(route, message)
2017
end

app/messages/validators.rb

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -242,11 +242,17 @@ def validate(record)
242242

243243
class OptionsValidator < ActiveModel::Validator
244244
def validate(record)
245-
# Empty option hashes are allowed, so we skip further validation
246-
record.options.blank? && return
245+
246+
if record.options.blank?
247+
# Route Creation with explicit 'null' options is not allowed
248+
if record.is_a?(VCAP::CloudController::RouteCreateMessage) && record.options.nil?
249+
record.errors.add(:options, message: 'is not a valid object')
250+
end
251+
return
252+
end
247253

248254
unless record.options.is_a?(Hash)
249-
record.errors.add(:options, message: "'options' is not a valid object")
255+
record.errors.add(:options, message: 'is not a valid object')
250256
return
251257
end
252258

spec/request/space_manifests_spec.rb

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -761,10 +761,7 @@
761761
post "/v3/spaces/#{space.guid}/actions/apply_manifest", yml_manifest, yml_headers(user_header)
762762

763763
expect(last_response.status).to eq(202)
764-
job_guid = VCAP::CloudController::PollableJobModel.last.guid
765764

766-
Delayed::Worker.new.work_off
767-
expect(VCAP::CloudController::PollableJobModel.find(guid: job_guid)).to be_complete, VCAP::CloudController::PollableJobModel.find(guid: job_guid).cf_api_error
768765
app1_model.reload
769766
expect(app1_model.routes.first.options).to eq({ 'lb_algo' => 'round-robin' })
770767
end
@@ -786,10 +783,7 @@
786783
post "/v3/spaces/#{space.guid}/actions/apply_manifest", yml_manifest, yml_headers(user_header)
787784

788785
expect(last_response.status).to eq(202)
789-
job_guid = VCAP::CloudController::PollableJobModel.last.guid
790786

791-
Delayed::Worker.new.work_off
792-
expect(VCAP::CloudController::PollableJobModel.find(guid: job_guid)).to be_complete, VCAP::CloudController::PollableJobModel.find(guid: job_guid).cf_api_error
793787
app1_model.reload
794788
expect(app1_model.routes.first.options).to eq({ 'lb_algo' => 'round-robin' })
795789
end

0 commit comments

Comments
 (0)