[PATCH aeolus-cli] Catch 401 Unauthorized response and display a more helpful error
mtaylor at redhat.com
mtaylor at redhat.com
Fri Dec 16 15:33:26 UTC 2011
From: Matt Wagner <matt.wagner at redhat.com>
Resolves https://bugzilla.redhat.com/show_bug.cgi?id=767342
---
lib/aeolus_cli/command/base_command.rb | 7 +++-
spec/command/base_command_spec.rb | 16 +++++++++
spec/spec_helper.rb | 6 +---
.../command/base_command/invalid_credentials.yml | 34 ++++++++++++++++++++
4 files changed, 56 insertions(+), 7 deletions(-)
create mode 100644 spec/vcr/cassettes/command/base_command/invalid_credentials.yml
diff --git a/lib/aeolus_cli/command/base_command.rb b/lib/aeolus_cli/command/base_command.rb
index d6afc6f..16573c5 100644
--- a/lib/aeolus_cli/command/base_command.rb
+++ b/lib/aeolus_cli/command/base_command.rb
@@ -90,7 +90,10 @@ module Aeolus
code = doc.xpath("/error/code").text
message = doc.xpath("/error/message").text
- if message.to_s.empty?
+ if e.is_a?(ActiveResource::UnauthorizedAccess)
+ code = "Unauthorized"
+ message = "Invalid Credentials, please check ~/.aeolus-cli"
+ elsif message.to_s.empty?
case code
when "BuildDeleteFailure" : message = "An error occured when deleting the Build from the Image Warehouse"
when "BuildNotFound" : message = "Could not find the specified Build"
@@ -189,4 +192,4 @@ module Aeolus
end
end
end
-end
\ No newline at end of file
+end
diff --git a/spec/command/base_command_spec.rb b/spec/command/base_command_spec.rb
index 8a3b1a2..bc8a0c1 100644
--- a/spec/command/base_command_spec.rb
+++ b/spec/command/base_command_spec.rb
@@ -78,6 +78,22 @@ module Aeolus
errors.length.should == 0
end
end
+
+ describe "#handle_exception" do
+ it "should display a user message when an authorised response is returned from Conductor" do
+ VCR.use_cassette('command/base_command/invalid_credentials') do
+ lc = ListCommand.new
+ Aeolus::CLI::Base.password = "wrong_password"
+ begin
+ lc.accounts
+ rescue SystemExit => e
+ e.status.should == 1
+ end
+ $stdout.string.should include("Invalid Credentials, please check ~/.aeolus-cli")
+ end
+ end
+ end
+
end
end
end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 1c20c7a..2c3ccd7 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -64,12 +64,8 @@ RSpec.configure do |config|
YAML::load(File.open(File.join(File.dirname(__FILE__), "/../examples/aeolus-cli")))
end
end
- Aeolus::CLI::BaseCommand.class_eval do
- def handle_exception(e)
- raise e
- end
- end
end
+
config.before(:each) do
@output = double('output')
@stdout_orig = $stdout
diff --git a/spec/vcr/cassettes/command/base_command/invalid_credentials.yml b/spec/vcr/cassettes/command/base_command/invalid_credentials.yml
new file mode 100644
index 0000000..529af9b
--- /dev/null
+++ b/spec/vcr/cassettes/command/base_command/invalid_credentials.yml
@@ -0,0 +1,34 @@
+---
+- !ruby/struct:VCR::HTTPInteraction
+ request: !ruby/struct:VCR::Request
+ method: :get
+ uri: https://admin:wrong_password@localhost:443/conductor/api/provider_accounts.xml
+ body:
+ headers:
+ accept-language:
+ - en
+ accept:
+ - application/xml
+ response: !ruby/struct:VCR::Response
+ status: !ruby/struct:VCR::ResponseStatus
+ code: 401
+ message: Unauthorized
+ headers:
+ x-ua-compatible:
+ - IE=Edge,chrome=1
+ content-type:
+ - application/xml; charset=utf-8
+ server:
+ - thin 1.2.11 codename Bat-Shit Crazy
+ date:
+ - Wed, 14 Dec 2011 11:03:57 GMT
+ x-runtime:
+ - "0.159056"
+ set-cookie:
+ - _session_id=BAh7ByIPc2Vzc2lvbl9pZCIlZjJkNGVmNTZiYTQ2MTRlZGQyZDdlYjliODFjYmE5NmYiEGJyZWFkY3J1bWJzWwA%3D--18809bd7ff24d210f991c9d382b9aa27804aa043; path=/; HttpOnly
+ cache-control:
+ - no-cache
+ transfer-encoding:
+ - chunked
+ body: " "
+ http_version: "1.1"
\ No newline at end of file
--
1.7.6.4
More information about the aeolus-devel
mailing list