awsum 0.5

Sign up to get free protection for your applications and to get access to all the features.
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