[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