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,21 @@
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 availability zones" do
10
+ before do
11
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeAvailabilityZones|, :body => fixture('ec2/availability_zones'), :status => 200)
12
+ end
13
+
14
+ let(:result) { ec2.availability_zones }
15
+
16
+ it "should return an array of availability zones" do
17
+ result.first.should be_a(Awsum::Ec2::AvailabilityZone)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,92 @@
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 images" do
10
+ before do
11
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeImages|, :body => fixture('ec2/images'), :status => 200)
12
+ end
13
+
14
+ let(:result) { ec2.images }
15
+
16
+ it "should return an array of images" do
17
+ result.first.should be_a(Awsum::Ec2::Image)
18
+ end
19
+ end
20
+
21
+ describe "retrieving a list of owned images" do
22
+ before do
23
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeImages.*Owner.1=self|, :body => fixture('ec2/images'), :status => 200)
24
+ end
25
+
26
+ let(:result) { ec2.my_images }
27
+
28
+ it "should return an array of images" do
29
+ result.first.should be_a(Awsum::Ec2::Image)
30
+ end
31
+ end
32
+
33
+ describe "retrieving an image by id" do
34
+ before do
35
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeImages.*ImageId.1=ari-f9c22690|, :body => fixture('ec2/image'), :status => 200)
36
+ end
37
+
38
+ let(:result) { ec2.image('ari-f9c22690') }
39
+
40
+ it "should return the image" do
41
+ result.should be_a(Awsum::Ec2::Image)
42
+ end
43
+ end
44
+
45
+ describe "registering an image" do
46
+ before do
47
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=RegisterImage.*ImageLocation=s3.bucket.location|, :body => fixture('ec2/register_image'), :status => 200)
48
+ end
49
+
50
+ it "should be able to create an image" do
51
+ image_id = ec2.register_image('s3.bucket.location')
52
+
53
+ image_id.should == 'ami-4782652e'
54
+ end
55
+ end
56
+
57
+ describe "deregistering an image" do
58
+ before do
59
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DeregisterImage.*ImageId=ami-4782652e|, :body => fixture('ec2/deregister_image'), :status => 200)
60
+ end
61
+
62
+ it "should return true" do
63
+ ec2.deregister_image('ami-4782652e').should be_true
64
+ end
65
+ end
66
+
67
+ describe "an image" do
68
+ before do
69
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeImages.*ImageId.1=ari-f9c22690|, :body => fixture('ec2/image'), :status => 200)
70
+ end
71
+
72
+ let(:image) { ec2.image('ari-f9c22690') }
73
+
74
+ it "should be able to create an image" do
75
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=RunInstances.*ImageId=ari-f9c22690|, :body => fixture('ec2/instance'), :status => 200)
76
+ result = image.run
77
+ result.first.should be_a(Awsum::Ec2::Instance)
78
+ end
79
+
80
+ it "should be able to deregister itself" do
81
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DeregisterImage.*ImageId=ari-f9c22690|, :body => fixture('ec2/deregister_image'), :status => 200)
82
+ image.deregister.should be_true
83
+ end
84
+
85
+ it "should be able reregister itself" do
86
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DeregisterImage.*ImageId=ari-f9c22690|, :body => fixture('ec2/deregister_image'), :status => 200)
87
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=RegisterImage.*ImageLocation=s3.bucket.location|, :body => fixture('ec2/register_image'), :status => 200)
88
+ image.reregister.should be_true
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,125 @@
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 "running an instance" do
10
+ before do
11
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=RunInstances.*ImageId=ari-f9c22690|, :body => fixture('ec2/run_instances'), :status => 200)
12
+ end
13
+
14
+ let(:result) { ec2.run_instances 'ari-f9c22690' }
15
+
16
+ it "should return an array of instances" do
17
+ result.first.should be_a(Awsum::Ec2::Instance)
18
+ end
19
+ end
20
+
21
+ describe "retrieving a list of instances" do
22
+ before do
23
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeInstances|, :body => fixture('ec2/run_instances'), :status => 200)
24
+ end
25
+
26
+ let(:result) { ec2.instances }
27
+
28
+ it "should return an array of instances" do
29
+ result.first.should be_a(Awsum::Ec2::Instance)
30
+ end
31
+ end
32
+
33
+ describe "retrieving a single instance" do
34
+ before do
35
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeInstances.*InstanceId.1=i-3f1cc856|, :body => fixture('ec2/instance'), :status => 200)
36
+ end
37
+
38
+ let(:result) { ec2.instance 'i-3f1cc856' }
39
+
40
+ it "should return an instance" do
41
+ result.should be_a(Awsum::Ec2::Instance)
42
+ end
43
+ end
44
+
45
+ describe "terminating an instance" do
46
+ before do
47
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=TerminateInstances.*InstanceId.1=i-3f1cc856|, :body => fixture('ec2/terminate_instances'), :status => 200)
48
+ end
49
+
50
+ it "should return an instance" do
51
+ ec2.terminate_instances('i-3f1cc856').should be_true
52
+ end
53
+ end
54
+
55
+ describe "an instance" do
56
+ before do
57
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeInstances.*InstanceId.1=i-3f1cc856|, :body => fixture('ec2/instance'), :status => 200)
58
+ end
59
+
60
+ let(:instance) { ec2.instance 'i-3f1cc856' }
61
+
62
+ it "should be able to terminate" do
63
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=TerminateInstances.*InstanceId.1=i-3f1cc856|, :body => fixture('ec2/terminate_instances'), :status => 200)
64
+
65
+ instance.terminate.should be_true
66
+ end
67
+
68
+ it "should be able to list it's volumes" do
69
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeVolumes|, :body => fixture('ec2/volumes'), :status => 200)
70
+
71
+ volumes = instance.volumes
72
+ volumes.first.should be_a(Awsum::Ec2::Volume)
73
+ volumes.first.instance_id.should == instance.id
74
+ end
75
+
76
+ it "should be able to attach a volume" do
77
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeVolumes|, :body => fixture('ec2/volumes'), :status => 200)
78
+
79
+ volume = ec2.volumes.last
80
+
81
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=AttachVolume.*InstanceId=i-3f1cc856.*VolumeId=vol-44d6322d|, :body => fixture('ec2/attach_volume'), :status => 200)
82
+
83
+ instance.attach(volume).should be_true
84
+ end
85
+
86
+ it "should be able to create a volume" do
87
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=CreateVolume|, :body => fixture('ec2/create_volume'), :status => 200)
88
+
89
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeVolumes.*VolumeId.1=vol-44d6322d|, :body => fixture('ec2/available_volume'), :status => 200)
90
+
91
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=AttachVolume.*InstanceId=i-3f1cc856.*VolumeId=vol-44d6322d|, :body => fixture('ec2/attach_volume'), :status => 200)
92
+
93
+ instance.create_volume(10)
94
+ end
95
+ end
96
+
97
+ describe "on a running instance" do
98
+ it "should be able to retrieve an instance of itself" do
99
+ FakeWeb.register_uri(:get, 'http://169.254.169.254/latest/meta-data/instance-id', :body => 'i-3f1cc856', :status => 200)
100
+
101
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeInstances.*InstanceId.1=i-3f1cc856|, :body => fixture('ec2/instance'), :status => 200)
102
+
103
+ ec2.me.should be_a(Awsum::Ec2::Instance)
104
+ end
105
+
106
+ it "should return nil if not a running instance" do
107
+ FakeWeb.register_uri(:get, 'http://169.254.169.254/latest/meta-data/instance-id', :body => '', :status => 404)
108
+
109
+ ec2.me.should be_nil
110
+ end
111
+
112
+ it "should be able to retrieve the user data" do
113
+ FakeWeb.register_uri(:get, 'http://169.254.169.254/latest/user-data', :body => 'This is the user data', :status => 200)
114
+
115
+ ec2.user_data.should == 'This is the user data'
116
+ end
117
+
118
+ it "should return nil if there's no user data" do
119
+ FakeWeb.register_uri(:get, 'http://169.254.169.254/latest/user-data', :body => '', :status => 404)
120
+
121
+ ec2.user_data.should be_nil
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,55 @@
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 key pairs" do
10
+ before do
11
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeKeyPairs|, :body => fixture('ec2/key_pairs'), :status => 200)
12
+ end
13
+
14
+ let(:result) { ec2.key_pairs }
15
+
16
+ it "should return an array of key pairs" do
17
+ result.first.should be_a(Awsum::Ec2::KeyPair)
18
+ end
19
+ end
20
+
21
+ describe "retrieving a single key pair by name" do
22
+ before do
23
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeKeyPairs.*KeyName.1=gsg_keypair|, :body => fixture('ec2/key_pairs'), :status => 200)
24
+ end
25
+
26
+ let(:result) { ec2.key_pair 'gsg_keypair' }
27
+
28
+ it "should return a key pair" do
29
+ result.should be_a(Awsum::Ec2::KeyPair)
30
+ end
31
+ end
32
+
33
+ describe "creating a key pair" do
34
+ before do
35
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=CreateKeyPair.*KeyName=test-keypair|, :body => fixture('ec2/key_pairs'), :status => 200)
36
+ end
37
+
38
+ let(:result) { ec2.create_key_pair('test-keypair') }
39
+
40
+ it "should return a key pair" do
41
+ result.should be_a(Awsum::Ec2::KeyPair)
42
+ end
43
+ end
44
+
45
+ describe "deleting a key pair" do
46
+ before do
47
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DeleteKeyPair.*KeyName=test-keypair|, :body => fixture('ec2/key_pairs'), :status => 200)
48
+ end
49
+
50
+ it "should return a key pair" do
51
+ ec2.delete_key_pair('test-keypair').should be_true
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2::AddressParser do
5
+ subject { Ec2.new('abc', 'xyz') }
6
+ let(:ec2) { subject }
7
+ let(:parser) { Awsum::Ec2::AddressParser.new(ec2) }
8
+
9
+ describe "parsing the result of a call to DescribeAddresses" do
10
+ let(:result) { parser.parse(fixture('ec2/addresses')) }
11
+
12
+ it "should return an array of addresses" do
13
+ result.should be_a(Array)
14
+ end
15
+
16
+ context "the first address" do
17
+ let(:address) { result.first }
18
+
19
+ {
20
+ :public_ip => '127.0.0.1',
21
+ :instance_id => 'i-3f1cc856'
22
+ }.each do |key, value|
23
+ it "should have the correct #{key}" do
24
+ address.send(key).should == value
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ describe "parsing the result of a call to AllocateAddress" do
31
+ let(:result) { parser.parse(fixture('ec2/allocate_address')) }
32
+
33
+ it "should return an array of addresses" do
34
+ result.should be_a(Array)
35
+ end
36
+
37
+ context "the address" do
38
+ let(:address) { result.first }
39
+
40
+ {
41
+ :public_ip => '127.0.0.1',
42
+ :instance_id => nil
43
+ }.each do |key, value|
44
+ it "should have the correct #{key}" do
45
+ address.send(key).should == value
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2::AvailabilityZoneParser do
5
+ subject { Ec2.new('abc', 'xyz') }
6
+ let(:ec2) { subject }
7
+ let(:parser) { Awsum::Ec2::AvailabilityZoneParser.new(ec2) }
8
+ let(:result) { parser.parse(fixture('ec2/availability_zones')) }
9
+
10
+ it "should return an array of availability zones" do
11
+ result.should be_a(Array)
12
+ end
13
+
14
+ context "the first availability zone" do
15
+ let(:availability_zone) { result.first }
16
+
17
+ {
18
+ :name => 'eu-west-1a',
19
+ :state => 'available',
20
+ :region_name => 'eu-west-1'
21
+ }.each do |key, value|
22
+ it "should have the correct #{key}" do
23
+ availability_zone.send(key).should == value
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2::ImageParser do
5
+
6
+ subject { Ec2.new('abc', 'xyz') }
7
+ let(:ec2) { subject }
8
+ let(:parser) { Awsum::Ec2::ImageParser.new(ec2) }
9
+ let(:result) { parser.parse(fixture('ec2/images')) }
10
+
11
+ it "should return an array of images" do
12
+ result.should be_a(Array)
13
+ end
14
+
15
+ context "the first image" do
16
+ let(:image) { result.first }
17
+
18
+ {
19
+ :id => 'aki-0d9f7b64',
20
+ :location => 'oracle_linux_kernels/2.6.18-53.1.13.9.1.el5xen/vmlinuz-2.6.18-53.1.13.9.1.el5xen.manifest.xml',
21
+ :state => 'available',
22
+ :owner => '725966715235',
23
+ :architecture => 'x86_64',
24
+ :type => 'kernel'
25
+ }.each do |key, value|
26
+ it "should have the correct #{key}" do
27
+ image.send(key).should == value
28
+ end
29
+ end
30
+
31
+ it "should be marked as public" do
32
+ image.should be_public
33
+ end
34
+ end
35
+
36
+ context "the second image" do
37
+ let(:image) { result[1] }
38
+
39
+ it "should have the correct id" do
40
+ image.id.should == 'aki-25de3b4c'
41
+ end
42
+
43
+ it "should have an array of product codes" do
44
+ image.product_codes.should be_a(Array)
45
+ end
46
+
47
+ it "should have the correct product codes" do
48
+ image.product_codes.first.should == '54DBF944'
49
+ end
50
+ end
51
+
52
+ context "the third image" do
53
+ let(:image) { result[2] }
54
+
55
+ {
56
+ :id => 'ami-005db969',
57
+ :kernel_id => 'aki-b51cf9dc',
58
+ :ramdisk_id => 'ari-b31cf9da'
59
+ }.each do |key, value|
60
+ it "should have the correct #{key}" do
61
+ image.send(key).should == value
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2::InstanceParser do
5
+
6
+ subject { Ec2.new('abc', 'xyz') }
7
+ let(:ec2) { subject }
8
+ let(:parser) { Awsum::Ec2::InstanceParser.new(ec2) }
9
+ let(:result) { parser.parse(fixture('ec2/instances')) }
10
+
11
+ it "should return an array of instances" do
12
+ result.should be_a(Array)
13
+ end
14
+
15
+ context "the first instance" do
16
+ let(:instance) { result.first }
17
+
18
+ {
19
+ :id => 'i-3f1cc856',
20
+ :private_dns_name => 'ip-10-255-255-255.ec2.internal',
21
+ :dns_name => 'ec2-75-255-255-255.compute-1.amazonaws.com',
22
+ :key_name => 'gsg-keypair',
23
+ :launch_index => 0,
24
+ :type => 'm1.small',
25
+ :availability_zone => 'us-east-1b',
26
+ :launch_time => Time.parse('2008-06-18T12:51:52.000Z'),
27
+ :state => {:code => 0, :name => 'pending'}
28
+ }.each do |key, value|
29
+ it "should have the correct #{key}" do
30
+ instance.send(key).should == value
31
+ end
32
+ end
33
+ end
34
+
35
+ context "the second instance" do
36
+ let(:instance) { result[1] }
37
+
38
+ it "should have the correct state" do
39
+ instance.state.should == {:code => 16, :name => 'running'}
40
+ end
41
+ end
42
+ end
43
+
44
+ describe "Ec2::InstanceParser with the result of RunInstances" do
45
+
46
+ subject { Ec2.new('abc', 'xyz') }
47
+ let(:ec2) { subject }
48
+ let(:parser) { Awsum::Ec2::InstanceParser.new(ec2) }
49
+ let(:result) { parser.parse(fixture('ec2/run_instances')) }
50
+
51
+ it "should return an array of instances" do
52
+ result.should be_a(Array)
53
+ end
54
+
55
+ context "the first instance" do
56
+ let(:instance) { result.first }
57
+
58
+ {
59
+ :id => 'i-f92fa890',
60
+ :private_dns_name => nil,
61
+ :dns_name => nil,
62
+ :key_name => nil,
63
+ :launch_index => 0,
64
+ :type => 'm1.small',
65
+ :availability_zone => 'us-east-1b',
66
+ :launch_time => Time.parse('2009-01-11T13:09:01.000Z'),
67
+ :state => {:code => 0, :name => 'pending'}
68
+ }.each do |key, value|
69
+ it "should have the correct #{key}" do
70
+ instance.send(key).should == value
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end