[PATCH aeolus-cli] BZ#767068 Fixed Error handling on delete

Richard Su rwsu at redhat.com
Tue Dec 20 00:07:10 UTC 2011


On 12/16/2011 07:33 AM, mtaylor at redhat.com wrote:
> From: Martyn Taylor<mtaylor at redhat.com>
>
> ---
>   lib/aeolus_cli/command/delete_command.rb           |   72 ++++-------
>   spec/command/delete_command_spec.rb                |  136 ++++++++++++++------
>   .../delete_command/delete_build_not_found.yml      |   39 ++++++
>   .../delete_command/delete_image_not_found.yml      |   39 ++++++
>   .../delete_provider_image_not_found.yml            |   39 ++++++
>   .../delete_target_image_not_found.yml              |   39 ++++++
>   6 files changed, 277 insertions(+), 87 deletions(-)
>   create mode 100644 spec/vcr/cassettes/command/delete_command/delete_build_not_found.yml
>   create mode 100644 spec/vcr/cassettes/command/delete_command/delete_image_not_found.yml
>   create mode 100644 spec/vcr/cassettes/command/delete_command/delete_provider_image_not_found.yml
>   create mode 100644 spec/vcr/cassettes/command/delete_command/delete_target_image_not_found.yml
>
> diff --git a/lib/aeolus_cli/command/delete_command.rb b/lib/aeolus_cli/command/delete_command.rb
> index 8f7b3cd..54de83f 100644
> --- a/lib/aeolus_cli/command/delete_command.rb
> +++ b/lib/aeolus_cli/command/delete_command.rb
> @@ -21,18 +21,12 @@ module Aeolus
>
>         def provider_image
>           begin
> -          if pi = ProviderImage.find(@options[:providerimage])
> -            if response = pi.destroy
> -              puts "Provider Image: " + @options[:providerimage] + " Deleted Successfully"
> -              puts ""
> -              print_provider_content(response.body)
> -              exit(0)
> -            end
> -            puts "ERROR: Unable to Delete Provider Image: " + @options[:providerimage]
> -            exit(1)
> -          else
> -            puts "ERROR: Provider Image: " + @options[:providerimage] + " does not exist"
> -            exit(1)
> +          pi = ProviderImage.new({:id =>  @options[:providerimage]})
> +          if response = pi.destroy
> +            puts "Provider Image: " + @options[:providerimage] + " Deleted Successfully"
> +            puts ""
> +            print_provider_content(response.body)
> +            exit(0)
>             end
>           rescue =>  e
>             handle_exception(e)
> @@ -41,18 +35,12 @@ module Aeolus
>
>         def target_image
>           begin
> -          if ti = TargetImage.find(@options[:targetimage])
> -            if response = ti.destroy
> -              puts "Target Image: " + @options[:targetimage] + " Deleted Successfully"
> -              puts ""
> -              print_provider_content(response.body)
> -              exit(0)
> -            end
> -            puts "ERROR: Unable to Delete Target Image: " + @options[:targetimage]
> -            exit(1)
> -          else
> -            puts "ERROR: Target Image: " + @options[:targetimage] + " does not exist"
> -            exit(1)
> +          ti = TargetImage.new({:id =>  @options[:targetimage]})
> +          if response = ti.destroy
> +            puts "Target Image: " + @options[:targetimage] + " Deleted Successfully"
> +            puts ""
> +            print_provider_content(response.body)
> +            exit(0)
>             end
>           rescue =>  e
>             handle_exception(e)
> @@ -61,18 +49,12 @@ module Aeolus
>
>         def build
>           begin
> -          if b = Build.find(@options[:build])
> -            if response = b.destroy
> -              puts "Build: " + @options[:build] + " Deleted Successfully"
> -              puts ""
> -              print_provider_content(response.body)
> -              exit(0)
> -            end
> -            puts "ERROR: Unable to Delete Build: " + @options[:build]
> -            exit(1)
> -          else
> -            puts "ERROR: Build: " + @options[:build] + " does not exist"
> -            exit(1)
> +          b = Build.new({:id =>  @options[:build]})
> +          if response = b.destroy
> +            puts "Build: " + @options[:build] + " Deleted Successfully"
> +            puts ""
> +            print_provider_content(response.body)
> +            exit(0)
>             end
>           rescue =>  e
>             handle_exception(e)
> @@ -81,19 +63,15 @@ module Aeolus
>
>         def image
>           begin
> -          if i = Image.find(@options[:image])
> -            if response = i.destroy
> -              puts "Image: " + @options[:image] + " Deleted Successfully"
> -              puts ""
> -              print_provider_content(response.body)
> -              exit(0)
> -            end
> -            puts "ERROR: Unable to Delete Image: " + @options[:image]
> -          else
> -            puts "ERROR: Image: " + @options[:image] + " does not exist"
> +          i = Image.new({:id =>  @options[:image]})
> +          if response = i.destroy
> +            puts "Image: " + @options[:image] + " Deleted Successfully"
> +            puts ""
> +            print_provider_content(response.body)
> +            exit(0)
>             end
>           rescue =>  e
> -          exit(1)
> +          handle_exception(e)
>           end
>         end
>
> diff --git a/spec/command/delete_command_spec.rb b/spec/command/delete_command_spec.rb
> index 49051a8..7325161 100644
> --- a/spec/command/delete_command_spec.rb
> +++ b/spec/command/delete_command_spec.rb
> @@ -17,57 +17,113 @@ require 'spec_helper'
>   module Aeolus
>     module CLI
>       describe DeleteCommand do
> -      it "should delete a provider image of a given id" do
> -        @options = {:providerimage =>  "20bb51cb-a289-4331-9e56-26196df62ca8"}
> -        VCR.use_cassette('command/delete_command/delete_provider_image') do
> -          dc = DeleteCommand.new(@options)
> -          begin
> -            dc.provider_image
> -          rescue SystemExit =>  e
> -            e.status.should == 0
> +      context "Sucessful Delete" do
> +        it "should delete a provider image of a given id" do
> +          @options = {:providerimage =>  "20bb51cb-a289-4331-9e56-26196df62ca8"}
> +          VCR.use_cassette('command/delete_command/delete_provider_image') do
> +            dc = DeleteCommand.new(@options)
> +            begin
> +              dc.provider_image
> +            rescue SystemExit =>  e
> +              e.status.should == 0
> +            end
> +            $stdout.string.should include("Provider Image: 20bb51cb-a289-4331-9e56-26196df62ca8 Deleted Successfully")
>             end
> -          $stdout.string.should include("Provider Image: 20bb51cb-a289-4331-9e56-26196df62ca8 Deleted Successfully")
>           end
> -      end
>
> -      it "should delete an target image of a given id" do
> -        VCR.use_cassette('command/delete_command/delete_target_image') do
> -          @options = {:targetimage =>  "ef7ee9be-5f3c-4695-969a-7c3fa996c048"}
> -          dc = DeleteCommand.new(@options)
> -          begin
> -            dc.target_image
> -          rescue SystemExit =>  e
> -            e.status.should == 0
> +        it "should delete an target image of a given id" do
> +          VCR.use_cassette('command/delete_command/delete_target_image') do
> +            @options = {:targetimage =>  "ef7ee9be-5f3c-4695-969a-7c3fa996c048"}
> +            dc = DeleteCommand.new(@options)
> +            begin
> +              dc.target_image
> +            rescue SystemExit =>  e
> +              e.status.should == 0
> +            end
> +            $stdout.string.should include("Target Image: ef7ee9be-5f3c-4695-969a-7c3fa996c048 Deleted Successfully")
>             end
> -          $stdout.string.should include("Target Image: ef7ee9be-5f3c-4695-969a-7c3fa996c048 Deleted Successfully")
>           end
> -      end
>
> -      it "should delete a build of a given id" do
> -        @options = {:build =>  "becc269c-8a02-4f6a-9132-2af3cb580b2b"}
> -        VCR.use_cassette('command/delete_command/delete_build') do
> -          dc = DeleteCommand.new(@options)
> -          begin
> -            dc.build
> -          rescue SystemExit =>  e
> -            e.status.should == 0
> +        it "should delete a build of a given id" do
> +          @options = {:build =>  "becc269c-8a02-4f6a-9132-2af3cb580b2b"}
> +          VCR.use_cassette('command/delete_command/delete_build') do
> +            dc = DeleteCommand.new(@options)
> +            begin
> +              dc.build
> +            rescue SystemExit =>  e
> +              e.status.should == 0
> +            end
> +            $stdout.string.should include("Build: becc269c-8a02-4f6a-9132-2af3cb580b2b Deleted Successfully")
> +          end
> +        end
> +
> +        it "should delete an image of a given id" do
> +          VCR.use_cassette('command/delete_command/delete_image') do
> +            @options = {:image =>  "55bc53d9-7310-4cff-8c26-99823d79dfa6"}
> +            dc = DeleteCommand.new(@options)
> +            begin
> +              dc.image
> +            rescue SystemExit =>  e
> +              e.status.should == 0
> +            end
> +            $stdout.string.should include("Image: 55bc53d9-7310-4cff-8c26-99823d79dfa6 Deleted Successfully")
> +            $stdout.string.should include("N.B. The following provider content must be manually removed")
> +            $stdout.string.should include("mock")
>             end
> -          $stdout.string.should include("Build: becc269c-8a02-4f6a-9132-2af3cb580b2b Deleted Successfully")
>           end
>         end
>
> -      it "should delete an image of a given id" do
> -        VCR.use_cassette('command/delete_command/delete_image') do
> -          @options = {:image =>  "55bc53d9-7310-4cff-8c26-99823d79dfa6"}
> -          dc = DeleteCommand.new(@options)
> -          begin
> -            dc.image
> -          rescue SystemExit =>  e
> -            e.status.should == 0
> +      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
> +            @options = {:image =>  "1234"}
> +            dc = DeleteCommand.new(@options)
> +            begin
> +              dc.image
> +            rescue SystemExit =>  e
> +              e.status.should == 1
> +            end
> +            $stdout.string.should include("Could not find Image 1234")
> +          end
> +        end
> +
> +        it "should display an appropriate message when the given build is not found" do
> +          VCR.use_cassette('command/delete_command/delete_build_not_found') do
> +            @options = {:build =>  "1234"}
> +            dc = DeleteCommand.new(@options)
> +            begin
> +              dc.build
> +            rescue SystemExit =>  e
> +              e.status.should == 1
> +            end
> +            $stdout.string.should include("Could not find Build 1234")
> +          end
> +        end
> +
> +        it "should display an appropriate message when the given target image is not found" do
> +          VCR.use_cassette('command/delete_command/delete_target_image_not_found') do
> +            @options = {:targetimage =>  "1234"}
> +            dc = DeleteCommand.new(@options)
> +            begin
> +              dc.target_image
> +            rescue SystemExit =>  e
> +              e.status.should == 1
> +            end
> +            $stdout.string.should include("Could not find TargetImage 1234")
> +          end
> +        end
> +
> +        it "should display an appropriate message when the given provider image is not found" do
> +          VCR.use_cassette('command/delete_command/delete_provider_image_not_found') do
> +            @options = {:providerimage =>  "1234"}
> +            dc = DeleteCommand.new(@options)
> +            begin
> +              dc.provider_image
> +            rescue SystemExit =>  e
> +              e.status.should == 1
> +            end
> +            $stdout.string.should include("Could not find ProviderImage 1234")
>             end
> -          $stdout.string.should include("Image: 55bc53d9-7310-4cff-8c26-99823d79dfa6 Deleted Successfully")
> -          $stdout.string.should include("N.B. The following provider content must be manually removed")
> -          $stdout.string.should include("mock")
>           end
>         end
>       end
> diff --git a/spec/vcr/cassettes/command/delete_command/delete_build_not_found.yml b/spec/vcr/cassettes/command/delete_command/delete_build_not_found.yml
> new file mode 100644
> index 0000000..a879c96
> --- /dev/null
> +++ b/spec/vcr/cassettes/command/delete_command/delete_build_not_found.yml
> @@ -0,0 +1,39 @@
> +---
> +- !ruby/struct:VCR::HTTPInteraction
> +  request: !ruby/struct:VCR::Request
> +    method: :delete
> +    uri: https://admin:password@localhost:443/conductor/api/builds/1234.xml
> +    body:
> +    headers:
> +      accept-language:
> +      - en
> +      accept:
> +      - application/xml
> +  response: !ruby/struct:VCR::Response
> +    status: !ruby/struct:VCR::ResponseStatus
> +      code: 404
> +      message: Not Found
> +    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:
> +      - Fri, 16 Dec 2011 15:22:02 GMT
> +      x-runtime:
> +      - "0.030815"
> +      set-cookie:
> +      - _session_id=BAh7CCIPc2Vzc2lvbl9pZCIlOGQyZDQ1OGJlNzI5YTQ1YTIzNTlhYzM5NmE2YzlkNmUiGXdhcmRlbi51c2VyLnVzZXIua2V5aQYiEGJyZWFkY3J1bWJzWwA%3D--246122de0cd2d386edb27a7e2eb14e4ac1818975; path=/; HttpOnly
> +      cache-control:
> +      - no-cache
> +      transfer-encoding:
> +      - chunked
> +    body: |
> +<error>
> +<code>BuildNotFound</code>
> +<message>Could not find Build 1234</message>
> +</error>
> +
> +    http_version: "1.1"
> \ No newline at end of file
> diff --git a/spec/vcr/cassettes/command/delete_command/delete_image_not_found.yml b/spec/vcr/cassettes/command/delete_command/delete_image_not_found.yml
> new file mode 100644
> index 0000000..459ca77
> --- /dev/null
> +++ b/spec/vcr/cassettes/command/delete_command/delete_image_not_found.yml
> @@ -0,0 +1,39 @@
> +---
> +- !ruby/struct:VCR::HTTPInteraction
> +  request: !ruby/struct:VCR::Request
> +    method: :delete
> +    uri: https://admin:password@localhost:443/conductor/api/images/1234.xml
> +    body:
> +    headers:
> +      accept-language:
> +      - en
> +      accept:
> +      - application/xml
> +  response: !ruby/struct:VCR::Response
> +    status: !ruby/struct:VCR::ResponseStatus
> +      code: 500
> +      message: Internal Server Error
> +    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:
> +      - Fri, 16 Dec 2011 15:22:02 GMT
> +      x-runtime:
> +      - "0.094418"
> +      set-cookie:
> +      - _session_id=BAh7CCIPc2Vzc2lvbl9pZCIlMDdmYzYxZjc0NDA5MDRiNTNjNzk0NWJjMzU5MTM5YTMiGXdhcmRlbi51c2VyLnVzZXIua2V5aQYiEGJyZWFkY3J1bWJzWwA%3D--38649c32a563c52d870e6f2cbf32045b4c9c757f; path=/; HttpOnly
> +      cache-control:
> +      - no-cache
> +      transfer-encoding:
> +      - chunked
> +    body: |
> +<error>
> +<code>ImageDeleteFailure</code>
> +<message>Could not find Image 1234</message>
> +</error>
> +
> +    http_version: "1.1"
> \ No newline at end of file
> diff --git a/spec/vcr/cassettes/command/delete_command/delete_provider_image_not_found.yml b/spec/vcr/cassettes/command/delete_command/delete_provider_image_not_found.yml
> new file mode 100644
> index 0000000..2e88d0c
> --- /dev/null
> +++ b/spec/vcr/cassettes/command/delete_command/delete_provider_image_not_found.yml
> @@ -0,0 +1,39 @@
> +---
> +- !ruby/struct:VCR::HTTPInteraction
> +  request: !ruby/struct:VCR::Request
> +    method: :delete
> +    uri: https://admin:password@localhost:443/conductor/api/provider_images/1234.xml
> +    body:
> +    headers:
> +      accept-language:
> +      - en
> +      accept:
> +      - application/xml
> +  response: !ruby/struct:VCR::Response
> +    status: !ruby/struct:VCR::ResponseStatus
> +      code: 404
> +      message: Not Found
> +    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:
> +      - Fri, 16 Dec 2011 15:22:02 GMT
> +      x-runtime:
> +      - "0.137996"
> +      set-cookie:
> +      - _session_id=BAh7CCIPc2Vzc2lvbl9pZCIlZTYzMDIzMmRhZGMwYTljOTdkNWNjNjk3MTQ4ZjY0ODkiGXdhcmRlbi51c2VyLnVzZXIua2V5aQYiEGJyZWFkY3J1bWJzWwA%3D--f6048c6a5d31f23e5206f6e9079e199f16e19a90; path=/; HttpOnly
> +      cache-control:
> +      - no-cache
> +      transfer-encoding:
> +      - chunked
> +    body: |
> +<error>
> +<code>ProviderImageNotFound</code>
> +<message>Could not find ProviderImage 1234</message>
> +</error>
> +
> +    http_version: "1.1"
> \ No newline at end of file
> diff --git a/spec/vcr/cassettes/command/delete_command/delete_target_image_not_found.yml b/spec/vcr/cassettes/command/delete_command/delete_target_image_not_found.yml
> new file mode 100644
> index 0000000..1ec8227
> --- /dev/null
> +++ b/spec/vcr/cassettes/command/delete_command/delete_target_image_not_found.yml
> @@ -0,0 +1,39 @@
> +---
> +- !ruby/struct:VCR::HTTPInteraction
> +  request: !ruby/struct:VCR::Request
> +    method: :delete
> +    uri: https://admin:password@localhost:443/conductor/api/target_images/1234.xml
> +    body:
> +    headers:
> +      accept-language:
> +      - en
> +      accept:
> +      - application/xml
> +  response: !ruby/struct:VCR::Response
> +    status: !ruby/struct:VCR::ResponseStatus
> +      code: 500
> +      message: Internal Server Error
> +    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:
> +      - Fri, 16 Dec 2011 15:22:02 GMT
> +      x-runtime:
> +      - "0.031049"
> +      set-cookie:
> +      - _session_id=BAh7CCIPc2Vzc2lvbl9pZCIlZDIyMDEyODA4Y2UxMTE2MzBhZjM3ZDZlNzgwZTEwMmIiGXdhcmRlbi51c2VyLnVzZXIua2V5aQYiEGJyZWFkY3J1bWJzWwA%3D--3ca32f2ee99e9364ab7304616a57b1d20f3c6502; path=/; HttpOnly
> +      cache-control:
> +      - no-cache
> +      transfer-encoding:
> +      - chunked
> +    body: |
> +<error>
> +<code>TargetImageDeleteFailure</code>
> +<message>Could not find TargetImage 1234</message>
> +</error>
> +
> +    http_version: "1.1"
> \ No newline at end of file

The correct error message is shown.

aeolus-cli delete --image 36cf0630-0506-42c7-b1bc-baf6c1cd9c

ERROR:  ImageDeleteFailure => Could not find Image 
36cf0630-0506-42c7-b1bc-baf6c1cd9c

But when you attempt to delete a valid object, the delete is successful, 
but there is a problem with the print_provider_content part of the code:

aeolus-cli delete --image 36cf0630-0506-42c7-b1bc-baf6c1cd9cd5
Image: 36cf0630-0506-42c7-b1bc-baf6c1cd9cd5 Deleted Successfully

/usr/lib/ruby/gems/1.8/gems/aeolus-cli-0.3.0/lib/aeolus_cli/command/base_command.rb:89:in 
`handle_exception': undefined method `response' for #<NoMethodError: 
undefined method `[]' for nil:NilClass> (NoMethodError)
     from 
/usr/lib/ruby/gems/1.8/gems/aeolus-cli-0.3.0/lib/aeolus_cli/command/delete_command.rb:74:in 
`image'
     from 
/usr/lib/ruby/gems/1.8/gems/aeolus-cli-0.3.0/lib/aeolus_cli/command/config_parser.rb:275:in 
`send'
     from 
/usr/lib/ruby/gems/1.8/gems/aeolus-cli-0.3.0/lib/aeolus_cli/command/config_parser.rb:275:in 
`delete'
     from 
/usr/lib/ruby/gems/1.8/gems/aeolus-cli-0.3.0/lib/aeolus_cli/command/config_parser.rb:38:in 
`send'
     from 
/usr/lib/ruby/gems/1.8/gems/aeolus-cli-0.3.0/lib/aeolus_cli/command/config_parser.rb:38:in 
`process'
     from /usr/lib/ruby/gems/1.8/gems/aeolus-cli-0.3.0/bin/aeolus-cli:20
     from /usr/bin/aeolus-cli:19:in `load'
     from /usr/bin/aeolus-cli:19




More information about the aeolus-devel mailing list