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.
- data/LICENSE +19 -0
- data/README.rdoc +42 -0
- data/Rakefile +85 -0
- data/lib/awsum.rb +24 -0
- data/lib/ec2/ec2.rb +656 -0
- data/lib/ec2/image.rb +161 -0
- data/lib/ec2/instance.rb +144 -0
- data/lib/ec2/snapshot.rb +82 -0
- data/lib/ec2/volume.rb +137 -0
- data/lib/parser.rb +18 -0
- data/lib/requestable.rb +214 -0
- data/lib/support.rb +94 -0
- data/test/dump.rb +42 -0
- data/test/fixtures/ec2/attach_volume.xml +9 -0
- data/test/fixtures/ec2/available_volume.xml +14 -0
- data/test/fixtures/ec2/create_snapshot.xml +9 -0
- data/test/fixtures/ec2/create_volume.xml +10 -0
- data/test/fixtures/ec2/delete_snapshot.xml +5 -0
- data/test/fixtures/ec2/delete_volume.xml +5 -0
- data/test/fixtures/ec2/detach_volume.xml +9 -0
- data/test/fixtures/ec2/image.xml +15 -0
- data/test/fixtures/ec2/images.xml +77 -0
- data/test/fixtures/ec2/instance.xml +36 -0
- data/test/fixtures/ec2/instances.xml +88 -0
- data/test/fixtures/ec2/run_instances.xml +30 -0
- data/test/fixtures/ec2/snapshots.xml +13 -0
- data/test/fixtures/ec2/terminate_instances.xml +17 -0
- data/test/fixtures/ec2/volumes.xml +23 -0
- data/test/fixtures/errors/invalid_parameter_value.xml +2 -0
- data/test/helper.rb +21 -0
- data/test/units/ec2/test_ec2.rb +1024 -0
- data/test/units/ec2/test_image.rb +114 -0
- data/test/units/ec2/test_instance.rb +127 -0
- data/test/units/ec2/test_snapshot.rb +45 -0
- data/test/units/ec2/test_volume.rb +65 -0
- data/test/units/test_awsum.rb +7 -0
- metadata +135 -0
|
@@ -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>
|
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
|