From b8823a7c8fea8b60bf3df692f39da8b5b957d31b Mon Sep 17 00:00:00 2001 From: geemus Date: Sat, 8 May 2010 14:51:41 -0700 Subject: [PATCH] [ec2] consolidated shindo tests for volumes --- tests/aws/helper.rb | 32 +++++++ .../{addresses_tests.rb => address_tests.rb} | 7 +- tests/aws/requests/ec2/volume_tests.rb | 83 +++++++++++++++++++ tests/helper.rb | 11 +-- 4 files changed, 123 insertions(+), 10 deletions(-) rename tests/aws/requests/ec2/{addresses_tests.rb => address_tests.rb} (95%) create mode 100644 tests/aws/requests/ec2/volume_tests.rb diff --git a/tests/aws/helper.rb b/tests/aws/helper.rb index 5ef05ab79..4d7c07acb 100644 --- a/tests/aws/helper.rb +++ b/tests/aws/helper.rb @@ -46,6 +46,38 @@ module AWS 'return' => ::Fog::Boolean } + VOLUME = { + 'availabilityZone' => String, + 'createTime' => Time, + 'requestId' => String, + 'size' => Integer, + 'snapshotId' => NilClass, + 'status' => String, + 'volumeId' => String + } + + VOLUME_ATTACHMENT = { + 'attachTime' => Time, + 'device' => String, + 'instanceId' => String, + 'requestId' => String, + 'status' => String, + 'volumeId' => String + } + + VOLUMES = { + 'volumeSet' => [{ + 'availabilityZone' => String, + 'attachmentSet' => [], + 'createTime' => Time, + 'size' => Integer, + 'snapshotId' => NilClass, + 'status' => String, + 'volumeId' => String + }], + 'requestId' => String + } + end end diff --git a/tests/aws/requests/ec2/addresses_tests.rb b/tests/aws/requests/ec2/address_tests.rb similarity index 95% rename from tests/aws/requests/ec2/addresses_tests.rb rename to tests/aws/requests/ec2/address_tests.rb index 30ab31ca4..e524817b0 100644 --- a/tests/aws/requests/ec2/addresses_tests.rb +++ b/tests/aws/requests/ec2/address_tests.rb @@ -1,4 +1,4 @@ -Shindo.tests('AWS::EC2', ['aws']) do +Shindo.tests('AWS::EC2 | address requests', ['aws']) do @server = AWS[:ec2].servers.create(:image_id => GENTOO_AMI) @server.wait_for { ready? } @@ -68,11 +68,8 @@ Shindo.tests('AWS::EC2', ['aws']) do end test("#disassociate_addresses('127.0.0.1') raises BadRequest error") do - begin + has_error(Excon::Errors::BadRequest) do AWS[:ec2].disassociate_address('127.0.0.1') - false - rescue Excon::Errors::BadRequest - true end end diff --git a/tests/aws/requests/ec2/volume_tests.rb b/tests/aws/requests/ec2/volume_tests.rb new file mode 100644 index 000000000..87804d832 --- /dev/null +++ b/tests/aws/requests/ec2/volume_tests.rb @@ -0,0 +1,83 @@ +Shindo.tests('AWS::EC2 | volume requests', ['aws']) do + + @server = AWS[:ec2].servers.create(:image_id => GENTOO_AMI) + @server.wait_for { ready? } + + tests('success') do + + @volume_id = nil + + test('#create_volume') do + @data = AWS[:ec2].create_volume(@server.availability_zone, 1).body + @volume_id = @data['volumeId'] + has_format(@data, AWS::EC2::Formats::VOLUME) + end + + test('#describe_volumes') do + @data = AWS[:ec2].describe_volumes.body + has_format(@data, AWS::EC2::Formats::VOLUMES) + end + + test("#describe_volumes(#{@volume_id})") do + @data = AWS[:ec2].describe_volumes.body + has_format(@data, AWS::EC2::Formats::VOLUMES) + end + + test("#attach_volume(#{@server.identity}, #{@volume_id}, '/dev/sdh')") do + @data = AWS[:ec2].attach_volume(@server.identity, @volume_id, '/dev/sdh').body + has_format(@data, AWS::EC2::Formats::VOLUME_ATTACHMENT) + end + + test("#detach_volume('#{@volume_id}')") do + @data = AWS[:ec2].detach_volume(@volume_id).body + has_format(@data, AWS::EC2::Formats::VOLUME_ATTACHMENT) + end + + test("#delete_volume('#{@volume_id}')") do + AWS[:ec2].volumes.get(@volume_id).wait_for { ready? } + @data = AWS[:ec2].delete_volume(@volume_id).body + has_format(@data, AWS::EC2::Formats::BASIC) + end + + end + tests ('failure') do + + @volume = AWS[:ec2].volumes.create(:availability_zone => @server.availability_zone, :size => 1) + + test("#describe_volume('vol-00000000') raises BadRequest error") do + has_error(Excon::Errors::BadRequest) do + AWS[:ec2].describe_volumes('vol-00000000') + end + end + + test("#attach_volume('i-00000000', '#{@volume.identity}', '/dev/sdh') raises BadRequest error") do + has_error(Excon::Errors::BadRequest) do + AWS[:ec2].attach_volume('i-00000000', @volume.identity, '/dev/sdh') + end + end + + test("#attach_volume('#{@server.identity}', 'vol-00000000', '/dev/sdh') raises BadRequest error") do + has_error(Excon::Errors::BadRequest) do + AWS[:ec2].attach_volume(@server.identity, 'vol-00000000', '/dev/sdh') + end + end + + test("#detach_volume('vol-00000000') raises BadRequest error") do + has_error(Excon::Errors::BadRequest) do + AWS[:ec2].detach_volume('vol-00000000') + end + end + + test("#delete_volume('vol-00000000') raises BadRequest error") do + has_error(Excon::Errors::BadRequest) do + AWS[:ec2].delete_volume('vol-00000000') + end + end + + @volume.destroy + + end + + @server.destroy + +end diff --git a/tests/helper.rb b/tests/helper.rb index 386f89a01..6e3ade248 100644 --- a/tests/helper.rb +++ b/tests/helper.rb @@ -5,7 +5,7 @@ if ENV["FOG_MOCK"] == "true" Fog.mock! end -def has_error(description, error, &block) +def has_error(error, &block) begin yield @formatador.display_line("[red]did not raise #{error}[/]") @@ -15,13 +15,14 @@ def has_error(description, error, &block) end end -# TODO: Currently is true even if some of the keys in format do not appear -def has_format(original_data, format) +def has_format(original_data, original_format) valid = true data = original_data.dup + format = original_format.dup for key, value in format valid &&= data.has_key?(key) datum = data.delete(key) + format.delete(key) case value when Array valid &&= datum.is_a?(Array) @@ -40,9 +41,9 @@ def has_format(original_data, format) valid &&= datum.is_a?(value) end end - valid &&= data.empty? + valid &&= data.empty? && format.empty? unless valid - @formatador.display_line("[red]#{original_data.inspect} does not match #{format.inspect}[/]") + @formatador.display_line("[red]#{original_data.inspect} does not match #{original_format.inspect}[/]") end valid end