awsum 0.5 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. data/Gemfile +1 -1
  2. data/Gemfile.lock +14 -20
  3. data/README.rdoc +1 -1
  4. data/Rakefile +3 -3
  5. data/functional/ec2/instances_spec.rb +46 -0
  6. data/functional/spec_helper.rb +71 -0
  7. data/lib/awsum.rb +2 -2
  8. data/lib/awsum/ec2.rb +85 -68
  9. data/lib/awsum/ec2/image.rb +1 -1
  10. data/lib/awsum/ec2/instance.rb +35 -6
  11. data/lib/awsum/ec2/parsers/image_parser.rb +3 -5
  12. data/lib/awsum/ec2/parsers/instance_parser.rb +24 -15
  13. data/lib/awsum/ec2/parsers/snapshot_parser.rb +3 -3
  14. data/lib/awsum/ec2/parsers/tag_parser.rb +56 -0
  15. data/lib/awsum/ec2/parsers/volume_parser.rb +3 -5
  16. data/lib/awsum/ec2/region.rb +8 -5
  17. data/lib/awsum/ec2/security_group.rb +12 -16
  18. data/lib/awsum/ec2/snapshot.rb +9 -0
  19. data/lib/awsum/ec2/state.rb +22 -0
  20. data/lib/awsum/ec2/tag.rb +17 -0
  21. data/lib/awsum/ec2/volume.rb +12 -2
  22. data/lib/awsum/requestable.rb +53 -3
  23. data/spec/fixtures/ec2/authorize_group_access.xml +12 -0
  24. data/spec/fixtures/ec2/create_security_group.xml +3 -3
  25. data/spec/fixtures/ec2/delete_security_group.xml +3 -3
  26. data/spec/fixtures/ec2/purchase_reserved_instances_offering2.xml +5 -0
  27. data/spec/fixtures/ec2/tags.xml +12 -0
  28. data/spec/lib/awsum/ec2/image_spec.rb +60 -0
  29. data/spec/lib/awsum/ec2/instance_spec.rb +39 -1
  30. data/spec/lib/awsum/ec2/parsers/instance_parser_spec.rb +4 -3
  31. data/spec/lib/awsum/ec2/parsers/tag_parser_spec.rb +29 -0
  32. data/spec/lib/awsum/ec2/region_spec.rb +31 -2
  33. data/spec/lib/awsum/ec2/reserved_instance_spec.rb +3 -19
  34. data/spec/lib/awsum/ec2/security_group_spec.rb +123 -51
  35. data/spec/lib/awsum/ec2/snapshots_spec.rb +27 -1
  36. data/spec/lib/awsum/ec2/state_spec.rb +11 -0
  37. data/spec/lib/awsum/ec2/tag_spec.rb +45 -0
  38. data/spec/lib/awsum/ec2/volume_spec.rb +47 -0
  39. data/spec/lib/awsum/requestable_spec.rb +1 -1
  40. data/tools/dump.rb +55 -0
  41. metadata +176 -32
  42. data/.gitignore +0 -5
  43. data/spec/fixtures/ec2/purchase_reserved_instances_offerings.xml +0 -6
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <DescribeSecurityGroupsResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
3
+ <requestId>26e2d0ad-6af4-40ff-bd0b-b7f7a4a26036</requestId>
4
+ <securityGroupInfo>
5
+ <item>
6
+ <ownerId>026338013131</ownerId>
7
+ <groupName>test-group</groupName>
8
+ <groupDescription>A test group</groupDescription>
9
+ <ipPermissions/>
10
+ </item>
11
+ </securityGroupInfo>
12
+ </DescribeSecurityGroupsResponse>
@@ -1,5 +1,5 @@
1
- <?xml version="1.0"?>
2
- <CreateSecurityGroupResponse xmlns="http://ec2.amazonaws.com/doc/2008-12-01/">
3
- <requestId>d11930fe-b8c5-461a-9259-c053a0c26fdf</requestId>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <CreateSecurityGroupResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
3
+ <requestId>60be0979-1bb8-4e5a-9c6b-0b5d17b9d22b</requestId>
4
4
  <return>true</return>
5
5
  </CreateSecurityGroupResponse>
@@ -1,5 +1,5 @@
1
- <?xml version="1.0"?>
2
- <DeleteSecurityGroupResponse xmlns="http://ec2.amazonaws.com/doc/2008-12-01/">
3
- <requestId>0de0677e-dc68-40f8-bdf9-bc7063ee4a70</requestId>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <DeleteSecurityGroupResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
3
+ <requestId>37eaab54-074d-466d-a38e-0137d221c72d</requestId>
4
4
  <return>true</return>
5
5
  </DeleteSecurityGroupResponse>
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <PurchaseReservedInstancesOfferingResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
3
+ <requestId>c9f3d2f8-cb9d-467f-9a4d-b3a682ad2460</requestId>
4
+ <reservedInstancesId>4357912c-baae-4f49-80bc-61fcb17c97d9</reservedInstancesId>
5
+ </PurchaseReservedInstancesOfferingResponse>
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <DescribeTagsResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
3
+ <requestId>ba2577eb-3227-46b7-b80c-df1353c320d1</requestId>
4
+ <tagSet>
5
+ <item>
6
+ <resourceId>ari-f9c22690</resourceId>
7
+ <resourceType>image</resourceType>
8
+ <key>name</key>
9
+ <value>Test</value>
10
+ </item>
11
+ </tagSet>
12
+ </DescribeTagsResponse>
@@ -42,6 +42,66 @@ module Awsum
42
42
  end
43
43
  end
44
44
 
45
+ describe "retrieving a filtered list of images" do
46
+ before do
47
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeImages.*Filter.1.Name=architecture.*Filter.1.Value.1=i386|, :body => fixture('ec2/images'), :status => 200)
48
+ end
49
+
50
+ let(:result) { ec2.images(:filter => {:architecture => 'i386'}) }
51
+
52
+ it "should return an array of images" do
53
+ result.first.should be_a(Awsum::Ec2::Image)
54
+ end
55
+ end
56
+
57
+ describe "retrieving a filtered list of images with a complicated filter" do
58
+ before do
59
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeImages.*Filter.1.Name=tag%3AName.*Filter.1.Value.1=Test.*Filter.2.Name=image-type.*Filter.2.Value.1=machine.*Filter.2.Value.2=kernel.*Filter.2.Value.3=ramdisk.*Filter.3.Name=architecture.*Filter.3.Value.1=i386|, :body => fixture('ec2/images'), :status => 200)
60
+ end
61
+
62
+ let(:result) { ec2.images(:filter => {:architecture => 'i386', 'tag:Name' => 'Test', 'image-type' => ['machine', 'kernel', 'ramdisk']}) }
63
+
64
+ it "should return an array of images" do
65
+ result.first.should be_a(Awsum::Ec2::Image)
66
+ end
67
+ end
68
+
69
+ describe "retrieving a filtered list of images by tag" do
70
+ before do
71
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeImages.*Filter.1.Name=tag%3Aname.*Filter.1.Value.1=Test|, :body => fixture('ec2/images'), :status => 200)
72
+ end
73
+
74
+ let(:result) { ec2.images(:tags => {:name => 'Test'}) }
75
+
76
+ it "should return an array of images" do
77
+ result.first.should be_a(Awsum::Ec2::Image)
78
+ end
79
+ end
80
+
81
+ describe "retrieving a filtered list of owned images" do
82
+ before do
83
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeImages.*Filter.1.Name=architecture.*Filter.1.Value.1=i386.*Owner.1=self|, :body => fixture('ec2/images'), :status => 200)
84
+ end
85
+
86
+ let(:result) { ec2.my_images(:filter => {:architecture => 'i386'}) }
87
+
88
+ it "should return an array of images" do
89
+ result.first.should be_a(Awsum::Ec2::Image)
90
+ end
91
+ end
92
+
93
+ describe "retrieving a filtered list of owned images by tag" do
94
+ before do
95
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeImages.*Filter.1.Name=tag%3Aname.*Filter.1.Value.1=Test.*Owner.1=self|, :body => fixture('ec2/images'), :status => 200)
96
+ end
97
+
98
+ let(:result) { ec2.my_images(:tags => {:name => 'Test'}) }
99
+
100
+ it "should return an array of images" do
101
+ result.first.should be_a(Awsum::Ec2::Image)
102
+ end
103
+ end
104
+
45
105
  describe "registering an image" do
46
106
  before do
47
107
  FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=RegisterImage.*ImageLocation=s3.bucket.location|, :body => fixture('ec2/register_image'), :status => 200)
@@ -18,6 +18,20 @@ module Awsum
18
18
  end
19
19
  end
20
20
 
21
+ describe "running an instance with a tag" do
22
+ before do
23
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=RunInstances.*ImageId=ari-f9c22690|, :body => fixture('ec2/run_instances'), :status => 200)
24
+
25
+ ec2.should_receive(:create_tags).with(['i-f92fa890'], :name => 'Test')
26
+ end
27
+
28
+ let(:result) { ec2.run_instances 'ari-f9c22690', :tags => {:name => 'Test'} }
29
+
30
+ it "should return an array of instances" do
31
+ result.first.should be_a(Awsum::Ec2::Instance)
32
+ end
33
+ end
34
+
21
35
  describe "retrieving a list of instances" do
22
36
  before do
23
37
  FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeInstances|, :body => fixture('ec2/run_instances'), :status => 200)
@@ -30,6 +44,30 @@ module Awsum
30
44
  end
31
45
  end
32
46
 
47
+ describe "retrieving a list of instances with a filter" do
48
+ before do
49
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeInstances.*Filter.1.Name=architecture.*Filter.1.Value.1=i386|, :body => fixture('ec2/run_instances'), :status => 200)
50
+ end
51
+
52
+ let(:result) { ec2.instances(:filter => {:architecture => 'i386'}) }
53
+
54
+ it "should return an array of instances" do
55
+ result.first.should be_a(Awsum::Ec2::Instance)
56
+ end
57
+ end
58
+
59
+ describe "retrieving a list of instances by tag" do
60
+ before do
61
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeInstances.*Filter.1.Name=tag%3Aname.*Filter.1.Value.1=Test|, :body => fixture('ec2/run_instances'), :status => 200)
62
+ end
63
+
64
+ let(:result) { ec2.instances(:tags => {:name => 'Test'}) }
65
+
66
+ it "should return an array of instances" do
67
+ result.first.should be_a(Awsum::Ec2::Instance)
68
+ end
69
+ end
70
+
33
71
  describe "retrieving a single instance" do
34
72
  before do
35
73
  FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeInstances.*InstanceId.1=i-3f1cc856|, :body => fixture('ec2/instance'), :status => 200)
@@ -90,7 +128,7 @@ module Awsum
90
128
 
91
129
  FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=AttachVolume.*InstanceId=i-3f1cc856.*VolumeId=vol-44d6322d|, :body => fixture('ec2/attach_volume'), :status => 200)
92
130
 
93
- instance.create_volume(10)
131
+ instance.create_volume(10, :device => '/dev/sdh')
94
132
  end
95
133
  end
96
134
 
@@ -24,7 +24,7 @@ module Awsum
24
24
  :type => 'm1.small',
25
25
  :availability_zone => 'us-east-1b',
26
26
  :launch_time => Time.parse('2008-06-18T12:51:52.000Z'),
27
- :state => {:code => 0, :name => 'pending'}
27
+ :state => Ec2::State.new(0, 'pending')
28
28
  }.each do |key, value|
29
29
  it "should have the correct #{key}" do
30
30
  instance.send(key).should == value
@@ -36,7 +36,8 @@ module Awsum
36
36
  let(:instance) { result[1] }
37
37
 
38
38
  it "should have the correct state" do
39
- instance.state.should == {:code => 16, :name => 'running'}
39
+ instance.state.should == 16
40
+ instance.state.should == 'running'
40
41
  end
41
42
  end
42
43
  end
@@ -64,7 +65,7 @@ module Awsum
64
65
  :type => 'm1.small',
65
66
  :availability_zone => 'us-east-1b',
66
67
  :launch_time => Time.parse('2009-01-11T13:09:01.000Z'),
67
- :state => {:code => 0, :name => 'pending'}
68
+ :state => Ec2::State.new(0, 'pending')
68
69
  }.each do |key, value|
69
70
  it "should have the correct #{key}" do
70
71
  instance.send(key).should == value
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2::TagParser do
5
+ subject { Ec2.new('abc', 'xyz') }
6
+ let(:ec2) { subject }
7
+ let(:parser) { Awsum::Ec2::TagParser.new(ec2) }
8
+ let(:result) { parser.parse(fixture('ec2/tags')) }
9
+
10
+ it "should return an array of tags" do
11
+ result.should be_a(Array)
12
+ end
13
+
14
+ context "the first tag" do
15
+ let(:tag) { result.first }
16
+
17
+ {
18
+ :resource_id => 'ari-f9c22690',
19
+ :resource_type => 'image',
20
+ :key => 'name',
21
+ :value => 'Test'
22
+ }.each do |key, value|
23
+ it "should have the correct #{key}" do
24
+ tag.send(key).should == value
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -28,6 +28,26 @@ module Awsum
28
28
  it "should return a region" do
29
29
  result.should be_a(Awsum::Ec2::Region)
30
30
  end
31
+
32
+ it "should work in block mode (with a supplied parameter)" do
33
+ FakeWeb.register_uri(:get, %r|https://eu-west-1\.ec2\.amazonaws\.com/?.*Action=DescribeAvailabilityZones|, :body => fixture('ec2/availability_zones'), :status => 200)
34
+
35
+ zones = ec2.region('eu-west-1') do |region|
36
+ region.availability_zones
37
+ end
38
+
39
+ zones.first.should be_a(Awsum::Ec2::AvailabilityZone)
40
+ end
41
+
42
+ it "should work in block mode (without a supplied parameter)" do
43
+ FakeWeb.register_uri(:get, %r|https://eu-west-1\.ec2\.amazonaws\.com/?.*Action=DescribeAvailabilityZones|, :body => fixture('ec2/availability_zones'), :status => 200)
44
+
45
+ zones = ec2.region('eu-west-1') do
46
+ availability_zones
47
+ end
48
+
49
+ zones.first.should be_a(Awsum::Ec2::AvailabilityZone)
50
+ end
31
51
  end
32
52
 
33
53
  describe "a region" do
@@ -46,7 +66,7 @@ module Awsum
46
66
  it "should work in block mode (with a supplied parameter)" do
47
67
  FakeWeb.register_uri(:get, %r|https://eu-west-1\.ec2\.amazonaws\.com/?.*Action=DescribeAvailabilityZones|, :body => fixture('ec2/availability_zones'), :status => 200)
48
68
 
49
- zones = ec2.region('eu-west-1') do |region|
69
+ zones = region.use do |region|
50
70
  region.availability_zones
51
71
  end
52
72
 
@@ -56,13 +76,22 @@ module Awsum
56
76
  it "should work in block mode (without a supplied parameter)" do
57
77
  FakeWeb.register_uri(:get, %r|https://eu-west-1\.ec2\.amazonaws\.com/?.*Action=DescribeAvailabilityZones|, :body => fixture('ec2/availability_zones'), :status => 200)
58
78
 
59
- zones = ec2.region('eu-west-1') do
79
+ zones = region.use do
60
80
  availability_zones
61
81
  end
62
82
 
63
83
  zones.first.should be_a(Awsum::Ec2::AvailabilityZone)
64
84
  end
65
85
 
86
+ it "should be able to set a region" do
87
+ FakeWeb.register_uri(:get, %r|https://eu-west-1\.ec2\.amazonaws\.com/?.*Action=DescribeAvailabilityZones|, :body => fixture('ec2/availability_zones'), :status => 200)
88
+
89
+ region.use
90
+ zones = ec2.availability_zones
91
+
92
+ zones.first.should be_a(Awsum::Ec2::AvailabilityZone)
93
+ end
94
+
66
95
  it "should receive ec2 methods (pass-through)" do
67
96
  FakeWeb.register_uri(:get, %r|https://eu-west-1\.ec2\.amazonaws\.com/?.*Action=RunInstances.*ImageId=9-123456789|, :body => fixture('ec2/run_instances'), :status => 200)
68
97
 
@@ -8,29 +8,13 @@ module Awsum
8
8
 
9
9
  describe "purchasing a reserved instance" do
10
10
  before do
11
- FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=PurchaseReservedInstancesOffering.*InstanceCount.1=1.*ReservedInstancesOfferingId.1=e5a2ff3b-f6eb-4b4e-83f8-b879d7060257|, :body => fixture('ec2/purchase_reserved_instances_offering'), :status => 200)
12
-
13
- FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeReservedInstances.*ReservedInstanceId.1=1ba8e2e3-e6f7-4ef5-8c6c-6c6e4fad0a56|, :body => fixture('ec2/reserved_instances'), :status => 200)
11
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=PurchaseReservedInstancesOffering.*InstanceCount=1.*ReservedInstancesOfferingId=e5a2ff3b-f6eb-4b4e-83f8-b879d7060257|, :body => fixture('ec2/purchase_reserved_instances_offering'), :status => 200)
14
12
  end
15
13
 
16
14
  let(:result) { ec2.purchase_reserved_instances_offering 'e5a2ff3b-f6eb-4b4e-83f8-b879d7060257' }
17
15
 
18
- it "should return a reserverd instance" do
19
- result.should be_a(Awsum::Ec2::ReservedInstance)
20
- end
21
- end
22
-
23
- describe "purchasing multiple reserved instances" do
24
- before do
25
- FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=PurchaseReservedInstancesOffering.*InstanceCount.1=1.*InstanceCount.2=2.*ReservedInstancesOfferingId.1=e5a2ff3b-f6eb-4b4e-83f8-b879d7060257.*ReservedInstancesOfferingId.2=248e7b75-afbc-4724-82b2-d78353299433|, :body => fixture('ec2/purchase_reserved_instances_offering'), :status => 200)
26
-
27
- FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeReservedInstances.*ReservedInstanceId.1=1ba8e2e3-e6f7-4ef5-8c6c-6c6e4fad0a56|, :body => fixture('ec2/reserved_instances'), :status => 200)
28
- end
29
-
30
- let(:result) { ec2.purchase_reserved_instances_offering ['e5a2ff3b-f6eb-4b4e-83f8-b879d7060257', '248e7b75-afbc-4724-82b2-d78353299433'], [1, 2] }
31
-
32
- it "should return an array of reserverd instances" do
33
- result.first.should be_a(Awsum::Ec2::ReservedInstance)
16
+ it "should return an array of reserved instance ids" do
17
+ result.should == ['1ba8e2e3-e6f7-4ef5-8c6c-6c6e4fad0a56']
34
18
  end
35
19
  end
36
20
 
@@ -51,90 +51,156 @@ module Awsum
51
51
  end
52
52
 
53
53
  describe "authorizing group access" do
54
- before do
55
- FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=AuthorizeSecurityGroupIngress.*GroupName=test.*SourceSecurityGroupName=default.*SourceSecurityGroupOwnerId=111111111111|, :body => fixture('ec2/delete_security_group'), :status => 200)
54
+ context "with a single option hash" do
55
+ before do
56
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=AuthorizeSecurityGroupIngress.*GroupName=test.*IpPermissions.1.FromPort=80.*IpPermissions.1.Groups.1.GroupName=webservers.*IpPermissions.1.IpProtocol=tcp.*IpPermissions.1.ToPort=80|, :body => fixture('ec2/authorize_group_access'), :status => 200)
57
+ end
58
+
59
+ it "should return true" do
60
+ ec2.authorize_security_group_ingress('test', {:ip_protocol => :tcp, :from_port => 80, :to_port => 80, :groups => [{:group_name => :webservers}]}).should be_true
61
+ end
56
62
  end
57
63
 
58
- it "should return true" do
59
- ec2.authorize_security_group_ingress('test', :source_security_group_name => 'default', :source_security_group_owner_id => '111111111111').should be_true
64
+ context "with an array of option hashes" do
65
+ before do
66
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=AuthorizeSecurityGroupIngress.*GroupName=test.*IpPermissions.1.FromPort=80.*IpPermissions.1.Groups.1.GroupName=webservers.*IpPermissions.1.IpProtocol=tcp.*IpPermissions.1.ToPort=80.*IpPermissions.2.FromPort=22.*IpPermissions.2.Groups.1.GroupName=webservers.*IpPermissions.2.Groups.2.GroupName=dbservers.*IpPermissions.2.IpProtocol=tcp.*IpPermissions.2.ToPort=22|, :body => fixture('ec2/authorize_group_access'), :status => 200)
67
+ end
68
+
69
+ it "should return true" do
70
+ ec2.authorize_security_group_ingress('test', [
71
+ {:ip_protocol => :tcp, :from_port => 80, :to_port => 80, :groups => [{:group_name => :webservers}]},
72
+ {:ip_protocol => :tcp, :from_port => 22, :to_port => 22, :groups => [{:group_name => :webservers}, {:group_name => :dbservers}]}
73
+ ]).should be_true
74
+ end
60
75
  end
61
76
  end
62
77
 
63
78
  describe "authorizing ip access" do
64
- before do
65
- FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=AuthorizeSecurityGroupIngress.*CidrIp=0.0.0.0%2F0.*FromPort=80.*GroupName=test.*IpProtocol=tcp.*ToPort=80|, :body => fixture('ec2/delete_security_group'), :status => 200)
66
- end
79
+ context "with a single option hash" do
80
+ before do
81
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=AuthorizeSecurityGroupIngress.*GroupName=test.*IpPermissions.1.FromPort=80.*IpPermissions.1.IpProtocol=tcp.*IpPermissions.1.IpRanges.1.CidrIp=12.23.34.45%2F0.*IpPermissions.1.ToPort=80|, :body => fixture('ec2/authorize_group_access'), :status => 200)
82
+ end
67
83
 
68
- it "should return true" do
69
- ec2.authorize_security_group_ingress('test', :ip_protocol => 'tcp', :from_port => 80, :to_port => 80, :cidr_ip => '0.0.0.0/0').should be_true
84
+ it "should return true" do
85
+ ec2.authorize_security_group_ingress('test', [{:ip_protocol => :tcp, :from_port => 80, :to_port => 80, :ip_ranges => [{:cidr_ip => '12.23.34.45/0'}]}])
86
+ end
70
87
  end
71
- end
72
88
 
73
- describe "sending ip authorization options to a user/group authorization request" do
74
- it "should raise an error" do
75
- expect { 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') }.to raise_error
76
- end
77
- end
89
+ context "with an array of option hashes" do
90
+ before do
91
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=AuthorizeSecurityGroupIngress.*GroupName=test.*IpPermissions.1.FromPort=80.*IpPermissions.1.IpProtocol=tcp.*IpPermissions.1.IpRanges.1.CidrIp=12.23.34.45%2F0.*IpPermissions.1.ToPort=80.*IpPermissions.2.FromPort=22.*IpPermissions.2.IpProtocol=tcp.*IpPermissions.2.IpRanges.1.CidrIp=12.23.34.45%2F0.*IpPermissions.2.IpRanges.2.CidrIp=12.34.56.78%2F0.*IpPermissions.2.ToPort=22|, :body => fixture('ec2/authorize_group_access'), :status => 200)
92
+ end
78
93
 
79
- describe "sending user/group options to a ip authorization request" do
80
- it "should raise an error" do
81
- expect { ec2.authorize_security_group_ingress('test', :source_security_group_name => 'default', :source_security_group_owner_id => '111111111111', :from_port => 80, :to_port => 80) }.to raise_error
94
+ it "should return true" do
95
+ ec2.authorize_security_group_ingress('test', [
96
+ {:ip_protocol => :tcp, :from_port => 80, :to_port => 80, :ip_ranges => [{:cidr_ip => '12.23.34.45/0'}]},
97
+ {:ip_protocol => :tcp, :from_port => 22, :to_port => 22, :ip_ranges => [{:cidr_ip => '12.23.34.45/0'}, {:cidr_ip => '12.34.56.78/0'}]}
98
+ ])
99
+ end
82
100
  end
83
101
  end
84
102
 
85
- describe "sending all options to an authorization request" do
86
- it "should raise an error" do
87
- expect { 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') }.to raise_error
88
- end
89
- end
103
+ describe "authorizing both group and ip access" do
104
+ context "with a single call" do
105
+ before do
106
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=AuthorizeSecurityGroupIngress.*GroupName=test.*IpPermissions.1.FromPort=80.*IpPermissions.1.IpProtocol=tcp.*IpPermissions.1.IpRanges.1.CidrIp=12.23.34.45%2F0.*IpPermissions.1.ToPort=80.*IpPermissions.2.FromPort=22.*IpPermissions.2.Groups.1.GroupName=webservers.*IpPermissions.2.IpProtocol=tcp.*IpPermissions.2.ToPort=22|, :body => fixture('ec2/authorize_group_access'), :status => 200)
107
+ end
90
108
 
91
- describe "including a wrong protocol in an authorization request" do
92
- it "should raise an error" do
93
- expect { ec2.authorize_security_group_ingress('test', :ip_protocol => 'test', :from_port => 80, :to_port => 80, :cidr_ip => '0.0.0.0/0') }.to raise_error
109
+ it "should return true" do
110
+ ec2.authorize_security_group_ingress('test', [
111
+ {:ip_protocol => :tcp, :from_port => 80, :to_port => 80, :ip_ranges => [{:cidr_ip => '12.23.34.45/0'}]},
112
+ {:ip_protocol => :tcp, :from_port => 22, :to_port => 22, :groups => [{:group_name => 'webservers'}]}
113
+ ])
114
+ end
94
115
  end
95
116
  end
96
117
 
97
118
  describe "revoking group access" do
98
- before do
99
- FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=RevokeSecurityGroupIngress.*GroupName=test.*SourceSecurityGroupName=default.*SourceSecurityGroupOwnerId=111111111111|, :body => fixture('ec2/delete_security_group'), :status => 200)
119
+ context "with a single option hash" do
120
+ before do
121
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=RevokeSecurityGroupIngress.*GroupName=test.*IpPermissions.1.FromPort=80.*IpPermissions.1.Groups.1.GroupName=webservers.*IpPermissions.1.IpProtocol=tcp.*IpPermissions.1.ToPort=80|, :body => fixture('ec2/authorize_group_access'), :status => 200)
122
+ end
123
+
124
+ it "should return true" do
125
+ ec2.revoke_security_group_ingress('test', {:ip_protocol => :tcp, :from_port => 80, :to_port => 80, :groups => [{:group_name => :webservers}]}).should be_true
126
+ end
100
127
  end
101
128
 
102
- it "should return true" do
103
- ec2.revoke_security_group_ingress('test', :source_security_group_name => 'default', :source_security_group_owner_id => '111111111111').should be_true
129
+ context "with an array of option hashes" do
130
+ before do
131
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=RevokeSecurityGroupIngress.*GroupName=test.*IpPermissions.1.FromPort=80.*IpPermissions.1.Groups.1.GroupName=webservers.*IpPermissions.1.IpProtocol=tcp.*IpPermissions.1.ToPort=80.*IpPermissions.2.FromPort=22.*IpPermissions.2.Groups.1.GroupName=webservers.*IpPermissions.2.Groups.2.GroupName=dbservers.*IpPermissions.2.IpProtocol=tcp.*IpPermissions.2.ToPort=22|, :body => fixture('ec2/authorize_group_access'), :status => 200)
132
+ end
133
+
134
+ it "should return true" do
135
+ ec2.revoke_security_group_ingress('test', [
136
+ {:ip_protocol => :tcp, :from_port => 80, :to_port => 80, :groups => [{:group_name => :webservers}]},
137
+ {:ip_protocol => :tcp, :from_port => 22, :to_port => 22, :groups => [{:group_name => :webservers}, {:group_name => :dbservers}]}
138
+ ]).should be_true
139
+ end
104
140
  end
105
141
  end
106
142
 
107
143
  describe "revoking ip access" do
108
- before do
109
- FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=RevokeSecurityGroupIngress.*CidrIp=0.0.0.0%2F0.*FromPort=80.*GroupName=test.*IpProtocol=tcp.*ToPort=80|, :body => fixture('ec2/delete_security_group'), :status => 200)
144
+ context "with a single option hash" do
145
+ before do
146
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=RevokeSecurityGroupIngress.*GroupName=test.*IpPermissions.1.FromPort=80.*IpPermissions.1.IpProtocol=tcp.*IpPermissions.1.IpRanges.1.CidrIp=12.23.34.45%2F0.*IpPermissions.1.ToPort=80|, :body => fixture('ec2/authorize_group_access'), :status => 200)
147
+ end
148
+
149
+ it "should return true" do
150
+ ec2.revoke_security_group_ingress('test', [{:ip_protocol => :tcp, :from_port => 80, :to_port => 80, :ip_ranges => [{:cidr_ip => '12.23.34.45/0'}]}])
151
+ end
110
152
  end
111
153
 
112
- it "should return true" do
113
- ec2.revoke_security_group_ingress('test', :ip_protocol => 'tcp', :from_port => 80, :to_port => 80, :cidr_ip => '0.0.0.0/0').should be_true
154
+ context "with an array of option hashes" do
155
+ before do
156
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=RevokeSecurityGroupIngress.*GroupName=test.*IpPermissions.1.FromPort=80.*IpPermissions.1.IpProtocol=tcp.*IpPermissions.1.IpRanges.1.CidrIp=12.23.34.45%2F0.*IpPermissions.1.ToPort=80.*IpPermissions.2.FromPort=22.*IpPermissions.2.IpProtocol=tcp.*IpPermissions.2.IpRanges.1.CidrIp=12.23.34.45%2F0.*IpPermissions.2.IpRanges.2.CidrIp=12.34.56.78%2F0.*IpPermissions.2.ToPort=22|, :body => fixture('ec2/authorize_group_access'), :status => 200)
157
+ end
158
+
159
+ it "should return true" do
160
+ ec2.revoke_security_group_ingress('test', [
161
+ {:ip_protocol => :tcp, :from_port => 80, :to_port => 80, :ip_ranges => [{:cidr_ip => '12.23.34.45/0'}]},
162
+ {:ip_protocol => :tcp, :from_port => 22, :to_port => 22, :ip_ranges => [{:cidr_ip => '12.23.34.45/0'}, {:cidr_ip => '12.34.56.78/0'}]}
163
+ ])
164
+ end
114
165
  end
115
166
  end
116
167
 
117
- describe "sending ip revokation options to a user/group authorization request" do
168
+ describe "revoking both group and ip access" do
169
+ context "with a single call" do
170
+ before do
171
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=RevokeSecurityGroupIngress.*GroupName=test.*IpPermissions.1.FromPort=80.*IpPermissions.1.IpProtocol=tcp.*IpPermissions.1.IpRanges.1.CidrIp=12.23.34.45%2F0.*IpPermissions.1.ToPort=80.*IpPermissions.2.FromPort=22.*IpPermissions.2.Groups.1.GroupName=webservers.*IpPermissions.2.IpProtocol=tcp.*IpPermissions.2.ToPort=22|, :body => fixture('ec2/authorize_group_access'), :status => 200)
172
+ end
173
+
174
+ it "should return true" do
175
+ ec2.revoke_security_group_ingress('test', [
176
+ {:ip_protocol => :tcp, :from_port => 80, :to_port => 80, :ip_ranges => [{:cidr_ip => '12.23.34.45/0'}]},
177
+ {:ip_protocol => :tcp, :from_port => 22, :to_port => 22, :groups => [{:group_name => 'webservers'}]}
178
+ ])
179
+ end
180
+ end
181
+ end
182
+
183
+ describe "sending both ip and user/group options to an authorization request" do
118
184
  it "should raise an error" do
119
- expect { 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') }.to raise_error
185
+ expect { ec2.authorize_security_group_ingress('test', [{:ip_protocol => :tcp, :from_port => 80, :to_port => 80, :ip_ranges => [{:cidr_ip => '12.23.34.45/0'}], :groups => [{:group_name => :webservers}]}]) }.to raise_error(ArgumentError)
120
186
  end
121
187
  end
122
188
 
123
- describe "sending user/group options to a ip revokation request" do
189
+ describe "including a wrong protocol in an authorization request" do
124
190
  it "should raise an error" do
125
- expect { ec2.revoke_security_group_ingress('test', :source_security_group_name => 'default', :source_security_group_owner_id => '111111111111', :from_port => 80, :to_port => 80) }.to raise_error
191
+ expect { ec2.authorize_security_group_ingress('test', [{:ip_protocol => :test, :from_port => 80, :to_port => 80, :ip_ranges => [{:cidr_ip => '12.23.34.45/0'}]}]) }.to raise_error(ArgumentError)
126
192
  end
127
193
  end
128
194
 
129
- describe "sending all options to an revokation request" do
195
+ describe "sending both ip and user/group options to a revokation request" do
130
196
  it "should raise an error" do
131
- expect { 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') }.to raise_error
197
+ expect { ec2.authorize_security_group_ingress('test', [{:ip_protocol => :tcp, :from_port => 80, :to_port => 80, :ip_ranges => [{:cidr_ip => '12.23.34.45/0'}], :groups => [{:group_name => :webservers}]}]) }.to raise_error(ArgumentError)
132
198
  end
133
199
  end
134
200
 
135
- describe "including a wrong protocol in an revokation request" do
201
+ describe "including a wrong protocol in a revokation request" do
136
202
  it "should raise an error" do
137
- expect { ec2.revoke_security_group_ingress('test', :ip_protocol => 'test', :from_port => 80, :to_port => 80, :cidr_ip => '0.0.0.0/0') }.to raise_error
203
+ expect { ec2.authorize_security_group_ingress('test', [{:ip_protocol => :test, :from_port => 80, :to_port => 80, :ip_ranges => [{:cidr_ip => '12.23.34.45/0'}]}]) }.to raise_error(ArgumentError)
138
204
  end
139
205
  end
140
206
 
@@ -146,27 +212,33 @@ module Awsum
146
212
  let(:security_group) { ec2.security_group('default') }
147
213
 
148
214
  it "should be able to authorize a group" do
149
- FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=AuthorizeSecurityGroupIngress.*GroupName=default.*SourceSecurityGroupName=test.*SourceSecurityGroupOwnerId=111111111111|, :body => fixture('ec2/delete_security_group'), :status => 200)
215
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=AuthorizeSecurityGroupIngress.*GroupName=default.*IpPermissions.1.FromPort=80.*IpPermissions.1.Groups.1.GroupName=webservers.*IpPermissions.1.IpProtocol=tcp.*IpPermissions.1.ToPort=80|, :body => fixture('ec2/authorize_group_access'), :status => 200)
150
216
 
151
- security_group.authorize_group('test', '111111111111').should be_true
217
+ security_group.authorize({:ip_protocol => :tcp, :from_port => 80, :to_port => 80, :groups => [{:group_name => :webservers}]}).should be_true
152
218
  end
153
219
 
154
220
  it "should be able to authorize ip access" do
155
- FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=AuthorizeSecurityGroupIngress.*CidrIp=0.0.0.0%2F0.*FromPort=80.*GroupName=default.*IpProtocol=tcp.*ToPort=80|, :body => fixture('ec2/delete_security_group'), :status => 200)
221
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=AuthorizeSecurityGroupIngress.*GroupName=default.*IpPermissions.1.FromPort=80.*IpPermissions.1.IpProtocol=tcp.*IpPermissions.1.IpRanges.1.CidrIp=12.23.34.45%2F0.*IpPermissions.1.ToPort=80.*IpPermissions.2.FromPort=22.*IpPermissions.2.IpProtocol=tcp.*IpPermissions.2.IpRanges.1.CidrIp=12.23.34.45%2F0.*IpPermissions.2.IpRanges.2.CidrIp=12.34.56.78%2F0.*IpPermissions.2.ToPort=22|, :body => fixture('ec2/authorize_group_access'), :status => 200)
156
222
 
157
- security_group.authorize_ip(80, 80, 'tcp', '0.0.0.0/0').should be_true
223
+ security_group.authorize([
224
+ {:ip_protocol => :tcp, :from_port => 80, :to_port => 80, :ip_ranges => [{:cidr_ip => '12.23.34.45/0'}]},
225
+ {:ip_protocol => :tcp, :from_port => 22, :to_port => 22, :ip_ranges => [{:cidr_ip => '12.23.34.45/0'}, {:cidr_ip => '12.34.56.78/0'}]}
226
+ ])
158
227
  end
159
228
 
160
229
  it "should be able to revoke a group" do
161
- FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=RevokeSecurityGroupIngress.*GroupName=default.*SourceSecurityGroupName=test.*SourceSecurityGroupOwnerId=111111111111|, :body => fixture('ec2/delete_security_group'), :status => 200)
230
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=RevokeSecurityGroupIngress.*GroupName=default.*IpPermissions.1.FromPort=80.*IpPermissions.1.Groups.1.GroupName=webservers.*IpPermissions.1.IpProtocol=tcp.*IpPermissions.1.ToPort=80.*IpPermissions.2.FromPort=22.*IpPermissions.2.Groups.1.GroupName=webservers.*IpPermissions.2.Groups.2.GroupName=dbservers.*IpPermissions.2.IpProtocol=tcp.*IpPermissions.2.ToPort=22|, :body => fixture('ec2/authorize_group_access'), :status => 200)
162
231
 
163
- security_group.revoke_group('test', '111111111111').should be_true
232
+ security_group.revoke([
233
+ {:ip_protocol => :tcp, :from_port => 80, :to_port => 80, :groups => [{:group_name => :webservers}]},
234
+ {:ip_protocol => :tcp, :from_port => 22, :to_port => 22, :groups => [{:group_name => :webservers}, {:group_name => :dbservers}]}
235
+ ]).should be_true
164
236
  end
165
237
 
166
- it "should be able to authorize ip access" do
167
- FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=RevokeSecurityGroupIngress.*CidrIp=0.0.0.0%2F0.*FromPort=80.*GroupName=default.*IpProtocol=tcp.*ToPort=80|, :body => fixture('ec2/delete_security_group'), :status => 200)
238
+ it "should be able to revoke ip access" do
239
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=RevokeSecurityGroupIngress.*GroupName=default.*IpPermissions.1.FromPort=80.*IpPermissions.1.IpProtocol=tcp.*IpPermissions.1.IpRanges.1.CidrIp=12.23.34.45%2F0.*IpPermissions.1.ToPort=80|, :body => fixture('ec2/authorize_group_access'), :status => 200)
168
240
 
169
- security_group.revoke_ip(80, 80, 'tcp', '0.0.0.0/0').should be_true
241
+ security_group.revoke([{:ip_protocol => :tcp, :from_port => 80, :to_port => 80, :ip_ranges => [{:cidr_ip => '12.23.34.45/0'}]}])
170
242
  end
171
243
 
172
244
  it "should be able to delete itself" do