[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