[PATCH aeolus-cli] BZ#767074 Fix print_provider_content method for delete with no provider content

mtaylor at redhat.com mtaylor at redhat.com
Tue Dec 20 14:48:34 UTC 2011


From: Martyn Taylor <mtaylor at redhat.com>

---
 lib/aeolus_cli/command/delete_command.rb           |   42 ++++++++++---------
 spec/command/delete_command_spec.rb                |   41 +++++++++++++++++++
 .../delete_build_no_provider_content.yml           |   42 ++++++++++++++++++++
 .../delete_image_no_provider_content.yml           |   42 ++++++++++++++++++++
 .../delete_target_image_no_provider_content.yml    |   42 ++++++++++++++++++++
 5 files changed, 189 insertions(+), 20 deletions(-)
 create mode 100644 spec/vcr/cassettes/command/delete_command/delete_build_no_provider_content.yml
 create mode 100644 spec/vcr/cassettes/command/delete_command/delete_image_no_provider_content.yml
 create mode 100644 spec/vcr/cassettes/command/delete_command/delete_target_image_no_provider_content.yml

diff --git a/lib/aeolus_cli/command/delete_command.rb b/lib/aeolus_cli/command/delete_command.rb
index 54de83f..7343262 100644
--- a/lib/aeolus_cli/command/delete_command.rb
+++ b/lib/aeolus_cli/command/delete_command.rb
@@ -70,36 +70,38 @@ module Aeolus
             print_provider_content(response.body)
             exit(0)
           end
+
         rescue => e
-          handle_exception(e)
+          exit(1)
         end
       end
 
       private
       def print_provider_content(content_xml)
         h = Hash.from_xml(content_xml)
-        provider_content = h[h.keys.first]["content"]["provider_content"]
-        content = provider_content.instance_of?(Array) ? provider_content : [provider_content]
-        if content.size > 0
-          widths = calculate_widths(content)
-          puts "N.B. The following provider content must be manually removed"
-          puts ""
-
-          # Print Headers
-          printf("%-#{widths[:provider] + 5}s", "Provider")
-          printf("%-#{widths[:id] + 5}s", "ID")
-          puts ""
+        if provider_content = h[h.keys.first]["content"]["provider_content"]
+          content = provider_content.instance_of?(Array) ? provider_content : [provider_content]
+          if content.size > 0
+            widths = calculate_widths(content)
+            puts "N.B. The following provider content must be manually removed"
+            puts ""
 
-          # Print Column Lines
-          printf("%-#{widths[:provider] + 5}s", "-" * widths[:provider])
-          printf("%-#{widths[:id] + 5}s", "-" * widths[:id])
-          puts ""
+            # Print Headers
+            printf("%-#{widths[:provider] + 5}s", "Provider")
+            printf("%-#{widths[:id] + 5}s", "ID")
+            puts ""
 
-          # Print Content
-          content.each do |pc|
-            printf("%-#{widths[:provider] + 5}s", pc["provider"])
-            printf("%-#{widths[:id] + 5}s", pc["target_identifier"])
+            # Print Column Lines
+            printf("%-#{widths[:provider] + 5}s", "-" * widths[:provider])
+            printf("%-#{widths[:id] + 5}s", "-" * widths[:id])
             puts ""
+
+            # Print Content
+            content.each do |pc|
+              printf("%-#{widths[:provider] + 5}s", pc["provider"])
+              printf("%-#{widths[:id] + 5}s", pc["target_identifier"])
+              puts ""
+            end
           end
         end
       end
diff --git a/spec/command/delete_command_spec.rb b/spec/command/delete_command_spec.rb
index 7325161..a15ac39 100644
--- a/spec/command/delete_command_spec.rb
+++ b/spec/command/delete_command_spec.rb
@@ -73,6 +73,47 @@ module Aeolus
         end
       end
 
+      context "Delete with no Provider Content" do
+        it "should correctly return when deleting an image with no Provider Images" do
+          VCR.use_cassette('command/delete_command/delete_image_no_provider_content') do
+            @options = {:image => "af1b3773-b229-406a-b59c-f5f96ebc2d0b"}
+            dc = DeleteCommand.new(@options)
+            begin
+              dc.image
+            rescue SystemExit => e
+              e.status.should == 0
+            end
+            $stdout.string.should include("Image: af1b3773-b229-406a-b59c-f5f96ebc2d0b Deleted Successfully")
+          end
+        end
+
+        it "should correctly return when deleting build with no Provider Images" do
+          VCR.use_cassette('command/delete_command/delete_build_no_provider_content') do
+            @options = {:build => "85e1efd5-890a-422f-adfa-d340ddcae187"}
+            dc = DeleteCommand.new(@options)
+            begin
+              dc.build
+            rescue SystemExit => e
+              e.status.should == 0
+            end
+            $stdout.string.should include("Build: 85e1efd5-890a-422f-adfa-d340ddcae187 Deleted Successfully")
+          end
+        end
+
+        it "should correctly return when deleting a target image with no Provider Images" do
+          VCR.use_cassette('command/delete_command/delete_target_image_no_provider_content') do
+            @options = {:targetimage => "93bc6d11-6b09-4b1c-92a3-c580ca4f6f3b"}
+            dc = DeleteCommand.new(@options)
+            begin
+              dc.target_image
+            rescue SystemExit => e
+              e.status.should == 0
+            end
+            $stdout.string.should include("Target Image: 93bc6d11-6b09-4b1c-92a3-c580ca4f6f3b Deleted Successfully")
+          end
+        end
+      end
+
       context "Delete Failed Not Found" do
         it "should display an appropriate message when the given image is not found" do
           VCR.use_cassette('command/delete_command/delete_image_not_found') do
diff --git a/spec/vcr/cassettes/command/delete_command/delete_build_no_provider_content.yml b/spec/vcr/cassettes/command/delete_command/delete_build_no_provider_content.yml
new file mode 100644
index 0000000..854f6ef
--- /dev/null
+++ b/spec/vcr/cassettes/command/delete_command/delete_build_no_provider_content.yml
@@ -0,0 +1,42 @@
+---
+- !ruby/struct:VCR::HTTPInteraction
+  request: !ruby/struct:VCR::Request
+    method: :delete
+    uri: https://admin:password@localhost:443/conductor/api/builds/85e1efd5-890a-422f-adfa-d340ddcae187.xml
+    body:
+    headers:
+      accept-language:
+      - en
+      accept:
+      - application/xml
+  response: !ruby/struct:VCR::Response
+    status: !ruby/struct:VCR::ResponseStatus
+      code: 200
+      message: OK
+    headers:
+      x-ua-compatible:
+      - IE=Edge,chrome=1
+      etag:
+      - "\"d27ce6cf60644af5736fff88e6d73dda\""
+      content-type:
+      - application/xml; charset=utf-8
+      server:
+      - thin 1.2.11 codename Bat-Shit Crazy
+      date:
+      - Tue, 20 Dec 2011 14:35:06 GMT
+      x-runtime:
+      - "0.258616"
+      set-cookie:
+      - _session_id=BAh7CCIPc2Vzc2lvbl9pZCIlZDJkYWI3NDcwZGRlNjdiMTM3ODhjYzJhNjMwMmVjMTgiGXdhcmRlbi51c2VyLnVzZXIua2V5aQYiEGJyZWFkY3J1bWJzWwA%3D--cdf1db4ad503e7a2177a113543adc7d62c73cd51; path=/; HttpOnly
+      cache-control:
+      - max-age=0, private, must-revalidate
+      transfer-encoding:
+      - chunked
+    body: |
+      <build href='https://localhost/conductor/api/images/85e1efd5-890a-422f-adfa-d340ddcae187' id='85e1efd5-890a-422f-adfa-d340ddcae187'>
+      <status>DELETED</status>
+      <content>
+      </content>
+      </build>
+
+    http_version: "1.1
\ No newline at end of file
diff --git a/spec/vcr/cassettes/command/delete_command/delete_image_no_provider_content.yml b/spec/vcr/cassettes/command/delete_command/delete_image_no_provider_content.yml
new file mode 100644
index 0000000..c9f7b16
--- /dev/null
+++ b/spec/vcr/cassettes/command/delete_command/delete_image_no_provider_content.yml
@@ -0,0 +1,42 @@
+---
+- !ruby/struct:VCR::HTTPInteraction
+  request: !ruby/struct:VCR::Request
+    method: :delete
+    uri: https://admin:password@localhost:443/conductor/api/images/af1b3773-b229-406a-b59c-f5f96ebc2d0b.xml
+    body:
+    headers:
+      accept-language:
+      - en
+      accept:
+      - application/xml
+  response: !ruby/struct:VCR::Response
+    status: !ruby/struct:VCR::ResponseStatus
+      code: 200
+      message: OK
+    headers:
+      x-ua-compatible:
+      - IE=Edge,chrome=1
+      etag:
+      - "\"5d1bc3e7c96eba873098df89f4af1ee2\""
+      content-type:
+      - application/xml; charset=utf-8
+      server:
+      - thin 1.2.11 codename Bat-Shit Crazy
+      date:
+      - Tue, 20 Dec 2011 14:30:22 GMT
+      x-runtime:
+      - "0.309692"
+      set-cookie:
+      - _session_id=BAh7CCIPc2Vzc2lvbl9pZCIlZTJjNTVhZDliMTljMzUyOTZiMDFiOWZlYWVlNTU2OTgiGXdhcmRlbi51c2VyLnVzZXIua2V5aQYiEGJyZWFkY3J1bWJzWwA%3D--7db888b26ee555c9d51cad92eec0f20f725fd6f3; path=/; HttpOnly
+      cache-control:
+      - max-age=0, private, must-revalidate
+      transfer-encoding:
+      - chunked
+    body: |
+      <image href='https://localhost/conductor/api/images/af1b3773-b229-406a-b59c-f5f96ebc2d0b' id='af1b3773-b229-406a-b59c-f5f96ebc2d0b'>
+      <status>DELETED</status>
+      <content>
+      </content>
+      </image>
+
+    http_version: "1.1"
\ No newline at end of file
diff --git a/spec/vcr/cassettes/command/delete_command/delete_target_image_no_provider_content.yml b/spec/vcr/cassettes/command/delete_command/delete_target_image_no_provider_content.yml
new file mode 100644
index 0000000..717757b
--- /dev/null
+++ b/spec/vcr/cassettes/command/delete_command/delete_target_image_no_provider_content.yml
@@ -0,0 +1,42 @@
+---
+- !ruby/struct:VCR::HTTPInteraction
+  request: !ruby/struct:VCR::Request
+    method: :delete
+    uri: https://admin:password@localhost:443/conductor/api/target_images/93bc6d11-6b09-4b1c-92a3-c580ca4f6f3b.xml
+    body:
+    headers:
+      accept-language:
+      - en
+      accept:
+      - application/xml
+  response: !ruby/struct:VCR::Response
+    status: !ruby/struct:VCR::ResponseStatus
+      code: 200
+      message: OK
+    headers:
+      x-ua-compatible:
+      - IE=Edge,chrome=1
+      etag:
+      - "\"641448cca5a5780b18b324c7308ff65a\""
+      content-type:
+      - application/xml; charset=utf-8
+      server:
+      - thin 1.2.11 codename Bat-Shit Crazy
+      date:
+      - Tue, 20 Dec 2011 14:39:50 GMT
+      x-runtime:
+      - "0.204005"
+      set-cookie:
+      - _session_id=BAh7CCIPc2Vzc2lvbl9pZCIlNTNkZGFmNGNkOGZhNjQxZmI1Nzc5MTM3OTQxN2VjNTYiGXdhcmRlbi51c2VyLnVzZXIua2V5aQYiEGJyZWFkY3J1bWJzWwA%3D--b59985e00d69a7903bc134a51a9f1cd00edc276d; path=/; HttpOnly
+      cache-control:
+      - max-age=0, private, must-revalidate
+      transfer-encoding:
+      - chunked
+    body: |
+      <target_image href='https://localhost/conductor/api/images/93bc6d11-6b09-4b1c-92a3-c580ca4f6f3b' id='93bc6d11-6b09-4b1c-92a3-c580ca4f6f3b'>
+      <status>DELETED</status>
+      <content>
+      </content>
+      </target_image>
+
+    http_version: "1.1"
\ No newline at end of file
-- 
1.7.6.4




More information about the aeolus-devel mailing list