awsum 0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. data/.autotest +1 -0
  2. data/.gitignore +5 -0
  3. data/.rspec +1 -0
  4. data/Gemfile +15 -0
  5. data/Gemfile.lock +44 -0
  6. data/LICENSE +19 -0
  7. data/README.rdoc +42 -0
  8. data/Rakefile +75 -0
  9. data/awsum.gemspec +199 -0
  10. data/lib/awsum.rb +20 -0
  11. data/lib/awsum/ec2.rb +741 -0
  12. data/lib/awsum/ec2/address.rb +67 -0
  13. data/lib/awsum/ec2/availability_zone.rb +16 -0
  14. data/lib/awsum/ec2/image.rb +62 -0
  15. data/lib/awsum/ec2/instance.rb +57 -0
  16. data/lib/awsum/ec2/keypair.rb +16 -0
  17. data/lib/awsum/ec2/parsers/address_parser.rb +61 -0
  18. data/lib/awsum/ec2/parsers/availability_zone_parser.rb +57 -0
  19. data/lib/awsum/ec2/parsers/image_parser.rb +74 -0
  20. data/lib/awsum/ec2/parsers/instance_parser.rb +90 -0
  21. data/lib/awsum/ec2/parsers/keypair_parser.rb +64 -0
  22. data/lib/awsum/ec2/parsers/purchase_reserved_instances_offering_parser.rb +34 -0
  23. data/lib/awsum/ec2/parsers/region_parser.rb +56 -0
  24. data/lib/awsum/ec2/parsers/register_image_parser.rb +34 -0
  25. data/lib/awsum/ec2/parsers/reserved_instance_parser.rb +64 -0
  26. data/lib/awsum/ec2/parsers/reserved_instances_offering_parser.rb +63 -0
  27. data/lib/awsum/ec2/parsers/security_group_parser.rb +106 -0
  28. data/lib/awsum/ec2/parsers/snapshot_parser.rb +64 -0
  29. data/lib/awsum/ec2/parsers/volume_parser.rb +77 -0
  30. data/lib/awsum/ec2/region.rb +54 -0
  31. data/lib/awsum/ec2/reserved_instance.rb +24 -0
  32. data/lib/awsum/ec2/reserved_instances_offering.rb +20 -0
  33. data/lib/awsum/ec2/security_group.rb +74 -0
  34. data/lib/awsum/ec2/snapshot.rb +23 -0
  35. data/lib/awsum/ec2/volume.rb +65 -0
  36. data/lib/awsum/error.rb +53 -0
  37. data/lib/awsum/net_fix.rb +100 -0
  38. data/lib/awsum/parser.rb +18 -0
  39. data/lib/awsum/requestable.rb +216 -0
  40. data/lib/awsum/s3.rb +220 -0
  41. data/lib/awsum/s3/bucket.rb +28 -0
  42. data/lib/awsum/s3/headers.rb +24 -0
  43. data/lib/awsum/s3/object.rb +138 -0
  44. data/lib/awsum/s3/parsers/bucket_parser.rb +43 -0
  45. data/lib/awsum/support.rb +94 -0
  46. data/spec/fixtures/ec2/addresses.xml +10 -0
  47. data/spec/fixtures/ec2/allocate_address.xml +5 -0
  48. data/spec/fixtures/ec2/associate_address.xml +5 -0
  49. data/spec/fixtures/ec2/attach_volume.xml +9 -0
  50. data/spec/fixtures/ec2/authorize_ip_access.xml +5 -0
  51. data/spec/fixtures/ec2/authorize_owner_group_access.xml +5 -0
  52. data/spec/fixtures/ec2/authorize_owner_group_access_error.xml +2 -0
  53. data/spec/fixtures/ec2/availability_zones.xml +16 -0
  54. data/spec/fixtures/ec2/available_volume.xml +14 -0
  55. data/spec/fixtures/ec2/create_key_pair.xml +29 -0
  56. data/spec/fixtures/ec2/create_security_group.xml +5 -0
  57. data/spec/fixtures/ec2/create_snapshot.xml +9 -0
  58. data/spec/fixtures/ec2/create_volume.xml +10 -0
  59. data/spec/fixtures/ec2/delete_key_pair.xml +5 -0
  60. data/spec/fixtures/ec2/delete_security_group.xml +5 -0
  61. data/spec/fixtures/ec2/delete_snapshot.xml +5 -0
  62. data/spec/fixtures/ec2/delete_volume.xml +5 -0
  63. data/spec/fixtures/ec2/deregister_image.xml +5 -0
  64. data/spec/fixtures/ec2/detach_volume.xml +9 -0
  65. data/spec/fixtures/ec2/disassociate_address.xml +5 -0
  66. data/spec/fixtures/ec2/image.xml +15 -0
  67. data/spec/fixtures/ec2/images.xml +77 -0
  68. data/spec/fixtures/ec2/instance.xml +36 -0
  69. data/spec/fixtures/ec2/instances.xml +88 -0
  70. data/spec/fixtures/ec2/internal_error.xml +2 -0
  71. data/spec/fixtures/ec2/invalid_amiid_error.xml +2 -0
  72. data/spec/fixtures/ec2/invalid_request_error.xml +2 -0
  73. data/spec/fixtures/ec2/key_pairs.xml +10 -0
  74. data/spec/fixtures/ec2/purchase_reserved_instances_offering.xml +5 -0
  75. data/spec/fixtures/ec2/purchase_reserved_instances_offerings.xml +6 -0
  76. data/spec/fixtures/ec2/regions.xml +14 -0
  77. data/spec/fixtures/ec2/register_image.xml +5 -0
  78. data/spec/fixtures/ec2/release_address.xml +5 -0
  79. data/spec/fixtures/ec2/reserved_instances.xml +18 -0
  80. data/spec/fixtures/ec2/reserved_instances_offering.xml +15 -0
  81. data/spec/fixtures/ec2/reserved_instances_offerings.xml +276 -0
  82. data/spec/fixtures/ec2/revoke_ip_access.xml +5 -0
  83. data/spec/fixtures/ec2/revoke_owner_group_access.xml +5 -0
  84. data/spec/fixtures/ec2/run_instances.xml +30 -0
  85. data/spec/fixtures/ec2/security_groups.xml +159 -0
  86. data/spec/fixtures/ec2/snapshots.xml +13 -0
  87. data/spec/fixtures/ec2/terminate_instances.xml +17 -0
  88. data/spec/fixtures/ec2/unassociated_address.xml +10 -0
  89. data/spec/fixtures/ec2/volumes.xml +23 -0
  90. data/spec/fixtures/errors/invalid_parameter_value.xml +2 -0
  91. data/spec/fixtures/s3/buckets.xml +2 -0
  92. data/spec/fixtures/s3/copy_failure.xml +23 -0
  93. data/spec/fixtures/s3/invalid_request_signature.xml +5 -0
  94. data/spec/fixtures/s3/keys.xml +2 -0
  95. data/spec/lib/awsum/ec2/address_spec.rb +149 -0
  96. data/spec/lib/awsum/ec2/availability_zones_spec.rb +21 -0
  97. data/spec/lib/awsum/ec2/image_spec.rb +92 -0
  98. data/spec/lib/awsum/ec2/instance_spec.rb +125 -0
  99. data/spec/lib/awsum/ec2/keypair_spec.rb +55 -0
  100. data/spec/lib/awsum/ec2/parsers/address_parser_spec.rb +51 -0
  101. data/spec/lib/awsum/ec2/parsers/availability_zone_parser_spec.rb +28 -0
  102. data/spec/lib/awsum/ec2/parsers/image_parser_spec.rb +66 -0
  103. data/spec/lib/awsum/ec2/parsers/instance_parser_spec.rb +75 -0
  104. data/spec/lib/awsum/ec2/parsers/keypair_parser_spec.rb +74 -0
  105. data/spec/lib/awsum/ec2/parsers/purchase_reserved_instances_offering_parser_spec.rb +14 -0
  106. data/spec/lib/awsum/ec2/parsers/region_parser_spec.rb +27 -0
  107. data/spec/lib/awsum/ec2/parsers/register_image_parser_spec.rb +15 -0
  108. data/spec/lib/awsum/ec2/parsers/reserved_instance_parser_spec.rb +35 -0
  109. data/spec/lib/awsum/ec2/parsers/reserved_instances_offering_parser_spec.rb +32 -0
  110. data/spec/lib/awsum/ec2/parsers/security_group_parser_spec.rb +78 -0
  111. data/spec/lib/awsum/ec2/parsers/snapshot_parser_spec.rb +30 -0
  112. data/spec/lib/awsum/ec2/parsers/volume_parser_spec.rb +35 -0
  113. data/spec/lib/awsum/ec2/region_spec.rb +73 -0
  114. data/spec/lib/awsum/ec2/reserved_instance_spec.rb +61 -0
  115. data/spec/lib/awsum/ec2/reserved_instances_offering_spec.rb +33 -0
  116. data/spec/lib/awsum/ec2/security_group_spec.rb +179 -0
  117. data/spec/lib/awsum/ec2/snapshots_spec.rb +69 -0
  118. data/spec/lib/awsum/ec2/volume_spec.rb +107 -0
  119. data/spec/lib/awsum/ec2_spec.rb +6 -0
  120. data/spec/lib/awsum/error_spec.rb +31 -0
  121. data/spec/lib/awsum/requestable_spec.rb +126 -0
  122. data/spec/lib/awsum/s3/bucket_spec.rb +95 -0
  123. data/spec/lib/awsum/s3/object_spec.rb +128 -0
  124. data/spec/lib/awsum/s3/parsers/bucket_parser_spec.rb +41 -0
  125. data/spec/lib/awsum/s3/parsers/object_parser_spec.rb +41 -0
  126. data/spec/spec_helper.rb +16 -0
  127. metadata +240 -0
@@ -0,0 +1,74 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2::KeyPairParser do
5
+ subject { Ec2.new('abc', 'xyz') }
6
+ let(:ec2) { subject }
7
+ let(:parser) { Awsum::Ec2::KeyPairParser.new(ec2) }
8
+
9
+ describe "parsing the result of a call to DescribeKeyPairs" do
10
+ let(:result) { parser.parse(fixture('ec2/key_pairs')) }
11
+
12
+ it "should return an array of key pairs" do
13
+ result.should be_a(Array)
14
+ end
15
+
16
+ context "the first key pair" do
17
+ let(:key_pair) { result.first }
18
+
19
+ {
20
+ :name => 'gsg-keypair',
21
+ :fingerprint => 'ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab'
22
+ }.each do |key, value|
23
+ it "should have the correct #{key}" do
24
+ key_pair.send(key).should == value
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ describe "parsing the result of a call to CreateKeyPair" do
31
+ let(:result) { parser.parse(fixture('ec2/create_key_pair')) }
32
+
33
+ it "should return an array of key pairs" do
34
+ result.should be_a(Array)
35
+ end
36
+
37
+ context "the first key pair" do
38
+ let(:key_pair) { result.first }
39
+
40
+ {
41
+ :name => 'test-keypair',
42
+ :fingerprint => 'ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab',
43
+ :material => %q{-----BEGIN RSA PRIVATE KEY-----
44
+ MIIEogIBAAKCAQEAqkxIjNxLV/shvaep5Kum3N2xTV6aBbXezVA4HHE371HSq3haKTcST7QYeQha
45
+ 92AmZojAm2ojqWMw9GJaeq/Q7NvXKdMgj3mKd7zY7tdC+HmKYVkAvJ9enuuVwPFxlt+5rPpZ2jS+
46
+ kl4MWEvWh1N5U1urx5gzHq2e/k7P+dCBwFnCHsg/p1mym4j4qwEHEviaUG6SnB8Xvuggp/pxCmJg
47
+ 9Gie4cXNgbBboEyAQDRb/AmrehbBa90GOVDjDGIzB98rOcJ22FRrpLqSl2D+FQKsXWboqgbIrgKT
48
+ ven7mzb8cgDJNrWTI/MNP8p8gNTh+L7gTwPDcGfaDBiRpn9t3FiTBwIDAQABAoIBAEmuNZmUWpjX
49
+ U/LdjtkcF1bqKCMkchlUZfCI664KojvOOAruSHwakrafYhNDtS/gjtzAAC19z64i93RU9XatiQRh
50
+ 3YcADM9ms604rNcxlY0x8NhLjNEPVv4FScav8AhqBci8jJGnTmi/fjHZphjo2c5iFEGILV3xmp/G
51
+ 857PQsQ4nOAzoV7fQPYow4XiO/xhGh8p8o2Z9Og3GdbEGH1v/051g3O1eU7PFyQaxmOGNYmklMuM
52
+ V/8l/LK+OKR0f9KgqcgDSlEbidqsmWM0a1/t7+I5W/mgXSZl5U4HN680DKbkzoX0kgoPN7XMbcSX
53
+ sHNguqDfrvkBUQu1vEaXebWfpekCgYEA0qVbcFGxKniyYxmvtSrbb5bpEnh6zRCGXgSU4fX41i8P
54
+ Xg15R7FnwGO5nuRXqGW6CSgfbA7YAVEQHunUOB0XWuJWgn6gsqvnCZvyfRnqyMJJjRhvuaUMTn/5
55
+ ikcayflqPFHvv5Z+pB3pWNaTD6lM5imdF1In9RBYL4q5Vpt9gl0CgYEAzvb6cS6Yi0PkxU3OOEmg
56
+ 98QcdTEd1hrk3r6uXI1TOeiUPIw+dyGCKa9OqpcFDs+0FskFs6RzztRh2gpwQZTH3UOYPqsjsWd+
57
+ AjL3jv+vmpU1OhnA0SpkyiiZtaSAV2N+Xlq8orG6fbnYFCdzHbufLFaoOpbGptmLfrwMSvnhXLMC
58
+ gYBxRsEcbqHycAOmLUsDBvAIW0QtTaLkIe3QI3CY7viI3bfK4T4GIs3jdP1+B9dn1IStpej36Cea
59
+ 1afwp9ga8PH9Stgwxr3ON4k/7qABTG2o1mpNOQXj9HDgygs8pC4wzTKnC3z9L4Yc5YT15DYjZuzW
60
+ nSxAPUsFi2uQ7W3ruCRPdQKBgGslsCiyb+UBpEmFa3L2o3BCRl1hrUmwKLcszsY5oFHFmCD0lk5E
61
+ ucds6/QjNUoiu+Bj+CC1zgLRL0ubxdwd848YtJQVM+hfZPwseL++naIRBzpqJMnlAcMrW9CPNqaH
62
+ at/cZ/ZuvtbiRPzCI7XL8a8ZugSDFJtC2xYkstSKI2NDAoGAIiwUwKRMJyB9IRXhMfpf6vsEza2t
63
+ urHVUdJUyIwvPJSh2PfkumwrPuk+P+8v6jJjJ0hsqOS+TLQwWclIGwGey/PMNRYqQDqnSUofNmza
64
+ XtGGfWTOD3AdDEH39RTd3Zmfirrjm1YsY/Nb54X+V5TN2uvm/yJBIbb4aLvfG74Jmoc=
65
+ -----END RSA PRIVATE KEY-----}
66
+ }.each do |key, value|
67
+ it "should have the correct #{key}" do
68
+ key_pair.send(key).should == value
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2::PurchaseReservedInstancesOfferingParser do
5
+ subject { Ec2.new('abc', 'xyz') }
6
+ let(:ec2) { subject }
7
+ let(:parser) { Awsum::Ec2::PurchaseReservedInstancesOfferingParser.new(ec2) }
8
+ let(:result) { parser.parse(fixture('ec2/purchase_reserved_instances_offering')) }
9
+
10
+ it "should return an array of reserved instance ids" do
11
+ result.first.should == '1ba8e2e3-e6f7-4ef5-8c6c-6c6e4fad0a56'
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2::RegionParser do
5
+ subject { Ec2.new('abc', 'xyz') }
6
+ let(:ec2) { subject }
7
+ let(:parser) { Awsum::Ec2::RegionParser.new(ec2) }
8
+ let(:result) { parser.parse(fixture('ec2/regions')) }
9
+
10
+ it "should return an array of regions" do
11
+ result.should be_a(Array)
12
+ end
13
+
14
+ context "the first region" do
15
+ let(:region) { result.first }
16
+
17
+ {
18
+ :name => 'eu-west-1',
19
+ :end_point => 'eu-west-1.ec2.amazonaws.com'
20
+ }.each do |key, value|
21
+ it "should have the correct #{key}" do
22
+ region.send(key).should == value
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2::RegisterImageParser do
5
+
6
+ subject { Ec2.new('abc', 'xyz') }
7
+ let(:ec2) { subject }
8
+ let(:parser) { Awsum::Ec2::RegisterImageParser.new(ec2) }
9
+ let(:result) { parser.parse(fixture('ec2/register_image')) }
10
+
11
+ it "should return an image id" do
12
+ result.should == 'ami-4782652e'
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2::ReservedInstanceParser do
5
+ subject { Ec2.new('abc', 'xyz') }
6
+ let(:ec2) { subject }
7
+ let(:parser) { Awsum::Ec2::ReservedInstanceParser.new(ec2) }
8
+ let(:result) { parser.parse(fixture('ec2/reserved_instances')) }
9
+
10
+ it "should return an array of reserved instances" do
11
+ result.should be_a(Array)
12
+ end
13
+
14
+ context "the first reserved instance" do
15
+ let(:reserved_instance) { result.first }
16
+
17
+ {
18
+ :id => '1ba8e2e3-e6f7-4ef5-8c6c-6c6e4fad0a56',
19
+ :instance_type => 'm1.large',
20
+ :availability_zone => 'us-east-1a',
21
+ :start => Time.parse('2009-03-17T09:57:20.668Z'),
22
+ :duration => 31536000,
23
+ :fixed_price => 0.12,
24
+ :usage_price => 1300.0,
25
+ :instance_count => 1,
26
+ :product_description => 'Linux/UNIX',
27
+ :state => 'payment-pending'
28
+ }.each do |key, value|
29
+ it "should have the correct #{key}" do
30
+ reserved_instance.send(key).should == value
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2::ReservedInstancesOfferingParser do
5
+ subject { Ec2.new('abc', 'xyz') }
6
+ let(:ec2) { subject }
7
+ let(:parser) { Awsum::Ec2::ReservedInstancesOfferingParser.new(ec2) }
8
+ let(:result) { parser.parse(fixture('ec2/reserved_instances_offerings')) }
9
+
10
+ it "should return an array of reserved instances offerings" do
11
+ result.should be_a(Array)
12
+ end
13
+
14
+ context "the first offering" do
15
+ let(:offering) { result.first }
16
+
17
+ {
18
+ :id => 'e5a2ff3b-f6eb-4b4e-83f8-b879d7060257',
19
+ :instance_type => 'c1.medium',
20
+ :availability_zone => 'us-east-1b',
21
+ :duration => 94608000,
22
+ :fixed_price => 1000.0,
23
+ :usage_price => 0.06,
24
+ :product_description => 'Linux/UNIX'
25
+ }.each do |key, value|
26
+ it "should have the correct #{key}" do
27
+ offering.send(key).should == value
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2::SecurityGroupParser do
5
+ subject { Ec2.new('abc', 'xyz') }
6
+ let(:ec2) { subject }
7
+ let(:parser) { Awsum::Ec2::SecurityGroupParser.new(ec2) }
8
+
9
+ describe "parsing the result of a call to DescribeSecurityGroups" do
10
+ let(:result) { parser.parse(fixture('ec2/security_groups')) }
11
+
12
+ it "should return an array of security groups" do
13
+ result.should be_a(Array)
14
+ end
15
+
16
+ context "the first security group" do
17
+ let(:security_group) { result.first }
18
+
19
+ {
20
+ :name => 'default',
21
+ :description => 'default group',
22
+ :owner_id => '111111111111'
23
+ }.each do |key, value|
24
+ it "should have the correct #{key}" do
25
+ security_group.send(key).should == value
26
+ end
27
+ end
28
+
29
+ it "should have 3 group permissions" do
30
+ security_group.should have(3).group_permissions
31
+ end
32
+
33
+ it "should have SecurityGroup::GroupPermission in the group_permissions array" do
34
+ security_group.group_permissions.first.should be_a(Awsum::Ec2::SecurityGroup::GroupPermission)
35
+ end
36
+
37
+ it "should have 4 ip permissions" do
38
+ security_group.should have(4).ip_permissions
39
+ end
40
+
41
+ it "should have SecurityGroup::IpPermission in the ip_permissions array" do
42
+ security_group.ip_permissions.first.should be_a(Awsum::Ec2::SecurityGroup::IpPermission)
43
+ end
44
+
45
+ context "in the first group permission" do
46
+ let(:group_permission) { security_group.group_permissions.first }
47
+
48
+ {
49
+ :protocol => 'tcp',
50
+ :from_port => 0,
51
+ :to_port => 65535,
52
+ :group => 'default',
53
+ :user_id => '111111111111'
54
+ }.each do |key, value|
55
+ it "should have the correct #{key}" do
56
+ group_permission.send(key).should == value
57
+ end
58
+ end
59
+ end
60
+
61
+ context "in the first ip permission" do
62
+ let(:ip_permission) { security_group.ip_permissions.first }
63
+
64
+ {
65
+ :protocol => 'tcp',
66
+ :from_port => 22,
67
+ :to_port => 22,
68
+ :ip => '0.0.0.0/0'
69
+ }.each do |key, value|
70
+ it "should have the correct #{key}" do
71
+ ip_permission.send(key).should == value
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2::SnapshotParser do
5
+ subject { Ec2.new('abc', 'xyz') }
6
+ let(:ec2) { subject }
7
+ let(:parser) { Awsum::Ec2::SnapshotParser.new(ec2) }
8
+ let(:result) { parser.parse(fixture('ec2/snapshots')) }
9
+
10
+ it "should return an array of snapshot" do
11
+ result.should be_a(Array)
12
+ end
13
+
14
+ context "the first snapshot" do
15
+ let(:snapshot) { result.first }
16
+
17
+ {
18
+ :id => 'snap-747c911d',
19
+ :volume_id => 'vol-44d6322d',
20
+ :status => 'completed',
21
+ :start_time => Time.parse('2009-01-15T03:59:26.000Z'),
22
+ :progress => '100%'
23
+ }.each do |key, value|
24
+ it "should have the correct #{key}" do
25
+ snapshot.send(key).should == value
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2::VolumeParser do
5
+ subject { Ec2.new('abc', 'xyz') }
6
+ let(:ec2) { subject }
7
+ let(:parser) { Awsum::Ec2::VolumeParser.new(ec2) }
8
+ let(:result) { parser.parse(fixture('ec2/volumes')) }
9
+
10
+ it "should return an array of volumes" do
11
+ result.should be_a(Array)
12
+ end
13
+
14
+ context "the first volume" do
15
+ let(:volume) { result.first }
16
+
17
+ {
18
+ :id => 'vol-44d6322d',
19
+ :size => 10,
20
+ :snapshot_id => nil,
21
+ :availability_zone => 'us-east-1b',
22
+ :status => 'in-use',
23
+ :create_time => Time.parse('2009-01-14T03:57:08.000Z'),
24
+ :instance_id => 'i-3f1cc856',
25
+ :device => '/dev/sdb',
26
+ :attachment_status => 'attached',
27
+ :attach_time => Time.parse('2009-01-14T04:34:35.000Z')
28
+ }.each do |key, value|
29
+ it "should have the correct #{key}" do
30
+ volume.send(key).should == value
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2 do
5
+
6
+ subject { Ec2.new('abc', 'xyz') }
7
+ let(:ec2) { subject }
8
+
9
+ describe "retrieving a list of regions" do
10
+ before do
11
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeRegions|, :body => fixture('ec2/regions'), :status => 200)
12
+ end
13
+
14
+ let(:result) { ec2.regions }
15
+
16
+ it "should return an array of regions" do
17
+ result.first.should be_a(Awsum::Ec2::Region)
18
+ end
19
+ end
20
+
21
+ describe "retrieving a single region" do
22
+ before do
23
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeRegions.*RegionName.1=eu-west-1|, :body => fixture('ec2/regions'), :status => 200)
24
+ end
25
+
26
+ let(:result) { ec2.region 'eu-west-1' }
27
+
28
+ it "should return a region" do
29
+ result.should be_a(Awsum::Ec2::Region)
30
+ end
31
+ end
32
+
33
+ describe "a region" do
34
+ before do
35
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeRegions.*RegionName.1=eu-west-1|, :body => fixture('ec2/regions'), :status => 200)
36
+ end
37
+
38
+ let(:region) { ec2.region 'eu-west-1'}
39
+
40
+ it "should be able to list it's availability zones" do
41
+ FakeWeb.register_uri(:get, %r|https://eu-west-1\.ec2\.amazonaws\.com/?.*Action=DescribeAvailabilityZones|, :body => fixture('ec2/availability_zones'), :status => 200)
42
+
43
+ region.availability_zones.first.should be_a(Awsum::Ec2::AvailabilityZone)
44
+ end
45
+
46
+ it "should work in block mode (with a supplied parameter)" do
47
+ FakeWeb.register_uri(:get, %r|https://eu-west-1\.ec2\.amazonaws\.com/?.*Action=DescribeAvailabilityZones|, :body => fixture('ec2/availability_zones'), :status => 200)
48
+
49
+ zones = ec2.region('eu-west-1') do |region|
50
+ region.availability_zones
51
+ end
52
+
53
+ zones.first.should be_a(Awsum::Ec2::AvailabilityZone)
54
+ end
55
+
56
+ it "should work in block mode (without a supplied parameter)" do
57
+ FakeWeb.register_uri(:get, %r|https://eu-west-1\.ec2\.amazonaws\.com/?.*Action=DescribeAvailabilityZones|, :body => fixture('ec2/availability_zones'), :status => 200)
58
+
59
+ zones = ec2.region('eu-west-1') do
60
+ availability_zones
61
+ end
62
+
63
+ zones.first.should be_a(Awsum::Ec2::AvailabilityZone)
64
+ end
65
+
66
+ it "should receive ec2 methods (pass-through)" do
67
+ FakeWeb.register_uri(:get, %r|https://eu-west-1\.ec2\.amazonaws\.com/?.*Action=RunInstances.*ImageId=9-123456789|, :body => fixture('ec2/run_instances'), :status => 200)
68
+
69
+ region.run_instances('9-123456789').should be_true
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2 do
5
+
6
+ subject { Ec2.new('abc', 'xyz') }
7
+ let(:ec2) { subject }
8
+
9
+ describe "purchasing a reserved instance" do
10
+ before do
11
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=PurchaseReservedInstancesOffering.*InstanceCount.1=1.*ReservedInstancesOfferingId.1=e5a2ff3b-f6eb-4b4e-83f8-b879d7060257|, :body => fixture('ec2/purchase_reserved_instances_offering'), :status => 200)
12
+
13
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeReservedInstances.*ReservedInstanceId.1=1ba8e2e3-e6f7-4ef5-8c6c-6c6e4fad0a56|, :body => fixture('ec2/reserved_instances'), :status => 200)
14
+ end
15
+
16
+ let(:result) { ec2.purchase_reserved_instances_offering 'e5a2ff3b-f6eb-4b4e-83f8-b879d7060257' }
17
+
18
+ it "should return a reserverd instance" do
19
+ result.should be_a(Awsum::Ec2::ReservedInstance)
20
+ end
21
+ end
22
+
23
+ describe "purchasing multiple reserved instances" do
24
+ before do
25
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=PurchaseReservedInstancesOffering.*InstanceCount.1=1.*InstanceCount.2=2.*ReservedInstancesOfferingId.1=e5a2ff3b-f6eb-4b4e-83f8-b879d7060257.*ReservedInstancesOfferingId.2=248e7b75-afbc-4724-82b2-d78353299433|, :body => fixture('ec2/purchase_reserved_instances_offering'), :status => 200)
26
+
27
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeReservedInstances.*ReservedInstanceId.1=1ba8e2e3-e6f7-4ef5-8c6c-6c6e4fad0a56|, :body => fixture('ec2/reserved_instances'), :status => 200)
28
+ end
29
+
30
+ let(:result) { ec2.purchase_reserved_instances_offering ['e5a2ff3b-f6eb-4b4e-83f8-b879d7060257', '248e7b75-afbc-4724-82b2-d78353299433'], [1, 2] }
31
+
32
+ it "should return an array of reserverd instances" do
33
+ result.first.should be_a(Awsum::Ec2::ReservedInstance)
34
+ end
35
+ end
36
+
37
+ describe "retrieving a list of reserved instances" do
38
+ before do
39
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeReservedInstances|, :body => fixture('ec2/reserved_instances'), :status => 200)
40
+ end
41
+
42
+ let(:result) { ec2.reserved_instances }
43
+
44
+ it "should return an array of reserverd instances" do
45
+ result.first.should be_a(Awsum::Ec2::ReservedInstance)
46
+ end
47
+ end
48
+
49
+ describe "retrieving a single reserved instance" do
50
+ before do
51
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeReservedInstances.*ReservedInstanceId.1=1ba8e2e3-e6f7-4ef5-8c6c-6c6e4fad0a56|, :body => fixture('ec2/reserved_instances'), :status => 200)
52
+ end
53
+
54
+ let(:result) { ec2.reserved_instance '1ba8e2e3-e6f7-4ef5-8c6c-6c6e4fad0a56' }
55
+
56
+ it "should return a reserverd instance" do
57
+ result.should be_a(Awsum::Ec2::ReservedInstance)
58
+ end
59
+ end
60
+ end
61
+ end