awsum 0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. data/.autotest +1 -0
  2. data/.gitignore +5 -0
  3. data/.rspec +1 -0
  4. data/Gemfile +15 -0
  5. data/Gemfile.lock +44 -0
  6. data/LICENSE +19 -0
  7. data/README.rdoc +42 -0
  8. data/Rakefile +75 -0
  9. data/awsum.gemspec +199 -0
  10. data/lib/awsum.rb +20 -0
  11. data/lib/awsum/ec2.rb +741 -0
  12. data/lib/awsum/ec2/address.rb +67 -0
  13. data/lib/awsum/ec2/availability_zone.rb +16 -0
  14. data/lib/awsum/ec2/image.rb +62 -0
  15. data/lib/awsum/ec2/instance.rb +57 -0
  16. data/lib/awsum/ec2/keypair.rb +16 -0
  17. data/lib/awsum/ec2/parsers/address_parser.rb +61 -0
  18. data/lib/awsum/ec2/parsers/availability_zone_parser.rb +57 -0
  19. data/lib/awsum/ec2/parsers/image_parser.rb +74 -0
  20. data/lib/awsum/ec2/parsers/instance_parser.rb +90 -0
  21. data/lib/awsum/ec2/parsers/keypair_parser.rb +64 -0
  22. data/lib/awsum/ec2/parsers/purchase_reserved_instances_offering_parser.rb +34 -0
  23. data/lib/awsum/ec2/parsers/region_parser.rb +56 -0
  24. data/lib/awsum/ec2/parsers/register_image_parser.rb +34 -0
  25. data/lib/awsum/ec2/parsers/reserved_instance_parser.rb +64 -0
  26. data/lib/awsum/ec2/parsers/reserved_instances_offering_parser.rb +63 -0
  27. data/lib/awsum/ec2/parsers/security_group_parser.rb +106 -0
  28. data/lib/awsum/ec2/parsers/snapshot_parser.rb +64 -0
  29. data/lib/awsum/ec2/parsers/volume_parser.rb +77 -0
  30. data/lib/awsum/ec2/region.rb +54 -0
  31. data/lib/awsum/ec2/reserved_instance.rb +24 -0
  32. data/lib/awsum/ec2/reserved_instances_offering.rb +20 -0
  33. data/lib/awsum/ec2/security_group.rb +74 -0
  34. data/lib/awsum/ec2/snapshot.rb +23 -0
  35. data/lib/awsum/ec2/volume.rb +65 -0
  36. data/lib/awsum/error.rb +53 -0
  37. data/lib/awsum/net_fix.rb +100 -0
  38. data/lib/awsum/parser.rb +18 -0
  39. data/lib/awsum/requestable.rb +216 -0
  40. data/lib/awsum/s3.rb +220 -0
  41. data/lib/awsum/s3/bucket.rb +28 -0
  42. data/lib/awsum/s3/headers.rb +24 -0
  43. data/lib/awsum/s3/object.rb +138 -0
  44. data/lib/awsum/s3/parsers/bucket_parser.rb +43 -0
  45. data/lib/awsum/support.rb +94 -0
  46. data/spec/fixtures/ec2/addresses.xml +10 -0
  47. data/spec/fixtures/ec2/allocate_address.xml +5 -0
  48. data/spec/fixtures/ec2/associate_address.xml +5 -0
  49. data/spec/fixtures/ec2/attach_volume.xml +9 -0
  50. data/spec/fixtures/ec2/authorize_ip_access.xml +5 -0
  51. data/spec/fixtures/ec2/authorize_owner_group_access.xml +5 -0
  52. data/spec/fixtures/ec2/authorize_owner_group_access_error.xml +2 -0
  53. data/spec/fixtures/ec2/availability_zones.xml +16 -0
  54. data/spec/fixtures/ec2/available_volume.xml +14 -0
  55. data/spec/fixtures/ec2/create_key_pair.xml +29 -0
  56. data/spec/fixtures/ec2/create_security_group.xml +5 -0
  57. data/spec/fixtures/ec2/create_snapshot.xml +9 -0
  58. data/spec/fixtures/ec2/create_volume.xml +10 -0
  59. data/spec/fixtures/ec2/delete_key_pair.xml +5 -0
  60. data/spec/fixtures/ec2/delete_security_group.xml +5 -0
  61. data/spec/fixtures/ec2/delete_snapshot.xml +5 -0
  62. data/spec/fixtures/ec2/delete_volume.xml +5 -0
  63. data/spec/fixtures/ec2/deregister_image.xml +5 -0
  64. data/spec/fixtures/ec2/detach_volume.xml +9 -0
  65. data/spec/fixtures/ec2/disassociate_address.xml +5 -0
  66. data/spec/fixtures/ec2/image.xml +15 -0
  67. data/spec/fixtures/ec2/images.xml +77 -0
  68. data/spec/fixtures/ec2/instance.xml +36 -0
  69. data/spec/fixtures/ec2/instances.xml +88 -0
  70. data/spec/fixtures/ec2/internal_error.xml +2 -0
  71. data/spec/fixtures/ec2/invalid_amiid_error.xml +2 -0
  72. data/spec/fixtures/ec2/invalid_request_error.xml +2 -0
  73. data/spec/fixtures/ec2/key_pairs.xml +10 -0
  74. data/spec/fixtures/ec2/purchase_reserved_instances_offering.xml +5 -0
  75. data/spec/fixtures/ec2/purchase_reserved_instances_offerings.xml +6 -0
  76. data/spec/fixtures/ec2/regions.xml +14 -0
  77. data/spec/fixtures/ec2/register_image.xml +5 -0
  78. data/spec/fixtures/ec2/release_address.xml +5 -0
  79. data/spec/fixtures/ec2/reserved_instances.xml +18 -0
  80. data/spec/fixtures/ec2/reserved_instances_offering.xml +15 -0
  81. data/spec/fixtures/ec2/reserved_instances_offerings.xml +276 -0
  82. data/spec/fixtures/ec2/revoke_ip_access.xml +5 -0
  83. data/spec/fixtures/ec2/revoke_owner_group_access.xml +5 -0
  84. data/spec/fixtures/ec2/run_instances.xml +30 -0
  85. data/spec/fixtures/ec2/security_groups.xml +159 -0
  86. data/spec/fixtures/ec2/snapshots.xml +13 -0
  87. data/spec/fixtures/ec2/terminate_instances.xml +17 -0
  88. data/spec/fixtures/ec2/unassociated_address.xml +10 -0
  89. data/spec/fixtures/ec2/volumes.xml +23 -0
  90. data/spec/fixtures/errors/invalid_parameter_value.xml +2 -0
  91. data/spec/fixtures/s3/buckets.xml +2 -0
  92. data/spec/fixtures/s3/copy_failure.xml +23 -0
  93. data/spec/fixtures/s3/invalid_request_signature.xml +5 -0
  94. data/spec/fixtures/s3/keys.xml +2 -0
  95. data/spec/lib/awsum/ec2/address_spec.rb +149 -0
  96. data/spec/lib/awsum/ec2/availability_zones_spec.rb +21 -0
  97. data/spec/lib/awsum/ec2/image_spec.rb +92 -0
  98. data/spec/lib/awsum/ec2/instance_spec.rb +125 -0
  99. data/spec/lib/awsum/ec2/keypair_spec.rb +55 -0
  100. data/spec/lib/awsum/ec2/parsers/address_parser_spec.rb +51 -0
  101. data/spec/lib/awsum/ec2/parsers/availability_zone_parser_spec.rb +28 -0
  102. data/spec/lib/awsum/ec2/parsers/image_parser_spec.rb +66 -0
  103. data/spec/lib/awsum/ec2/parsers/instance_parser_spec.rb +75 -0
  104. data/spec/lib/awsum/ec2/parsers/keypair_parser_spec.rb +74 -0
  105. data/spec/lib/awsum/ec2/parsers/purchase_reserved_instances_offering_parser_spec.rb +14 -0
  106. data/spec/lib/awsum/ec2/parsers/region_parser_spec.rb +27 -0
  107. data/spec/lib/awsum/ec2/parsers/register_image_parser_spec.rb +15 -0
  108. data/spec/lib/awsum/ec2/parsers/reserved_instance_parser_spec.rb +35 -0
  109. data/spec/lib/awsum/ec2/parsers/reserved_instances_offering_parser_spec.rb +32 -0
  110. data/spec/lib/awsum/ec2/parsers/security_group_parser_spec.rb +78 -0
  111. data/spec/lib/awsum/ec2/parsers/snapshot_parser_spec.rb +30 -0
  112. data/spec/lib/awsum/ec2/parsers/volume_parser_spec.rb +35 -0
  113. data/spec/lib/awsum/ec2/region_spec.rb +73 -0
  114. data/spec/lib/awsum/ec2/reserved_instance_spec.rb +61 -0
  115. data/spec/lib/awsum/ec2/reserved_instances_offering_spec.rb +33 -0
  116. data/spec/lib/awsum/ec2/security_group_spec.rb +179 -0
  117. data/spec/lib/awsum/ec2/snapshots_spec.rb +69 -0
  118. data/spec/lib/awsum/ec2/volume_spec.rb +107 -0
  119. data/spec/lib/awsum/ec2_spec.rb +6 -0
  120. data/spec/lib/awsum/error_spec.rb +31 -0
  121. data/spec/lib/awsum/requestable_spec.rb +126 -0
  122. data/spec/lib/awsum/s3/bucket_spec.rb +95 -0
  123. data/spec/lib/awsum/s3/object_spec.rb +128 -0
  124. data/spec/lib/awsum/s3/parsers/bucket_parser_spec.rb +41 -0
  125. data/spec/lib/awsum/s3/parsers/object_parser_spec.rb +41 -0
  126. data/spec/spec_helper.rb +16 -0
  127. metadata +240 -0
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2 do
5
+
6
+ subject { Ec2.new('abc', 'xyz') }
7
+ let(:ec2) { subject }
8
+
9
+ describe "retrieving a list of available reserved instance offerrings" do
10
+ before do
11
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeReservedInstancesOfferings|, :body => fixture('ec2/reserved_instances_offerings'), :status => 200)
12
+ end
13
+
14
+ let(:result) { ec2.reserved_instances_offerings }
15
+
16
+ it "should return an array of reserverd instances offerings" do
17
+ result.first.should be_a(Awsum::Ec2::ReservedInstancesOffering)
18
+ end
19
+ end
20
+
21
+ describe "retrieving a single reserved instance offerring" do
22
+ before do
23
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeReservedInstancesOfferings.*ReservedInstancesOfferingId.1=e5a2ff3b-f6eb-4b4e-83f8-b879d7060257|, :body => fixture('ec2/reserved_instances_offerings'), :status => 200)
24
+ end
25
+
26
+ let(:result) { ec2.reserved_instances_offering 'e5a2ff3b-f6eb-4b4e-83f8-b879d7060257' }
27
+
28
+ it "should return a reserverd instances offering" do
29
+ result.should be_a(Awsum::Ec2::ReservedInstancesOffering)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,179 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2 do
5
+
6
+ subject { Ec2.new('abc', 'xyz') }
7
+ let(:ec2) { subject }
8
+
9
+ describe "retrieving a list of security groups" do
10
+ before do
11
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeSecurityGroups|, :body => fixture('ec2/security_groups'), :status => 200)
12
+ end
13
+
14
+ let(:result) { ec2.security_groups }
15
+
16
+ it "should return an array of security groups" do
17
+ result.first.should be_a(Awsum::Ec2::SecurityGroup)
18
+ end
19
+ end
20
+
21
+ describe "retrieving a security group by name" do
22
+ before do
23
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeSecurityGroups.*GroupName.1=default|, :body => fixture('ec2/security_groups'), :status => 200)
24
+ end
25
+
26
+ let(:result) { ec2.security_group 'default' }
27
+
28
+ it "should return a security group" do
29
+ result.should be_a(Awsum::Ec2::SecurityGroup)
30
+ end
31
+ end
32
+
33
+ describe "creating a security group" do
34
+ before do
35
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=CreateSecurityGroup.*GroupDescription=test%20group.*GroupName=test|, :body => fixture('ec2/create_security_group'), :status => 200)
36
+ end
37
+
38
+ it "should return true" do
39
+ ec2.create_security_group('test', 'test group').should be_true
40
+ end
41
+ end
42
+
43
+ describe "deleting a security group" do
44
+ before do
45
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DeleteSecurityGroup.*GroupName=test|, :body => fixture('ec2/delete_security_group'), :status => 200)
46
+ end
47
+
48
+ it "should return true" do
49
+ ec2.delete_security_group('test').should be_true
50
+ end
51
+ end
52
+
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)
56
+ end
57
+
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
60
+ end
61
+ end
62
+
63
+ 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
67
+
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
70
+ end
71
+ end
72
+
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
78
+
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
82
+ end
83
+ end
84
+
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
90
+
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
94
+ end
95
+ end
96
+
97
+ 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)
100
+ end
101
+
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
104
+ end
105
+ end
106
+
107
+ 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)
110
+ end
111
+
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
114
+ end
115
+ end
116
+
117
+ describe "sending ip revokation options to a user/group authorization request" do
118
+ 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
120
+ end
121
+ end
122
+
123
+ describe "sending user/group options to a ip revokation request" do
124
+ 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
126
+ end
127
+ end
128
+
129
+ describe "sending all options to an revokation request" do
130
+ 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
132
+ end
133
+ end
134
+
135
+ describe "including a wrong protocol in an revokation request" do
136
+ 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
138
+ end
139
+ end
140
+
141
+ describe "a security group" do
142
+ before do
143
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeSecurityGroups.*GroupName.1=default|, :body => fixture('ec2/security_groups'), :status => 200)
144
+ end
145
+
146
+ let(:security_group) { ec2.security_group('default') }
147
+
148
+ 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)
150
+
151
+ security_group.authorize_group('test', '111111111111').should be_true
152
+ end
153
+
154
+ 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)
156
+
157
+ security_group.authorize_ip(80, 80, 'tcp', '0.0.0.0/0').should be_true
158
+ end
159
+
160
+ 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)
162
+
163
+ security_group.revoke_group('test', '111111111111').should be_true
164
+ end
165
+
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)
168
+
169
+ security_group.revoke_ip(80, 80, 'tcp', '0.0.0.0/0').should be_true
170
+ end
171
+
172
+ it "should be able to delete itself" do
173
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DeleteSecurityGroup.*GroupName=default|, :body => fixture('ec2/delete_security_group'), :status => 200)
174
+
175
+ security_group.delete.should be_true
176
+ end
177
+ end
178
+ end
179
+ end
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2 do
5
+
6
+ subject { Ec2.new('abc', 'xyz') }
7
+ let(:ec2) { subject }
8
+
9
+ describe "creating a snapshot" do
10
+ before do
11
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=CreateSnapshot.*VolumeId=vol-44d6322d|, :body => fixture('ec2/create_snapshot'), :status => 200)
12
+ end
13
+
14
+ let(:result) { ec2.create_snapshot 'vol-44d6322d' }
15
+
16
+ it "should return a snapshot" do
17
+ result.should be_a(Awsum::Ec2::Snapshot)
18
+ end
19
+ end
20
+
21
+ describe "retrieving a snapshot" do
22
+ before do
23
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeSnapshots.*SnapshotId.1=snap-747c911d|, :body => fixture('ec2/snapshots'), :status => 200)
24
+ end
25
+
26
+ let(:result) { ec2.snapshot 'snap-747c911d' }
27
+
28
+ it "should return a snapshot" do
29
+ result.should be_a(Awsum::Ec2::Snapshot)
30
+ end
31
+ end
32
+
33
+ describe "retrieving a list of snapshots" do
34
+ before do
35
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeSnapshots|, :body => fixture('ec2/snapshots'), :status => 200)
36
+ end
37
+
38
+ let(:result) { ec2.snapshots }
39
+
40
+ it "should return a snapshot" do
41
+ result.first.should be_a(Awsum::Ec2::Snapshot)
42
+ end
43
+ end
44
+
45
+ describe "deleting a snapshot" do
46
+ before do
47
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DeleteSnapshot.*SnapshotId=snap-747c911d|, :body => fixture('ec2/delete_snapshot'), :status => 200)
48
+ end
49
+
50
+ it "should be true" do
51
+ ec2.delete_snapshot('snap-747c911d').should be_true
52
+ end
53
+ end
54
+
55
+ describe "a snapshot" do
56
+ before do
57
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeSnapshots.*SnapshotId.1=snap-747c911d|, :body => fixture('ec2/snapshots'), :status => 200)
58
+ end
59
+
60
+ let(:snapshot) { ec2.snapshot 'snap-747c911d' }
61
+
62
+ it "should be able to delete itself" do
63
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DeleteSnapshot.*SnapshotId=snap-747c911d|, :body => fixture('ec2/snapshots'), :status => 200)
64
+
65
+ snapshot.delete.should be_true
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,107 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2 do
5
+
6
+ subject { Ec2.new('abc', 'xyz') }
7
+ let(:ec2) { subject }
8
+
9
+ describe "creating a volume" do
10
+ before do
11
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=CreateVolume.*AvailabilityZone=us-east-1b.*Size=10|, :body => fixture('ec2/create_volume'), :status => 200)
12
+ end
13
+
14
+ let(:result) { ec2.create_volume 'us-east-1b', :size => 10 }
15
+
16
+ it "should return a volume" do
17
+ result.should be_a(Awsum::Ec2::Volume)
18
+ end
19
+ end
20
+
21
+ describe "retrieving a list of volumes" do
22
+ before do
23
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeVolumes|, :body => fixture('ec2/volumes'), :status => 200)
24
+ end
25
+
26
+ let(:result) { ec2.volumes }
27
+
28
+ it "should return an array of volumes" do
29
+ result.first.should be_a(Awsum::Ec2::Volume)
30
+ end
31
+ end
32
+
33
+ describe "retrieving a volume by id" do
34
+ before do
35
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeVolumes.*VolumeId.1=vol-44d6322d|, :body => fixture('ec2/volumes'), :status => 200)
36
+ end
37
+
38
+ let(:result) { ec2.volume 'vol-44d6322d' }
39
+
40
+ it "should return a volume" do
41
+ result.should be_a(Awsum::Ec2::Volume)
42
+ end
43
+ end
44
+
45
+ describe "attaching a volume" do
46
+ before do
47
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=AttachVolume.*Device=%2Fdev%2Fsdb.*InstanceId=i-3f1cc856.*VolumeId=vol-44d6322d|, :body => fixture('ec2/attach_volume'), :status => 200)
48
+ end
49
+
50
+ it "should return true" do
51
+ ec2.attach_volume('vol-44d6322d', 'i-3f1cc856', '/dev/sdb').should be_true
52
+ end
53
+ end
54
+
55
+ describe "detaching a volume" do
56
+ before do
57
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DetachVolume.*VolumeId=vol-44d6322d|, :body => fixture('ec2/detach_volume'), :status => 200)
58
+ end
59
+
60
+ it "should return true" do
61
+ ec2.detach_volume('vol-44d6322d').should be_true
62
+ end
63
+ end
64
+
65
+ describe "deleting a volume" do
66
+ before do
67
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DeleteVolume.*VolumeId=vol-44d6322d|, :body => fixture('ec2/delete_volume'), :status => 200)
68
+ end
69
+
70
+ it "should return true" do
71
+ ec2.delete_volume('vol-44d6322d').should be_true
72
+ end
73
+ end
74
+
75
+ describe "a volume" do
76
+ before do
77
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeVolumes.*VolumeId.1=vol-44d6322d|, :body => fixture('ec2/volumes'), :status => 200)
78
+ end
79
+
80
+ let(:volume) { ec2.volume 'vol-44d6322d' }
81
+
82
+ it "should be able to detach itself" do
83
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DetachVolume.*VolumeId=vol-44d6322d|, :body => fixture('ec2/detach_volume'), :status => 200)
84
+
85
+ volume.detach.should be_true
86
+ end
87
+
88
+ it "should be able to delete itself" do
89
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DeleteVolume.*VolumeId=vol-44d6322d|, :body => fixture('ec2/delete_volume'), :status => 200)
90
+
91
+ volume.delete.should be_true
92
+ end
93
+
94
+ it "should be able to create a snapshot of itself" do
95
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=CreateSnapshot.*VolumeId=vol-44d6322d|, :body => fixture('ec2/create_snapshot'), :status => 200)
96
+
97
+ volume.create_snapshot
98
+ end
99
+
100
+ it "should be able list it's snapshots" do
101
+ FakeWeb.register_uri(:get, %r|https://ec2\.amazonaws\.com/?.*Action=DescribeSnapshots|, :body => fixture('ec2/snapshots'), :status => 200)
102
+
103
+ volume.snapshots.first.should be_a(Awsum::Ec2::Snapshot)
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Ec2 do
5
+ end
6
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Error do
5
+ subject {
6
+ response = mock(:response, :code => 404, :body => fixture('ec2/invalid_request_error'))
7
+ Error.new(response)
8
+ }
9
+ let(:error) { subject }
10
+
11
+ it "should return the correct response code" do
12
+ error.response_code.should == 404
13
+ end
14
+
15
+ it "should return the correct code" do
16
+ error.code.should == 'InvalidRequest'
17
+ end
18
+
19
+ it "should return the correct message" do
20
+ error.message.should == 'The request received was invalid.'
21
+ end
22
+
23
+ it "should return the correct request id" do
24
+ error.request_id.should == '7cbacf61-c7df-468a-8130-cf5d659f8144'
25
+ end
26
+
27
+ it "should return the correct additional info" do
28
+ error.additional.should == {'Unknown' => 'Test message'}
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,126 @@
1
+ require 'spec_helper'
2
+
3
+ module Awsum
4
+ describe Requestable do
5
+ describe "ec2 requests" do
6
+ subject {
7
+ Class.new {
8
+ include Awsum::Requestable
9
+
10
+ def initialize
11
+ @access_key = 'ABCDEF'
12
+ @secret_key = '123456'
13
+ end
14
+
15
+ def host
16
+ 'test.amazonaws.com'
17
+ end
18
+ }.new
19
+ }
20
+
21
+ describe "#send_query_request" do
22
+ it "should generate the correct request uri" do
23
+ FakeWeb.register_uri(:get, 'https://test.amazonaws.com/?AWSAccessKeyId=ABCDEF&Action=DescribeImages&ImageId.1=ami-1234567&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2009-01-23T03%3A34%3A38.000Z&Version=2010-06-15&Signature=ZkjqlJRngvT4sITa50ZODqeYn%2FMBBDNtFhFf6ucz7QI%3D', :body => '', :status => 200)
24
+
25
+ subject.send(:send_query_request, {'Action' => 'DescribeImages', 'ImageId.1' => 'ami-1234567', 'Timestamp' => '2009-01-23T03:34:38.000Z'})
26
+ end
27
+ end
28
+ end
29
+
30
+ # These test are taken directly from Amazon's examples at
31
+ # http://docs.amazonwebservices.com/AmazonS3/2006-03-01/RESTAuthentication.html
32
+ describe "an S3" do
33
+ subject {
34
+ Class.new {
35
+ include Awsum::Requestable
36
+
37
+ def initialize
38
+ @access_key = '0PN5J17HBGZHT7JJ3X82'
39
+ @secret_key = 'uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o'
40
+ end
41
+
42
+ def host
43
+ 's3.amazonaws.com'
44
+ end
45
+ }.new
46
+ }
47
+
48
+ describe "GET request" do
49
+ it "should generate the correct authorization header" do
50
+ subject.should_receive(:process_request).with { |method, uri, headers, data|
51
+ headers['authorization'].should == 'AWS 0PN5J17HBGZHT7JJ3X82:xXjDGYUmKxnwqr5KXNPGldn5LbA='
52
+ }
53
+
54
+ subject.send(:send_s3_request, 'GET', {:bucket => 'johnsmith', :key => '/photos/puppy.jpg', :headers => {'Date' => 'Tue, 27 Mar 2007 19:36:42 +0000'}})
55
+ end
56
+ end
57
+
58
+ describe "PUT request" do
59
+ it "should generate the correct authorization header" do
60
+ subject.should_receive(:process_request).with { |method, uri, headers, data|
61
+ headers['authorization'].should == 'AWS 0PN5J17HBGZHT7JJ3X82:hcicpDDvL9SsO6AkvxqmIWkmOuQ='
62
+ }
63
+
64
+ subject.send(:send_s3_request, 'PUT', {:bucket => 'johnsmith', :key => '/photos/puppy.jpg', :headers => {'Date' => 'Tue, 27 Mar 2007 21:15:45 +0000', 'Content-Type' => 'image/jpeg', 'Content-Length' => 94328}})
65
+ end
66
+ end
67
+
68
+ describe "GET request to list bucket contents" do
69
+ it "should generate the correct authorization header" do
70
+ subject.should_receive(:process_request).with { |method, uri, headers, data|
71
+ headers['authorization'].should == 'AWS 0PN5J17HBGZHT7JJ3X82:thdUi9VAkzhkniLj96JIrOPGi0g='
72
+ }
73
+
74
+ subject.send(:send_s3_request, 'GET', {:bucket => 'johnsmith', :key => '', :parameters => {'acl' => nil}, :headers => {'Date' => 'Tue, 27 Mar 2007 19:44:46 +0000'}})
75
+ end
76
+ end
77
+
78
+ describe "DELETE request" do
79
+ it "should generate the correct authorization header" do
80
+ subject.should_receive(:process_request).with { |method, uri, headers, data|
81
+ headers['authorization'].should == 'AWS 0PN5J17HBGZHT7JJ3X82:k3nL7gH3+PadhTEVn5Ip83xlYzk='
82
+ }
83
+
84
+ subject.send(:send_s3_request, 'DELETE', {:bucket => 'johnsmith', :key => '/photos/puppy.jpg', :headers => {'Date' => 'Tue, 27 Mar 2007 21:20:27 +0000', 'User-Agent' => 'dotnet', 'x-amz-date' => 'Tue, 27 Mar 2007 21:20:26 +0000'}})
85
+ end
86
+ end
87
+
88
+ describe "PUT request to upload" do
89
+ it "should generate the correct authorization header" do
90
+ subject.should_receive(:process_request).with { |method, uri, headers, data|
91
+ headers['authorization'].should == 'AWS 0PN5J17HBGZHT7JJ3X82:C0FlOtU8Ylb9KDTpZqYkZPX91iI='
92
+ }
93
+
94
+ subject.send(:send_s3_request, 'PUT', {:bucket => 'static.johnsmith.net', :key => '/db-backup.dat.gz', :headers => {'Date' => 'Tue, 27 Mar 2007 21:06:08 +0000', 'User-Agent' => 'curl/7.15.5', 'x-amz-acl' => 'public-read', 'content-type' => 'application/x-download', 'Content-MD5' => '4gJE4saaMU4BqNR0kLY+lw==', 'X-Amz-Meta-ReviewedBy' => ['joe@johnsmith.net', 'jane@johnsmith.net'], 'X-Amz-Meta-FileChecksum' => '0x02661779', 'X-Amz-Meta-ChecksumAlgorithm' => 'crc32', 'Content-Disposition' => 'attachment; filename=database.dat', 'Content-Encoding' => 'gzip', 'Content-Length' => '5913339'}})
95
+ end
96
+ end
97
+
98
+ describe "GET request to list all buckets" do
99
+ it "should generate the correct authorization header" do
100
+ subject.should_receive(:process_request).with { |method, uri, headers, data|
101
+ headers['authorization'].should == 'AWS 0PN5J17HBGZHT7JJ3X82:Db+gepJSUbZKwpx1FR0DLtEYoZA='
102
+ }
103
+
104
+ subject.send(:send_s3_request, 'GET', {:bucket => '', :key => '', :headers => {'Date' => 'Wed, 28 Mar 2007 01:29:59 +0000'}})
105
+ end
106
+ end
107
+
108
+ describe "GET request with unicode keys" do
109
+ it "should generate the correct authorization header" do
110
+ subject.should_receive(:process_request).with { |method, uri, headers, data|
111
+ headers['authorization'].should == 'AWS 0PN5J17HBGZHT7JJ3X82:dxhSBHoI6eVSPcXJqEghlUzZMnY='
112
+ }
113
+
114
+ subject.send(:send_s3_request, 'GET', {:bucket => 'dictionary', :key => '/fran%C3%A7ais/pr%c3%a9f%c3%a8re', :headers => {'Date' => 'Wed, 28 Mar 2007 01:49:49 +0000'}})
115
+ end
116
+ end
117
+
118
+ describe "signed request" do
119
+ it "should generate the correct signed URI" do
120
+ signed_request = subject.send(:generate_s3_signed_request_url, 'GET', 'johnsmith', '/photos/puppy.jpg', 1175139620)
121
+ signed_request.should == 'http://johnsmith.s3.amazonaws.com/photos/puppy.jpg?AWSAccessKeyId=0PN5J17HBGZHT7JJ3X82&Signature=rucSbH0yNEcP9oM2XNlouVI3BH4%3D&Expires=1175139620'
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end