internuity-awsum 0.2

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.
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0"?>
2
+ <DescribeImagesResponse xmlns="http://ec2.amazonaws.com/doc/2008-12-01/">
3
+ <requestId>c7ea3e47-d8fb-4a2a-897a-87cf3f493f4e</requestId>
4
+ <imagesSet>
5
+ <item>
6
+ <imageId>ari-f9c22690</imageId>
7
+ <imageLocation>rbuilder-online/initrd-2.6.21.7-4.smp.pae.gcc4.1.x86.i686.xen.domU.img.manifest.xml</imageLocation>
8
+ <imageState>available</imageState>
9
+ <imageOwnerId>941766519978</imageOwnerId>
10
+ <isPublic>true</isPublic>
11
+ <architecture>i386</architecture>
12
+ <imageType>ramdisk</imageType>
13
+ </item>
14
+ </imagesSet>
15
+ </DescribeImagesResponse>
@@ -0,0 +1,77 @@
1
+ <?xml version="1.0"?>
2
+ <DescribeImagesResponse xmlns="http://ec2.amazonaws.com/doc/2008-12-01/">
3
+ <requestId>c0b11155-cfab-45f0-99ba-5607ea309135</requestId>
4
+ <imagesSet>
5
+ <item>
6
+ <imageId>aki-0d9f7b64</imageId>
7
+ <imageLocation>oracle_linux_kernels/2.6.18-53.1.13.9.1.el5xen/vmlinuz-2.6.18-53.1.13.9.1.el5xen.manifest.xml</imageLocation>
8
+ <imageState>available</imageState>
9
+ <imageOwnerId>725966715235</imageOwnerId>
10
+ <isPublic>true</isPublic>
11
+ <architecture>x86_64</architecture>
12
+ <imageType>kernel</imageType>
13
+ </item>
14
+ <item>
15
+ <imageId>aki-25de3b4c</imageId>
16
+ <imageLocation>redhat-cloud/RHEL-5-Server/5.1/i386/kernels/kernel-2.6.18-53.1.4.el5xen.manifest.xml</imageLocation>
17
+ <imageState>available</imageState>
18
+ <imageOwnerId>432018295444</imageOwnerId>
19
+ <isPublic>true</isPublic>
20
+ <productCodes>
21
+ <item>
22
+ <productCode>54DBF944</productCode>
23
+ </item>
24
+ </productCodes>
25
+ <architecture>i386</architecture>
26
+ <imageType>kernel</imageType>
27
+ </item>
28
+ <item>
29
+ <imageId>ami-005db969</imageId>
30
+ <imageLocation>alestic-64/ubuntu-8.04-hardy-base-64-20081222.manifest.xml</imageLocation>
31
+ <imageState>available</imageState>
32
+ <imageOwnerId>063491364108</imageOwnerId>
33
+ <isPublic>true</isPublic>
34
+ <architecture>x86_64</architecture>
35
+ <imageType>machine</imageType>
36
+ <kernelId>aki-b51cf9dc</kernelId>
37
+ <ramdiskId>ari-b31cf9da</ramdiskId>
38
+ </item>
39
+ <item>
40
+ <imageId>ami-0456b26d</imageId>
41
+ <imageLocation>ec2-public-windows-images/Server2003r2-i386-Win-v1.03.manifest.xml</imageLocation>
42
+ <imageState>available</imageState>
43
+ <imageOwnerId>amazon</imageOwnerId>
44
+ <isPublic>true</isPublic>
45
+ <architecture>i386</architecture>
46
+ <imageType>machine</imageType>
47
+ <platform>windows</platform>
48
+ </item>
49
+ <item>
50
+ <imageId>ami-215fba48</imageId>
51
+ <imageLocation>ec2-public-images/fedora-core4-base-v1.07.manifest.xml</imageLocation>
52
+ <imageState>available</imageState>
53
+ <imageOwnerId>amazon</imageOwnerId>
54
+ <isPublic>true</isPublic>
55
+ <architecture>i386</architecture>
56
+ <imageType>machine</imageType>
57
+ </item>
58
+ <item>
59
+ <imageId>ami-22b6534b</imageId>
60
+ <imageLocation>ec2-public-images/fedora-core4-mysql.manifest.xml</imageLocation>
61
+ <imageState>available</imageState>
62
+ <imageOwnerId>amazon</imageOwnerId>
63
+ <isPublic>true</isPublic>
64
+ <architecture>i386</architecture>
65
+ <imageType>machine</imageType>
66
+ </item>
67
+ <item>
68
+ <imageId>ami-26b6534f</imageId>
69
+ <imageLocation>ec2-public-images/developer-image.manifest.xml</imageLocation>
70
+ <imageState>available</imageState>
71
+ <imageOwnerId>amazon</imageOwnerId>
72
+ <isPublic>true</isPublic>
73
+ <architecture>i386</architecture>
74
+ <imageType>machine</imageType>
75
+ </item>
76
+ </imagesSet>
77
+ </DescribeImagesResponse>
@@ -0,0 +1,36 @@
1
+ <?xml version="1.0"?>
2
+ <DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2008-12-01/">
3
+ <requestId>28cd89eb-74d8-4ef1-8735-b83ab357fae2</requestId>
4
+ <reservationSet>
5
+ <item>
6
+ <reservationId>r-dc1bd8b5</reservationId>
7
+ <ownerId>026338013131</ownerId>
8
+ <groupSet>
9
+ <item>
10
+ <groupId>default</groupId>
11
+ </item>
12
+ </groupSet>
13
+ <instancesSet>
14
+ <item>
15
+ <instanceId>i-3f1cc856</instanceId>
16
+ <imageId>ami-dfa743b6</imageId>
17
+ <instanceState>
18
+ <code>16</code>
19
+ <name>running</name>
20
+ </instanceState>
21
+ <privateDnsName>ip-10-251-199-130.ec2.internal</privateDnsName>
22
+ <dnsName>ec2-75-101-143-15.compute-1.amazonaws.com</dnsName>
23
+ <reason/>
24
+ <keyName>gsg-keypair</keyName>
25
+ <amiLaunchIndex>0</amiLaunchIndex>
26
+ <productCodes/>
27
+ <instanceType>m1.small</instanceType>
28
+ <launchTime>2008-06-18T12:51:52.000Z</launchTime>
29
+ <placement>
30
+ <availabilityZone>us-east-1b</availabilityZone>
31
+ </placement>
32
+ </item>
33
+ </instancesSet>
34
+ </item>
35
+ </reservationSet>
36
+ </DescribeInstancesResponse>
@@ -0,0 +1,88 @@
1
+ <?xml version="1.0"?>
2
+ <DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2008-12-01/">
3
+ <requestId>28cd89eb-74d8-4ef1-8735-b83ab357fae2</requestId>
4
+ <reservationSet>
5
+ <item>
6
+ <reservationId>r-dc1bd8b5</reservationId>
7
+ <ownerId>111111111111</ownerId>
8
+ <groupSet>
9
+ <item>
10
+ <groupId>default</groupId>
11
+ </item>
12
+ </groupSet>
13
+ <instancesSet>
14
+ <item>
15
+ <instanceId>i-3f1cc856</instanceId>
16
+ <imageId>ami-dfa743b6</imageId>
17
+ <instanceState>
18
+ <code>0</code>
19
+ <name>pending</name>
20
+ </instanceState>
21
+ <privateDnsName>ip-10-255-255-255.ec2.internal</privateDnsName>
22
+ <dnsName>ec2-75-255-255-255.compute-1.amazonaws.com</dnsName>
23
+ <reason/>
24
+ <keyName>gsg-keypair</keyName>
25
+ <amiLaunchIndex>0</amiLaunchIndex>
26
+ <productCodes/>
27
+ <instanceType>m1.small</instanceType>
28
+ <launchTime>2008-06-18T12:51:52.000Z</launchTime>
29
+ <placement>
30
+ <availabilityZone>us-east-1b</availabilityZone>
31
+ </placement>
32
+ </item>
33
+ </instancesSet>
34
+ </item>
35
+ <item>
36
+ <reservationId>r-1463c87d</reservationId>
37
+ <ownerId>111111111111</ownerId>
38
+ <groupSet>
39
+ <item>
40
+ <groupId>default</groupId>
41
+ </item>
42
+ </groupSet>
43
+ <instancesSet>
44
+ <item>
45
+ <instanceId>i-f92fa890</instanceId>
46
+ <imageId>ami-dfa743b6</imageId>
47
+ <instanceState>
48
+ <code>16</code>
49
+ <name>running</name>
50
+ </instanceState>
51
+ <privateDnsName>ip-10-254-254-254.ec2.internal</privateDnsName>
52
+ <dnsName>ec2-75-254-254-254.compute-1.amazonaws.com</dnsName>
53
+ <reason/>
54
+ <amiLaunchIndex>0</amiLaunchIndex>
55
+ <productCodes/>
56
+ <instanceType>m1.small</instanceType>
57
+ <launchTime>2009-01-11T13:09:01.000Z</launchTime>
58
+ <placement>
59
+ <availabilityZone>us-east-1b</availabilityZone>
60
+ </placement>
61
+ </item>
62
+ <item>
63
+ <instanceId>i-f92fa891</instanceId>
64
+ <imageId>ami-dfa743b6</imageId>
65
+ <instanceState>
66
+ <code>16</code>
67
+ <name>running</name>
68
+ </instanceState>
69
+ <privateDnsName>ip-10-253-253-253.ec2.internal</privateDnsName>
70
+ <dnsName>ec2-75-253-253-253.compute-1.amazonaws.com</dnsName>
71
+ <reason/>
72
+ <amiLaunchIndex>1</amiLaunchIndex>
73
+ <productCodes/>
74
+ <instanceType>m1.small</instanceType>
75
+ <launchTime>2009-01-11T13:09:01.000Z</launchTime>
76
+ <placement>
77
+ <availabilityZone>us-east-1b</availabilityZone>
78
+ </placement>
79
+ <productCodes>
80
+ <item>
81
+ <productCode>54DBF944</productCode>
82
+ </item>
83
+ </productCodes>
84
+ </item>
85
+ </instancesSet>
86
+ </item>
87
+ </reservationSet>
88
+ </DescribeInstancesResponse>
@@ -0,0 +1,30 @@
1
+ <?xml version="1.0"?>
2
+ <RunInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2008-12-01/">
3
+ <requestId>10813f9b-f34c-4d71-84d4-30aceed5c1ab</requestId>
4
+ <reservationId>r-1463c87d</reservationId>
5
+ <ownerId>026338013131</ownerId>
6
+ <groupSet>
7
+ <item>
8
+ <groupId>default</groupId>
9
+ </item>
10
+ </groupSet>
11
+ <instancesSet>
12
+ <item>
13
+ <instanceId>i-f92fa890</instanceId>
14
+ <imageId>ami-dfa743b6</imageId>
15
+ <instanceState>
16
+ <code>0</code>
17
+ <name>pending</name>
18
+ </instanceState>
19
+ <privateDnsName/>
20
+ <dnsName/>
21
+ <reason/>
22
+ <amiLaunchIndex>0</amiLaunchIndex>
23
+ <instanceType>m1.small</instanceType>
24
+ <launchTime>2009-01-11T13:09:01.000Z</launchTime>
25
+ <placement>
26
+ <availabilityZone>us-east-1b</availabilityZone>
27
+ </placement>
28
+ </item>
29
+ </instancesSet>
30
+ </RunInstancesResponse>
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0"?>
2
+ <DescribeSnapshotsResponse xmlns="http://ec2.amazonaws.com/doc/2008-12-01/">
3
+ <requestId>d27d0c19-a117-49ff-958c-90722636145d</requestId>
4
+ <snapshotSet>
5
+ <item>
6
+ <snapshotId>snap-747c911d</snapshotId>
7
+ <volumeId>vol-79d13510</volumeId>
8
+ <status>completed</status>
9
+ <startTime>2009-01-15T03:59:26.000Z</startTime>
10
+ <progress>100%</progress>
11
+ </item>
12
+ </snapshotSet>
13
+ </DescribeSnapshotsResponse>
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0"?>
2
+ <TerminateInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2008-12-01/">
3
+ <requestId>f9fc94b2-2005-4304-8624-04baee17a574</requestId>
4
+ <instancesSet>
5
+ <item>
6
+ <instanceId>i-f92fa890</instanceId>
7
+ <shutdownState>
8
+ <code>32</code>
9
+ <name>shutting-down</name>
10
+ </shutdownState>
11
+ <previousState>
12
+ <code>16</code>
13
+ <name>running</name>
14
+ </previousState>
15
+ </item>
16
+ </instancesSet>
17
+ </TerminateInstancesResponse>
@@ -0,0 +1,23 @@
1
+ <?xml version="1.0"?>
2
+ <DescribeVolumesResponse xmlns="http://ec2.amazonaws.com/doc/2008-12-01/">
3
+ <requestId>f4786b8a-90e8-4570-a786-1076fba0eeae</requestId>
4
+ <volumeSet>
5
+ <item>
6
+ <volumeId>vol-44d6322d</volumeId>
7
+ <size>10</size>
8
+ <snapshotId/>
9
+ <availabilityZone>us-east-1b</availabilityZone>
10
+ <status>in-use</status>
11
+ <createTime>2009-01-14T03:57:08.000Z</createTime>
12
+ <attachmentSet>
13
+ <item>
14
+ <volumeId>vol-44d6322d</volumeId>
15
+ <instanceId>i-3f1cc856</instanceId>
16
+ <device>/dev/sdb</device>
17
+ <status>attached</status>
18
+ <attachTime>2009-01-14T04:34:35.000Z</attachTime>
19
+ </item>
20
+ </attachmentSet>
21
+ </item>
22
+ </volumeSet>
23
+ </DescribeVolumesResponse>
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0"?>
2
+ <Response><Errors><Error><Code>InvalidParameterValue</Code><Message>Invalid value '' for InstanceType.</Message></Error></Errors><RequestID>3a8a3b4b-96af-437e-8202-742825fb126d</RequestID></Response>
data/test/helper.rb ADDED
@@ -0,0 +1,21 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+ require 'mocha'
5
+
6
+ begin
7
+ require 'ruby-debug'
8
+ rescue LoadError
9
+ puts "ruby-debug not loaded"
10
+ end
11
+
12
+ ROOT = File.join(File.dirname(__FILE__), '..')
13
+
14
+ $LOAD_PATH << File.join(ROOT, 'lib')
15
+ $LOAD_PATH << File.join(ROOT, 'lib', 'awsum')
16
+
17
+ require File.join(ROOT, 'lib', 'awsum.rb')
18
+
19
+ def load_fixture(fixture_name)
20
+ File.read File.join(File.dirname(__FILE__), "fixtures/#{fixture_name}.xml")
21
+ end
@@ -0,0 +1,1024 @@
1
+ require File.expand_path('../../helper', File.dirname(__FILE__))
2
+
3
+ class ImagesTest < Test::Unit::TestCase
4
+ def setup
5
+ @ec2 = Awsum::Ec2.new('abc', 'xyz')
6
+ end
7
+
8
+ context "Images: " do
9
+ context "retrieving a list of images" do
10
+ setup {
11
+ xml = load_fixture('ec2/images')
12
+ response = stub('Http Response', :body => xml)
13
+ @ec2.expects(:send_query_request).returns(response)
14
+
15
+ @result = @ec2.images
16
+ }
17
+
18
+ should "return an array of images" do
19
+ assert @result.is_a?(Array)
20
+ assert_equal Awsum::Ec2::Image, @result[0].class
21
+ end
22
+ end
23
+
24
+ context "retrieving a list of owner images" do
25
+ setup {
26
+ xml = load_fixture('ec2/images')
27
+ response = stub('Http Response', :body => xml)
28
+ @ec2.expects(:send_query_request).returns(response)
29
+
30
+ @result = @ec2.my_images
31
+ }
32
+
33
+ should "return an array of images" do
34
+ assert @result.is_a?(Array)
35
+ assert_equal Awsum::Ec2::Image, @result[0].class
36
+ end
37
+ end
38
+
39
+ context "retrieving a single image by id" do
40
+ setup {
41
+ xml = load_fixture('ec2/image')
42
+ response = stub('Http Response', :body => xml)
43
+ @ec2.expects(:send_query_request).returns(response)
44
+
45
+ @result = @ec2.image('ari-f9c22690')
46
+ }
47
+
48
+ should "return a single image" do
49
+ assert_equal Awsum::Ec2::Image, @result.class
50
+ end
51
+ end
52
+
53
+ context "an image" do
54
+ setup {
55
+ xml = load_fixture('ec2/image')
56
+ response = stub('Http Response', :body => xml)
57
+ @ec2.expects(:send_query_request).returns(response)
58
+
59
+ @image = @ec2.image 'ari-f9c22690'
60
+ }
61
+
62
+ should "be able to create an instance" do
63
+ xml = load_fixture('ec2/instance')
64
+ response = stub('Http Response', :body => xml)
65
+ @ec2.expects(:send_query_request).returns(response)
66
+
67
+ instances = @image.run
68
+ assert_equal Awsum::Ec2::Instance, instances[0].class
69
+ end
70
+ end
71
+
72
+ context "register an image" do
73
+ setup {
74
+ xml = load_fixture('ec2/register_image')
75
+ response = stub('Http Response', :body => xml)
76
+ @ec2.expects(:send_query_request).returns(response)
77
+
78
+ @image_id = @ec2.register_image('s3.bucket.location')
79
+ }
80
+
81
+ should "return an image id" do
82
+ assert_equal 'ami-4782652e', @image_id
83
+ end
84
+ end
85
+
86
+ context "deregistering an image" do
87
+ setup {
88
+ xml = load_fixture('ec2/deregister_image')
89
+ response = stub('Http Response', :body => xml)
90
+ @ec2.expects(:send_query_request).returns(response)
91
+ response.expects(:is_a?).returns(true)
92
+ }
93
+
94
+ should "return true" do
95
+ assert @ec2.deregister_image('ami-4782652e')
96
+ end
97
+ end
98
+
99
+ context "an image" do
100
+ setup {
101
+ xml = load_fixture('ec2/image')
102
+ response = stub('Http Response', :body => xml)
103
+ @ec2.expects(:send_query_request).returns(response)
104
+
105
+ @image = @ec2.image('ami-ABCDEF')
106
+ }
107
+
108
+ should "be able to deregister itself" do
109
+ xml = load_fixture('ec2/deregister_image')
110
+ response = stub('Http Response', :body => xml)
111
+ @ec2.expects(:send_query_request).returns(response)
112
+ response.expects(:is_a?).returns(true)
113
+
114
+ assert @image.deregister
115
+ end
116
+
117
+ should "be able to reregister itself" do
118
+ requests = sequence('requests')
119
+ xml = load_fixture('ec2/deregister_image')
120
+ response = stub('Http Response', :body => xml)
121
+ @ec2.expects(:send_query_request).returns(response).in_sequence(requests)
122
+ response.expects(:is_a?).returns(true).in_sequence(requests)
123
+
124
+ xml = load_fixture('ec2/register_image')
125
+ response = stub('Http Response', :body => xml)
126
+ @ec2.expects(:send_query_request).returns(response).in_sequence(requests)
127
+
128
+ assert @image.reregister
129
+ end
130
+ end
131
+ end
132
+
133
+ context "Instances: " do
134
+ context "Block device map" do
135
+ setup {
136
+ xml = load_fixture('ec2/run_instances')
137
+ response = stub('Http Response', :body => xml, :code => 200, :is_a? => true)
138
+ @ec2.expects(:process_request).with{|method, uri| @uri = uri}.returns(response)
139
+ @ec2.run_instances('ari-ABCDEF123', :block_device_map => {'instancestore0' => 'sdb'})
140
+ }
141
+
142
+ should "generate the correct parameter names" do
143
+ assert_match /BlockDeviceMapping\.1\.VirtualName=instancestore0/, @uri
144
+ assert_match /BlockDeviceMapping\.1\.DeviceName=sdb/, @uri
145
+ end
146
+ end
147
+
148
+ context "Running an instance" do
149
+ setup {
150
+ xml = load_fixture('ec2/run_instances')
151
+ response = stub('Http Response', :body => xml)
152
+ @ec2.expects(:send_query_request).returns(response)
153
+
154
+ @result = @ec2.run_instances 'ari-f9c22690'
155
+ }
156
+
157
+ should "return an array of instances" do
158
+ assert @result.is_a?(Array)
159
+ assert_equal Awsum::Ec2::Instance, @result[0].class
160
+ end
161
+ end
162
+
163
+ context "retrieving a list of instances" do
164
+ setup {
165
+ xml = load_fixture('ec2/instances')
166
+ response = stub('Http Response', :body => xml)
167
+ @ec2.expects(:send_query_request).returns(response)
168
+
169
+ @result = @ec2.instances
170
+ }
171
+
172
+ should "return an array of instances" do
173
+ assert @result.is_a?(Array)
174
+ assert_equal Awsum::Ec2::Instance, @result[0].class
175
+ end
176
+ end
177
+
178
+ context "retrieving a single instance by id" do
179
+ setup {
180
+ xml = load_fixture('ec2/instance')
181
+ response = stub('Http Response', :body => xml)
182
+ @ec2.expects(:send_query_request).returns(response)
183
+
184
+ @result = @ec2.instance 'i-3f1cc856'
185
+ }
186
+
187
+ should "return a single instance" do
188
+ assert_equal Awsum::Ec2::Instance, @result.class
189
+ end
190
+ end
191
+
192
+ context "terminating instances" do
193
+ setup {
194
+ xml = load_fixture('ec2/terminate_instances')
195
+ response = stub('Http Response', :body => xml)
196
+ response.expects(:is_a?).returns(true)
197
+ @ec2.expects(:send_query_request).returns(response)
198
+
199
+ @result = @ec2.terminate_instances 'i-3f1cc856'
200
+ }
201
+
202
+ should "return true" do
203
+ assert @result
204
+ end
205
+ end
206
+
207
+ context "an instance" do
208
+ setup {
209
+ xml = load_fixture('ec2/instance')
210
+ response = stub('Http Response', :body => xml)
211
+ @ec2.expects(:send_query_request).returns(response)
212
+
213
+ @instance = @ec2.instance 'i-3f1cc856'
214
+ }
215
+
216
+ should "be able to terminate" do
217
+ xml = load_fixture('ec2/terminate_instances')
218
+ response = stub('Http Response', :body => xml)
219
+ response.expects(:is_a?).returns(true)
220
+ @ec2.expects(:send_query_request).returns(response)
221
+
222
+ assert @instance.terminate
223
+ end
224
+
225
+ should "be able to list it's volumes" do
226
+ xml = load_fixture('ec2/volumes')
227
+ response = stub('Http Response', :body => xml)
228
+ @ec2.expects(:send_query_request).returns(response)
229
+
230
+ assert @instance.volumes.is_a?(Array)
231
+ end
232
+
233
+ should "be able to attach a volumes" do
234
+ xml = load_fixture('ec2/volumes')
235
+ response = stub('Http Response', :body => xml)
236
+ @ec2.expects(:send_query_request).returns(response)
237
+
238
+ volume = @ec2.volumes[0]
239
+
240
+ xml = load_fixture('ec2/attach_volume')
241
+ response = stub('Http Response', :body => xml)
242
+ response.expects(:is_a?).returns(true)
243
+ @ec2.expects(:send_query_request).returns(response)
244
+
245
+ assert @instance.attach(volume)
246
+ end
247
+
248
+ should "be able to create a volume" do
249
+ requests = sequence('requests')
250
+
251
+ xml = load_fixture('ec2/create_volume')
252
+ response = stub('Http Response', :body => xml)
253
+ @ec2.expects(:send_query_request).returns(response).in_sequence(requests)
254
+
255
+ xml = load_fixture('ec2/available_volume')
256
+ response = stub('Http Response', :body => xml)
257
+ @ec2.expects(:send_query_request).returns(response).in_sequence(requests)
258
+
259
+ xml = load_fixture('ec2/attach_volume')
260
+ response = stub('Http Response', :body => xml)
261
+ @ec2.expects(:send_query_request).returns(response).in_sequence(requests)
262
+
263
+ volume = @instance.create_volume(10)
264
+ assert_equal Awsum::Ec2::Volume, volume.class
265
+ end
266
+ end
267
+
268
+ context "On a running EC2 instance" do
269
+ should "be able to obtain an Instance representing the currently running machine" do
270
+ xml = load_fixture('ec2/instance')
271
+ response = stub('Http Response', :body => xml)
272
+ @ec2.expects(:send_query_request).returns(response)
273
+
274
+ io = mock('OpenURI', :read => 'i-3f1cc856')
275
+ @ec2.expects(:open).returns(io)
276
+
277
+ instance = @ec2.me
278
+ assert_equal Awsum::Ec2::Instance, instance.class
279
+ end
280
+
281
+ should "return nil if an http error is received" do
282
+ @ec2.expects(:open).raises(OpenURI::HTTPError.new(404, 'problem'))
283
+
284
+ instance = @ec2.me
285
+ assert_nil instance
286
+ end
287
+
288
+ should "be able to retrieve the user data" do
289
+ io = mock('OpenURI', :read => 'This is the user data')
290
+ @ec2.expects(:open).returns(io)
291
+
292
+ user_data = @ec2.user_data
293
+ assert_equal 'This is the user data', user_data
294
+ end
295
+
296
+ should "return nil if there is no user data" do
297
+ @ec2.expects(:open).raises(OpenURI::HTTPError.new(404, 'problem'))
298
+
299
+ user_data = @ec2.user_data
300
+ assert_nil user_data
301
+ end
302
+ end
303
+ end
304
+
305
+ context "Volumes: " do
306
+ context "Creating a volume" do
307
+ setup {
308
+ xml = load_fixture('ec2/create_volume')
309
+ response = stub('Http Response', :body => xml)
310
+ @ec2.expects(:send_query_request).returns(response)
311
+
312
+ @result = @ec2.create_volume 'us-east-1b', :size => 10
313
+ }
314
+
315
+ should "return a volume" do
316
+ assert_equal Awsum::Ec2::Volume, @result.class
317
+ end
318
+ end
319
+
320
+ context "retrieving a list of volumes" do
321
+ setup {
322
+ xml = load_fixture('ec2/volumes')
323
+ response = stub('Http Response', :body => xml)
324
+ @ec2.expects(:send_query_request).returns(response)
325
+
326
+ @result = @ec2.volumes
327
+ }
328
+
329
+ should "return an array of volumes" do
330
+ assert @result.is_a?(Array)
331
+ assert_equal Awsum::Ec2::Volume, @result[0].class
332
+ end
333
+ end
334
+
335
+ context "Attaching a volume" do
336
+ setup {
337
+ xml = load_fixture('ec2/attach_volume')
338
+ response = stub('Http Response', :body => xml)
339
+ response.expects(:is_a?).returns(true)
340
+ @ec2.expects(:send_query_request).returns(response)
341
+
342
+ @result = @ec2.attach_volume 'vol-44d6322d', 'i-3f1cc856', '/dev/sdb'
343
+ }
344
+
345
+ should "return true" do
346
+ assert @result
347
+ end
348
+ end
349
+
350
+ context "Detaching a volume" do
351
+ setup {
352
+ xml = load_fixture('ec2/detach_volume')
353
+ response = stub('Http Response', :body => xml)
354
+ response.expects(:is_a?).returns(true)
355
+ @ec2.expects(:send_query_request).returns(response)
356
+
357
+ @result = @ec2.detach_volume 'vol-44d6322d'
358
+ }
359
+
360
+ should "return true" do
361
+ assert @result
362
+ end
363
+ end
364
+
365
+ context "Deleting a volume" do
366
+ setup {
367
+ xml = load_fixture('ec2/delete_volume')
368
+ response = stub('Http Response', :body => xml)
369
+ response.expects(:is_a?).returns(true)
370
+ @ec2.expects(:send_query_request).returns(response)
371
+
372
+ @result = @ec2.delete_volume 'vol-44d6322d'
373
+ }
374
+
375
+ should "return true" do
376
+ assert @result
377
+ end
378
+ end
379
+
380
+ context "a volume" do
381
+ setup {
382
+ xml = load_fixture('ec2/volumes')
383
+ response = stub('Http Response', :body => xml)
384
+ @ec2.expects(:send_query_request).returns(response)
385
+
386
+ @volume = @ec2.volume 'vol-44d6322d'
387
+ }
388
+
389
+ should "be able to detach" do
390
+ xml = load_fixture('ec2/detach_volume')
391
+ response = stub('Http Response', :body => xml)
392
+ response.expects(:is_a?).returns(true)
393
+ @ec2.expects(:send_query_request).returns(response)
394
+
395
+ assert @volume.detach
396
+ end
397
+
398
+ should "be able to delete" do
399
+ xml = load_fixture('ec2/delete_volume')
400
+ response = stub('Http Response', :body => xml)
401
+ response.expects(:is_a?).returns(true)
402
+ @ec2.expects(:send_query_request).returns(response)
403
+
404
+ assert @volume.delete
405
+ end
406
+
407
+ should "be able to create a snapshot" do
408
+ xml = load_fixture('ec2/create_snapshot')
409
+ response = stub('Http Response', :body => xml)
410
+ @ec2.expects(:send_query_request).returns(response)
411
+
412
+ assert @volume.create_snapshot
413
+ end
414
+
415
+ should "be able to list it's snapshots" do
416
+ xml = load_fixture('ec2/snapshots')
417
+ response = stub('Http Response', :body => xml)
418
+ @ec2.expects(:send_query_request).returns(response)
419
+
420
+ assert @volume.snapshots.is_a?(Array)
421
+ end
422
+ end
423
+ end
424
+
425
+ context "Snapshots: " do
426
+ context "Creating a snapshot" do
427
+ setup {
428
+ xml = load_fixture('ec2/create_snapshot')
429
+ response = stub('Http Response', :body => xml)
430
+ @ec2.expects(:send_query_request).returns(response)
431
+
432
+ @result = @ec2.create_snapshot 'vol-79d13510'
433
+ }
434
+
435
+ should "return a snapshot" do
436
+ assert_equal Awsum::Ec2::Snapshot, @result.class
437
+ end
438
+ end
439
+
440
+ context "retrieving a list of snapshots" do
441
+ setup {
442
+ xml = load_fixture('ec2/snapshots')
443
+ response = stub('Http Response', :body => xml)
444
+ @ec2.expects(:send_query_request).returns(response)
445
+
446
+ @result = @ec2.snapshots
447
+ }
448
+
449
+ should "return an array of snapshots" do
450
+ assert @result.is_a?(Array)
451
+ assert_equal Awsum::Ec2::Snapshot, @result[0].class
452
+ end
453
+ end
454
+
455
+ context "Deleting a snapshot" do
456
+ setup {
457
+ xml = load_fixture('ec2/delete_snapshot')
458
+ response = stub('Http Response', :body => xml)
459
+ response.expects(:is_a?).returns(true)
460
+ @ec2.expects(:send_query_request).returns(response)
461
+
462
+ @result = @ec2.delete_snapshot 'snap-747c911d'
463
+ }
464
+
465
+ should "return true" do
466
+ assert @result
467
+ end
468
+ end
469
+
470
+ context "a snapshot" do
471
+ setup {
472
+ xml = load_fixture('ec2/snapshots')
473
+ response = stub('Http Response', :body => xml)
474
+ @ec2.expects(:send_query_request).returns(response)
475
+
476
+ @snapshot = @ec2.snapshot 'snap-747c911d'
477
+ }
478
+
479
+ should "be able to delete" do
480
+ xml = load_fixture('ec2/delete_snapshot')
481
+ response = stub('Http Response', :body => xml)
482
+ response.expects(:is_a?).returns(true)
483
+ @ec2.expects(:send_query_request).returns(response)
484
+
485
+ assert @snapshot.delete
486
+ end
487
+ end
488
+ end
489
+
490
+ context "Availability Zones: " do
491
+ context "retrieving a list of availability zones" do
492
+ setup {
493
+ xml = load_fixture('ec2/availability_zones')
494
+ response = stub('Http Response', :body => xml)
495
+ @ec2.expects(:send_query_request).returns(response)
496
+
497
+ @result = @ec2.availability_zones
498
+ }
499
+
500
+ should "return an array of availability zones" do
501
+ assert @result.is_a?(Array)
502
+ assert_equal Awsum::Ec2::AvailabilityZone, @result[0].class
503
+ end
504
+ end
505
+ end
506
+
507
+ context "Regions: " do
508
+ context "retrieving a list of regions" do
509
+ setup {
510
+ xml = load_fixture('ec2/regions')
511
+ response = stub('Http Response', :body => xml)
512
+ @ec2.expects(:send_query_request).returns(response)
513
+
514
+ @result = @ec2.regions
515
+ }
516
+
517
+ should "return an array of regions" do
518
+ assert @result.is_a?(Array)
519
+ assert_equal Awsum::Ec2::Region, @result[0].class
520
+ end
521
+ end
522
+
523
+ context "a region" do
524
+ setup {
525
+ xml = load_fixture('ec2/regions')
526
+ response = stub('Http Response', :body => xml)
527
+ @ec2.expects(:send_query_request).returns(response)
528
+
529
+ @region = @ec2.region 'us-east-1'
530
+ }
531
+
532
+ should "be able to list availability zones" do
533
+ xml = load_fixture('ec2/availability_zones')
534
+ response = stub('Http Response', :body => xml)
535
+ @ec2.expects(:send_query_request).returns(response)
536
+
537
+ assert @region.availability_zones.is_a?(Array)
538
+ end
539
+
540
+ should "work in block mode" do
541
+ xml = load_fixture('ec2/availability_zones')
542
+ response = stub('Http Response', :body => xml)
543
+ @ec2.expects(:send_query_request).returns(response)
544
+
545
+ azones = nil
546
+ @region.use do
547
+ azones = availability_zones
548
+ end
549
+ assert azones.is_a?(Array)
550
+ assert_equal Awsum::Ec2::AvailabilityZone, azones[0].class
551
+ end
552
+
553
+ should "pass non-region methods on to it's internal ec2 object (method missing)" do
554
+ @ec2.expects(:run_instances).returns(true)
555
+
556
+ assert @region.run_instances('i-123456789')
557
+ end
558
+ end
559
+ end
560
+
561
+ context "Addresses: " do
562
+ context "retrieving a list of addresses" do
563
+ setup {
564
+ xml = load_fixture('ec2/addresses')
565
+ response = stub('Http Response', :body => xml)
566
+ @ec2.expects(:send_query_request).returns(response)
567
+
568
+ @result = @ec2.addresses
569
+ }
570
+
571
+ should "return an array of addresses" do
572
+ assert @result.is_a?(Array)
573
+ assert_equal Awsum::Ec2::Address, @result[0].class
574
+ end
575
+ end
576
+
577
+ context "allocating an address" do
578
+ setup {
579
+ xml = load_fixture('ec2/allocate_address')
580
+ response = stub('Http Response', :body => xml)
581
+ @ec2.expects(:send_query_request).returns(response)
582
+
583
+ @result = @ec2.allocate_address
584
+ }
585
+
586
+ should "return an Address" do
587
+ assert_equal Awsum::Ec2::Address, @result.class
588
+ end
589
+ end
590
+
591
+ context "associate an address" do
592
+ setup {
593
+ xml = load_fixture('ec2/associate_address')
594
+ response = stub('Http Response', :body => xml)
595
+ response.expects(:is_a?).returns(true)
596
+ @ec2.expects(:send_query_request).returns(response)
597
+ }
598
+
599
+ should "succeed" do
600
+ assert @ec2.associate_address('127.0.0.1', 'i-ABCDEF')
601
+ end
602
+ end
603
+
604
+ context "disassociate an address" do
605
+ setup {
606
+ xml = load_fixture('ec2/disassociate_address')
607
+ response = stub('Http Response', :body => xml)
608
+ response.expects(:is_a?).returns(true)
609
+ @ec2.expects(:send_query_request).returns(response)
610
+ }
611
+
612
+ should "succeed" do
613
+ assert @ec2.disassociate_address('127.0.0.1')
614
+ end
615
+ end
616
+
617
+ context "release an address" do
618
+ setup {
619
+ requests = sequence('requests')
620
+
621
+ xml = load_fixture('ec2/unassociated_address')
622
+ response = stub('Http Response', :body => xml)
623
+ @ec2.expects(:send_query_request).returns(response).in_sequence(requests)
624
+
625
+ xml = load_fixture('ec2/release_address')
626
+ response = stub('Http Response', :body => xml)
627
+ response.expects(:is_a?).returns(true)
628
+ @ec2.expects(:send_query_request).returns(response).in_sequence(requests)
629
+ }
630
+
631
+ should "succeed" do
632
+ assert @ec2.release_address('127.0.0.1')
633
+ end
634
+ end
635
+
636
+ context "release an associated address" do
637
+ setup {
638
+ xml = load_fixture('ec2/addresses')
639
+ response = stub('Http Response', :body => xml)
640
+ @ec2.expects(:send_query_request).returns(response)
641
+ }
642
+
643
+ should "raise an error" do
644
+ assert_raise RuntimeError do
645
+ @ec2.release_address('127.0.0.1')
646
+ end
647
+ end
648
+ end
649
+
650
+ context "force the release of an address" do
651
+ setup {
652
+ xml = load_fixture('ec2/release_address')
653
+ response = stub('Http Response', :body => xml)
654
+ response.expects(:is_a?).returns(true)
655
+ @ec2.expects(:send_query_request).returns(response)
656
+ }
657
+
658
+ should "succeed" do
659
+ assert @ec2.release_address!('127.0.0.1')
660
+ end
661
+ end
662
+
663
+ context "an address" do
664
+ setup {
665
+ xml = load_fixture('ec2/unassociated_address')
666
+ @response = stub('Http Response', :body => xml)
667
+ @ec2.expects(:send_query_request).returns(@response)
668
+
669
+ @address = @ec2.address('127.0.0.1')
670
+ }
671
+
672
+ should "be able to associate with an instance" do
673
+ xml = load_fixture('ec2/associate_address')
674
+ response = stub('Http Response', :body => xml)
675
+ @ec2.expects(:send_query_request).returns(response)
676
+ response.expects(:is_a?).returns(true)
677
+
678
+ assert @address.associate('i-123456')
679
+ end
680
+
681
+ should "not be able to disassociate with an instance" do
682
+ assert_raise RuntimeError do
683
+ @address.disassociate
684
+ end
685
+ end
686
+
687
+ should "be able to release" do
688
+ requests = sequence('requests')
689
+
690
+ xml = load_fixture('ec2/unassociated_address')
691
+ response = stub('Http Response', :body => xml)
692
+ @ec2.expects(:send_query_request).returns(response).in_sequence(requests)
693
+
694
+ xml = load_fixture('ec2/release_address')
695
+ response = stub('Http Response', :body => xml)
696
+ @ec2.expects(:send_query_request).returns(response).in_sequence(requests)
697
+ response.expects(:is_a?).returns(true).in_sequence(requests)
698
+
699
+ assert @address.release
700
+ end
701
+ end
702
+
703
+ context "an associated address" do
704
+ setup {
705
+ xml = load_fixture('ec2/addresses')
706
+ response = stub('Http Response', :body => xml)
707
+ @ec2.expects(:send_query_request).returns(response)
708
+
709
+ @address = @ec2.address('127.0.0.1')
710
+ }
711
+
712
+ should "return the instance it's associated with" do
713
+ xml = load_fixture('ec2/instances')
714
+ response = stub('Http Response', :body => xml)
715
+ @ec2.expects(:send_query_request).returns(response)
716
+
717
+ assert_equal Awsum::Ec2::Instance, @address.instance.class
718
+ end
719
+
720
+ should "not be able to associate with an instance" do
721
+ assert_raise RuntimeError do
722
+ @address.associate('i-ABCDEF')
723
+ end
724
+ end
725
+
726
+ should "be able to disassociate from an instance" do
727
+ xml = load_fixture('ec2/disassociate_address')
728
+ response = stub('Http Response', :body => xml)
729
+ @ec2.expects(:send_query_request).returns(response)
730
+ response.expects(:is_a?).returns(true)
731
+
732
+ assert @address.disassociate
733
+ end
734
+
735
+ should "raise an error when released" do
736
+ assert_raise RuntimeError do
737
+ @address.release
738
+ end
739
+ end
740
+
741
+ should "be able to release when forced" do
742
+ xml = load_fixture('ec2/release_address')
743
+ response = stub('Http Response', :body => xml)
744
+ @ec2.expects(:send_query_request).returns(response)
745
+ response.expects(:is_a?).returns(true)
746
+
747
+ assert @address.release!
748
+ end
749
+ end
750
+ end
751
+
752
+ context "Key Pairs: " do
753
+ context "retrieving a list of key pairs" do
754
+ setup {
755
+ xml = load_fixture('ec2/key_pairs')
756
+ response = stub('Http Response', :body => xml)
757
+ @ec2.expects(:send_query_request).returns(response)
758
+
759
+ @result = @ec2.key_pairs
760
+ }
761
+
762
+ should "return an array of key pairs" do
763
+ assert @result.is_a?(Array)
764
+ assert_equal Awsum::Ec2::KeyPair, @result[0].class
765
+ end
766
+ end
767
+
768
+ context "retrieving a single key pair by name" do
769
+ setup {
770
+ xml = load_fixture('ec2/key_pairs')
771
+ response = stub('Http Response', :body => xml)
772
+ @ec2.expects(:send_query_request).returns(response)
773
+
774
+ @result = @ec2.key_pair('gsg_keypair')
775
+ }
776
+
777
+ should "return a single key pair" do
778
+ assert_equal Awsum::Ec2::KeyPair, @result.class
779
+ end
780
+ end
781
+
782
+ context "creating a key pair" do
783
+ setup {
784
+ xml = load_fixture('ec2/create_key_pair')
785
+ response = stub('Http Response', :body => xml)
786
+ @ec2.expects(:send_query_request).returns(response)
787
+
788
+ @result = @ec2.create_key_pair('test-keypair')
789
+ }
790
+
791
+ should "return a key pair" do
792
+ assert_equal Awsum::Ec2::KeyPair, @result.class
793
+ end
794
+ end
795
+
796
+ context "deleting a key pair" do
797
+ setup {
798
+ xml = load_fixture('ec2/create_key_pair')
799
+ response = stub('Http Response', :body => xml)
800
+ @ec2.expects(:send_query_request).returns(response)
801
+ response.expects(:is_a?).returns(true)
802
+ }
803
+
804
+ should "succeed" do
805
+ assert @ec2.delete_key_pair('test-keypair')
806
+ end
807
+ end
808
+ end
809
+
810
+ context "Security Groups: " do
811
+ context "retrieving a list of security groups" do
812
+ setup {
813
+ xml = load_fixture('ec2/security_groups')
814
+ response = stub('Http Response', :body => xml)
815
+ @ec2.expects(:send_query_request).returns(response)
816
+
817
+ @result = @ec2.security_groups
818
+ }
819
+
820
+ should "return an array of security groups" do
821
+ assert @result.is_a?(Array)
822
+ assert_equal Awsum::Ec2::SecurityGroup, @result[0].class
823
+ end
824
+ end
825
+
826
+ context "retrieving a single security group by name" do
827
+ setup {
828
+ xml = load_fixture('ec2/security_groups')
829
+ response = stub('Http Response', :body => xml)
830
+ @ec2.expects(:send_query_request).returns(response)
831
+
832
+ @result = @ec2.security_group('default')
833
+ }
834
+
835
+ should "return a single security group" do
836
+ assert_equal Awsum::Ec2::SecurityGroup, @result.class
837
+ end
838
+ end
839
+
840
+ context "creating a security group" do
841
+ setup {
842
+ xml = load_fixture('ec2/create_security_group')
843
+ response = stub('Http Response', :body => xml)
844
+ @ec2.expects(:send_query_request).returns(response)
845
+ response.expects(:is_a?).returns(true)
846
+ }
847
+
848
+ should "succeed" do
849
+ assert @ec2.create_security_group('test', 'test group')
850
+ end
851
+ end
852
+
853
+ context "deleting a security group" do
854
+ setup {
855
+ xml = load_fixture('ec2/delete_security_group')
856
+ response = stub('Http Response', :body => xml)
857
+ @ec2.expects(:send_query_request).returns(response)
858
+ response.expects(:is_a?).returns(true)
859
+ }
860
+
861
+ should "succeed" do
862
+ assert @ec2.delete_security_group('test')
863
+ end
864
+ end
865
+
866
+ context "authorizing group access" do
867
+ setup {
868
+ xml = load_fixture('ec2/authorize_owner_group_access')
869
+ response = stub('Http Response', :body => xml)
870
+ @ec2.expects(:send_query_request).returns(response)
871
+ response.expects(:is_a?).returns(true)
872
+ }
873
+
874
+ should "succeed" do
875
+ assert @ec2.authorize_security_group_ingress('test', :source_security_group_name => 'default', :source_security_group_owner_id => '111111111111')
876
+ end
877
+ end
878
+
879
+ context "authorizing ip access" do
880
+ setup {
881
+ xml = load_fixture('ec2/authorize_ip_access')
882
+ response = stub('Http Response', :body => xml)
883
+ @ec2.expects(:send_query_request).returns(response)
884
+ response.expects(:is_a?).returns(true)
885
+ }
886
+
887
+ should "succeed" do
888
+ assert @ec2.authorize_security_group_ingress('test', :ip_protocol => 'tcp', :from_port => 80, :to_port => 80, :cidr_ip => '0.0.0.0/0')
889
+ end
890
+ end
891
+
892
+ context "sending ip authorization options to a user/group authorization request" do
893
+ should "raise an error" do
894
+ assert_raise ArgumentError do
895
+ @ec2.authorize_security_group_ingress('test', :ip_protocol => 'tcp', :from_port => 80, :to_port => 80, :cidr_ip => '0.0.0.0/0', :source_security_group_name => 'default')
896
+ end
897
+ end
898
+ end
899
+
900
+ context "sending user/group authorization options to a ip authorization request" do
901
+ should "raise an error" do
902
+ assert_raise ArgumentError do
903
+ @ec2.authorize_security_group_ingress('test', :source_security_group_name => 'default', :source_security_group_owner_id => '111111111111', :from_port => 80, :to_port => 80)
904
+ end
905
+ end
906
+ end
907
+
908
+ context "sending all options to an authorization request" do
909
+ should "raise an error" do
910
+ assert_raise ArgumentError do
911
+ @ec2.authorize_security_group_ingress('test', :source_security_group_name => 'default', :source_security_group_owner_id => '111111111111', :ip_protocol => 'tcp', :from_port => 80, :to_port => 80, :cidr_ip => '0.0.0.0/0')
912
+ end
913
+ end
914
+ end
915
+
916
+ context "including a wrong protocol in an authorization request" do
917
+ should "raise an error" do
918
+ assert_raise ArgumentError do
919
+ @ec2.authorize_security_group_ingress('test', :ip_protocol => 'test', :from_port => 80, :to_port => 80, :cidr_ip => '0.0.0.0/0')
920
+ end
921
+ end
922
+ end
923
+
924
+ context "revoking ip access" do
925
+ setup {
926
+ xml = load_fixture('ec2/revoke_ip_access')
927
+ response = stub('Http Response', :body => xml)
928
+ @ec2.expects(:send_query_request).returns(response)
929
+ response.expects(:is_a?).returns(true)
930
+ }
931
+
932
+ should "succeed" do
933
+ assert @ec2.revoke_security_group_ingress('test', :ip_protocol => 'tcp', :from_port => 80, :to_port => 80, :cidr_ip => '0.0.0.0/0')
934
+ end
935
+ end
936
+
937
+ context "sending ip revokation options to a user/group revokation request" do
938
+ should "raise an error" do
939
+ assert_raise ArgumentError do
940
+ @ec2.revoke_security_group_ingress('test', :ip_protocol => 'tcp', :from_port => 80, :to_port => 80, :cidr_ip => '0.0.0.0/0', :source_security_group_name => 'default')
941
+ end
942
+ end
943
+ end
944
+
945
+ context "sending user/group revokation options to a ip revokation request" do
946
+ should "raise an error" do
947
+ assert_raise ArgumentError do
948
+ @ec2.revoke_security_group_ingress('test', :source_security_group_name => 'default', :source_security_group_owner_id => '111111111111', :from_port => 80, :to_port => 80)
949
+ end
950
+ end
951
+ end
952
+
953
+ context "sending all options to an revokation request" do
954
+ should "raise an error" do
955
+ assert_raise ArgumentError do
956
+ @ec2.revoke_security_group_ingress('test', :source_security_group_name => 'default', :source_security_group_owner_id => '111111111111', :ip_protocol => 'tcp', :from_port => 80, :to_port => 80, :cidr_ip => '0.0.0.0/0')
957
+ end
958
+ end
959
+ end
960
+
961
+ context "including a wrong protocol in a rovokation request" do
962
+ should "raise an error" do
963
+ assert_raise ArgumentError do
964
+ @ec2.revoke_security_group_ingress('test', :ip_protocol => 'test', :from_port => 80, :to_port => 80, :cidr_ip => '0.0.0.0/0')
965
+ end
966
+ end
967
+ end
968
+
969
+ context "a security group" do
970
+ setup {
971
+ xml = load_fixture('ec2/security_groups')
972
+ response = stub('Http Response', :body => xml)
973
+ @ec2.expects(:send_query_request).returns(response)
974
+
975
+ @security_group = @ec2.security_group('default')
976
+ }
977
+
978
+ should "be able to authorize a group" do
979
+ xml = load_fixture('ec2/authorize_owner_group_access')
980
+ response = stub('Http Response', :body => xml)
981
+ @ec2.expects(:send_query_request).returns(response)
982
+ response.expects(:is_a?).returns(true)
983
+
984
+ assert @security_group.authorize_group('test', '111111111111')
985
+ end
986
+
987
+ should "be able to revoke a group" do
988
+ xml = load_fixture('ec2/revoke_owner_group_access')
989
+ response = stub('Http Response', :body => xml)
990
+ @ec2.expects(:send_query_request).returns(response)
991
+ response.expects(:is_a?).returns(true)
992
+
993
+ assert @security_group.revoke_group('test', '111111111111')
994
+ end
995
+
996
+ should "be able to authorize an ip" do
997
+ xml = load_fixture('ec2/authorize_ip_access')
998
+ response = stub('Http Response', :body => xml)
999
+ @ec2.expects(:send_query_request).returns(response)
1000
+ response.expects(:is_a?).returns(true)
1001
+
1002
+ assert @security_group.authorize_ip(80, 80, 'tcp', '0.0.0.0/0')
1003
+ end
1004
+
1005
+ should "be able to revoke an ip" do
1006
+ xml = load_fixture('ec2/revoke_ip_access')
1007
+ response = stub('Http Response', :body => xml)
1008
+ @ec2.expects(:send_query_request).returns(response)
1009
+ response.expects(:is_a?).returns(true)
1010
+
1011
+ assert @security_group.revoke_ip(80, 80, 'tcp', '0.0.0.0/0')
1012
+ end
1013
+
1014
+ should "be able to delete itself" do
1015
+ xml = load_fixture('ec2/delete_security_group')
1016
+ response = stub('Http Response', :body => xml)
1017
+ @ec2.expects(:send_query_request).returns(response)
1018
+ response.expects(:is_a?).returns(true)
1019
+
1020
+ assert @security_group.delete
1021
+ end
1022
+ end
1023
+ end
1024
+ end