Skip to content

Commit 57c38dd

Browse files
tcdowneyAnnie Sing
authored andcommitted
Handle UaaUnavailable errors that occur when fetching creds from CredHub
- These errors are now converted into 'UaaUnavailable' flavored `CloudController::Errors::ApiError`s [#150753759] Signed-off-by: Annie Sing <[email protected]>
1 parent 3fb9b3e commit 57c38dd

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

app/collection_transformers/credhub_credential_populator.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ def transform(service_keys, _opts={})
1616
end
1717
rescue Credhub::Error
1818
raise CloudController::Errors::ApiError.new_from_details('ServiceKeyCredentialStoreUnavailable')
19+
rescue UaaUnavailable
20+
raise CloudController::Errors::ApiError.new_from_details('UaaUnavailable')
1921
end
2022
end
2123
end

spec/unit/collection_transformers/credhub_credential_populator_spec.rb

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ module VCAP::CloudController
1919

2020
subject { CredhubCredentialPopulator.new(fake_credhub_client) }
2121

22-
context 'when credhub responds successfully' do
22+
context 'when CredHub responds successfully' do
2323
before do
2424
allow(fake_credhub_client).to receive(:get_credential_by_name).with(service_keys[0].credhub_reference).and_return(credhub_cred_1)
2525
allow(fake_credhub_client).to receive(:get_credential_by_name).with(service_keys[2].credhub_reference).and_return(credhub_cred_2)
@@ -38,7 +38,7 @@ module VCAP::CloudController
3838
end
3939
end
4040

41-
context 'when credhub errors' do
41+
context 'when any Credhub::Error occurs' do
4242
before do
4343
allow(fake_credhub_client).to receive(:get_credential_by_name).and_raise(Credhub::Error)
4444
end
@@ -47,6 +47,16 @@ module VCAP::CloudController
4747
expect { subject.transform(service_keys) }.to raise_error(CloudController::Errors::ApiError, /Credential store is unavailable/)
4848
end
4949
end
50+
51+
context 'when a VCAP::CloudController::UaaUnavailable error occurs' do
52+
before do
53+
allow(fake_credhub_client).to receive(:get_credential_by_name).and_raise(UaaUnavailable)
54+
end
55+
56+
it 'raises CloudController::Errors::ApiError "UaaUnavailable"' do
57+
expect { subject.transform(service_keys) }.to raise_error(CloudController::Errors::ApiError, /UAA service is currently unavailable/)
58+
end
59+
end
5060
end
5161
end
5262
end

spec/unit/controllers/services/service_keys_controller_spec.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,15 @@ def verify_not_found_response(service_key_guid)
499499
expect(last_response.status).to eq(503)
500500
expect(decoded_response['description']).to eq('Credential store is unavailable')
501501
end
502+
503+
it 'returns 503 when uaa is unavailable' do
504+
allow(fake_credhub_client).to receive(:get_credential_by_name).and_raise(UaaUnavailable)
505+
506+
get "/v2/service_keys/#{service_key.guid}"
507+
508+
expect(last_response.status).to eq(503)
509+
expect(decoded_response['description']).to eq('The UAA service is currently unavailable')
510+
end
502511
end
503512

504513
context 'when the key is not a CredHub reference' do

0 commit comments

Comments
 (0)