dustMason-right_aws 2.1.0

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 (70) hide show
  1. data/History.txt +305 -0
  2. data/Manifest.txt +60 -0
  3. data/README.txt +165 -0
  4. data/Rakefile +112 -0
  5. data/lib/acf/right_acf_interface.rb +549 -0
  6. data/lib/acf/right_acf_invalidations.rb +144 -0
  7. data/lib/acf/right_acf_origin_access_identities.rb +230 -0
  8. data/lib/acf/right_acf_streaming_interface.rb +229 -0
  9. data/lib/acw/right_acw_interface.rb +248 -0
  10. data/lib/as/right_as_interface.rb +698 -0
  11. data/lib/awsbase/benchmark_fix.rb +39 -0
  12. data/lib/awsbase/right_awsbase.rb +1174 -0
  13. data/lib/awsbase/support.rb +35 -0
  14. data/lib/awsbase/version.rb +9 -0
  15. data/lib/ec2/right_ec2.rb +458 -0
  16. data/lib/ec2/right_ec2_ebs.rb +465 -0
  17. data/lib/ec2/right_ec2_images.rb +413 -0
  18. data/lib/ec2/right_ec2_instances.rb +785 -0
  19. data/lib/ec2/right_ec2_monitoring.rb +70 -0
  20. data/lib/ec2/right_ec2_placement_groups.rb +108 -0
  21. data/lib/ec2/right_ec2_reserved_instances.rb +174 -0
  22. data/lib/ec2/right_ec2_security_groups.rb +396 -0
  23. data/lib/ec2/right_ec2_spot_instances.rb +425 -0
  24. data/lib/ec2/right_ec2_tags.rb +139 -0
  25. data/lib/ec2/right_ec2_vpc.rb +583 -0
  26. data/lib/ec2/right_ec2_windows_mobility.rb +84 -0
  27. data/lib/elb/right_elb_interface.rb +571 -0
  28. data/lib/iam/right_iam_access_keys.rb +71 -0
  29. data/lib/iam/right_iam_groups.rb +195 -0
  30. data/lib/iam/right_iam_interface.rb +341 -0
  31. data/lib/iam/right_iam_mfa_devices.rb +67 -0
  32. data/lib/iam/right_iam_users.rb +251 -0
  33. data/lib/rds/right_rds_interface.rb +1309 -0
  34. data/lib/right_aws.rb +88 -0
  35. data/lib/route_53/right_route_53_interface.rb +630 -0
  36. data/lib/s3/right_s3.rb +1123 -0
  37. data/lib/s3/right_s3_interface.rb +1198 -0
  38. data/lib/sdb/active_sdb.rb +1107 -0
  39. data/lib/sdb/right_sdb_interface.rb +753 -0
  40. data/lib/sns/right_sns.rb +205 -0
  41. data/lib/sns/right_sns_interface.rb +343 -0
  42. data/lib/sqs/right_sqs.rb +387 -0
  43. data/lib/sqs/right_sqs_gen2.rb +342 -0
  44. data/lib/sqs/right_sqs_gen2_interface.rb +523 -0
  45. data/lib/sqs/right_sqs_interface.rb +593 -0
  46. data/right_aws.gemspec +91 -0
  47. data/test/acf/test_helper.rb +2 -0
  48. data/test/acf/test_right_acf.rb +138 -0
  49. data/test/awsbase/test_helper.rb +2 -0
  50. data/test/awsbase/test_right_awsbase.rb +12 -0
  51. data/test/ec2/test_helper.rb +2 -0
  52. data/test/ec2/test_right_ec2.rb +108 -0
  53. data/test/http_connection.rb +87 -0
  54. data/test/rds/test_helper.rb +2 -0
  55. data/test/rds/test_right_rds.rb +120 -0
  56. data/test/s3/test_helper.rb +2 -0
  57. data/test/s3/test_right_s3.rb +421 -0
  58. data/test/s3/test_right_s3_stubbed.rb +97 -0
  59. data/test/sdb/test_active_sdb.rb +357 -0
  60. data/test/sdb/test_batch_put_attributes.rb +54 -0
  61. data/test/sdb/test_helper.rb +3 -0
  62. data/test/sdb/test_right_sdb.rb +253 -0
  63. data/test/sns/test_helper.rb +2 -0
  64. data/test/sns/test_right_sns.rb +73 -0
  65. data/test/sqs/test_helper.rb +2 -0
  66. data/test/sqs/test_right_sqs.rb +285 -0
  67. data/test/sqs/test_right_sqs_gen2.rb +264 -0
  68. data/test/test_credentials.rb +37 -0
  69. data/test/ts_right_aws.rb +14 -0
  70. metadata +244 -0
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../../lib/right_aws'
@@ -0,0 +1,120 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestRds < Test::Unit::TestCase
4
+
5
+ STDOUT.sync = true
6
+
7
+ TEST_SG_NAME = 'RightRdsSGTest0123456789'
8
+
9
+ def setup
10
+ @rds = Rightscale::RdsInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key, :logger => Logger.new('/dev/null'))
11
+ end
12
+
13
+ def test_00_instances
14
+ assert_nothing_raised do
15
+ items = @rds.describe_db_instances
16
+ assert items.is_a?(Array)
17
+ end
18
+ #
19
+ assert_nothing_raised do
20
+ @rds.describe_db_instances do |response|
21
+ assert response.is_a?(Hash)
22
+ assert response[:db_instances].is_a?(Array)
23
+ end
24
+ end
25
+ end
26
+
27
+ def test_10_security_groups
28
+ assert_nothing_raised do
29
+ items = @rds.describe_db_security_groups
30
+ assert items.is_a?(Array)
31
+ end
32
+ #
33
+ assert_nothing_raised do
34
+ @rds.describe_db_security_groups do |response|
35
+ assert response.is_a?(Hash)
36
+ assert response[:db_security_groups].is_a?(Array)
37
+ end
38
+ end
39
+ end
40
+
41
+ def test_11_remove_security_group
42
+ @rds.delete_db_security_group rescue nil
43
+ end
44
+
45
+ def test_12_create_security_group
46
+ sg = nil
47
+ assert_nothing_raised do
48
+ sg = @rds.create_db_security_group(TEST_SG_NAME, 'sg-description')
49
+ end
50
+ assert sg.is_a?(Hash)
51
+ end
52
+
53
+ def test_13_authorize
54
+ assert_nothing_raised do
55
+ sg = @rds.authorize_db_security_group_ingress(TEST_SG_NAME, :cidrip => '131.0.0.1/8')
56
+ assert sg.is_a?(Hash)
57
+ assert_equal 1, sg[:ip_ranges].size
58
+ end
59
+ assert_nothing_raised do
60
+ sg = @rds.authorize_db_security_group_ingress(TEST_SG_NAME, :ec2_security_group_owner => '826693181925',
61
+ :ec2_security_group_name => 'default' )
62
+ assert sg.is_a?(Hash)
63
+ assert_equal 1, sg[:ec2_security_groups].size
64
+ end
65
+ sleep 30
66
+ end
67
+
68
+ def test_14_revoke
69
+ assert_nothing_raised do
70
+ sg = @rds.revoke_db_security_group_ingress(TEST_SG_NAME, :cidrip => '131.0.0.1/8')
71
+ assert sg.is_a?(Hash)
72
+ end
73
+ assert_nothing_raised do
74
+ sg = @rds.revoke_db_security_group_ingress(TEST_SG_NAME, :ec2_security_group_owner => '826693181925',
75
+ :ec2_security_group_name => 'default' )
76
+ assert sg.is_a?(Hash)
77
+ end
78
+ sleep 30
79
+ #
80
+ sg = @rds.describe_db_security_groups(TEST_SG_NAME).first
81
+ assert_equal 0, sg[:ip_ranges].size
82
+ assert_equal 0, sg[:ec2_security_groups].size
83
+ end
84
+
85
+ def test_15_delete_security_group
86
+ assert_nothing_raised do
87
+ @rds.delete_db_security_group(TEST_SG_NAME)
88
+ end
89
+ end
90
+
91
+
92
+ def test_20_db_snapshots
93
+ assert_nothing_raised do
94
+ items = @rds.describe_db_snapshots
95
+ assert items.is_a?(Array)
96
+ end
97
+ #
98
+ assert_nothing_raised do
99
+ @rds.describe_db_snapshots do |response|
100
+ assert response.is_a?(Hash)
101
+ assert response[:db_snapshots].is_a?(Array)
102
+ end
103
+ end
104
+ end
105
+
106
+ def test_30_events
107
+ assert_nothing_raised do
108
+ items = @rds.describe_events
109
+ assert items.is_a?(Array)
110
+ end
111
+ #
112
+ assert_nothing_raised do
113
+ @rds.describe_events do |response|
114
+ assert response.is_a?(Hash)
115
+ assert response[:events].is_a?(Array)
116
+ end
117
+ end
118
+ end
119
+
120
+ end
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../../lib/right_aws'
@@ -0,0 +1,421 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestS3 < Test::Unit::TestCase
4
+
5
+ RIGHT_OBJECT_TEXT = 'Right test message'
6
+
7
+ def setup
8
+ @s3 = Rightscale::S3Interface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
9
+ @bucket = 'right_s3_awesome_test_bucket_000B1'
10
+ @bucket2 = 'right_s3_awesome_test_bucket_000B2'
11
+ @key1 = 'test/woohoo1/'
12
+ @key2 = 'test1/key/woohoo2'
13
+ @key3 = 'test2/A%B@C_D&E?F+G=H"I'
14
+ @key1_copy = 'test/woohoo1_2'
15
+ @key1_new_name = 'test/woohoo1_3'
16
+ @key2_new_name = 'test1/key/woohoo2_new'
17
+ @s = Rightscale::S3.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
18
+ end
19
+
20
+ #---------------------------
21
+ # Rightscale::S3Interface
22
+ #---------------------------
23
+
24
+ def test_01_create_bucket
25
+ assert @s3.create_bucket(@bucket), 'Create_bucket fail'
26
+ end
27
+
28
+ def test_02_list_all_my_buckets
29
+ assert @s3.list_all_my_buckets.map{|bucket| bucket[:name]}.include?(@bucket), "#{@bucket} must exist in bucket list"
30
+ end
31
+
32
+ def test_03_list_empty_bucket
33
+ assert_equal 0, @s3.list_bucket(@bucket).size, "#{@bucket} isn't empty, arrgh!"
34
+ end
35
+
36
+ def test_04_put
37
+ assert @s3.put(@bucket, @key1, RIGHT_OBJECT_TEXT, 'x-amz-meta-family'=>'Woohoo1!'), 'Put bucket fail'
38
+ assert @s3.put(@bucket, @key2, RIGHT_OBJECT_TEXT, 'x-amz-meta-family'=>'Woohoo2!'), 'Put bucket fail'
39
+ assert @s3.put(@bucket, @key3, RIGHT_OBJECT_TEXT, 'x-amz-meta-family'=>'Woohoo3!'), 'Put bucket fail'
40
+ end
41
+
42
+ def test_05_get_and_get_object
43
+ assert_raise(Rightscale::AwsError) { @s3.get(@bucket, 'undefined/key') }
44
+ data1 = @s3.get(@bucket, @key1)
45
+ assert_equal RIGHT_OBJECT_TEXT, data1[:object], "Object text must be equal to '#{RIGHT_OBJECT_TEXT}'"
46
+ assert_equal RIGHT_OBJECT_TEXT, @s3.get_object(@bucket, @key1), "Get_object text must return '#{RIGHT_OBJECT_TEXT}'"
47
+ assert_equal 'Woohoo1!', data1[:headers]['x-amz-meta-family'], "x-amz-meta-family header must be equal to 'Woohoo1!'"
48
+ assert_equal RIGHT_OBJECT_TEXT, @s3.get_object(@bucket, @key3), "Get_object text must return '#{RIGHT_OBJECT_TEXT}'"
49
+ end
50
+
51
+ def test_06_head
52
+ assert_equal 'Woohoo1!', @s3.head(@bucket,@key1)['x-amz-meta-family'], "x-amz-meta-family header must be equal to 'Woohoo1!'"
53
+ end
54
+
55
+
56
+ def test_07_streaming_get
57
+ resp = String.new
58
+ assert_raise(Rightscale::AwsError) do
59
+ @s3.get(@bucket, 'undefined/key') do |chunk|
60
+ resp += chunk
61
+ end
62
+ end
63
+
64
+ resp = String.new
65
+ data1 = @s3.get(@bucket, @key1) do |chunk|
66
+ resp += chunk
67
+ end
68
+ assert_equal RIGHT_OBJECT_TEXT, resp, "Object text must be equal to '#{RIGHT_OBJECT_TEXT}'"
69
+ assert_equal @s3.get_object(@bucket, @key1), resp, "Streaming iface must return same as non-streaming"
70
+ assert_equal 'Woohoo1!', data1[:headers]['x-amz-meta-family'], "x-amz-meta-family header must be equal to 'Woohoo1!'"
71
+ end
72
+
73
+ def test_08_keys
74
+ keys = @s3.list_bucket(@bucket).map{|b| b[:key]}
75
+ assert_equal keys.size, 3, "There should be 3 keys"
76
+ assert(keys.include?(@key1))
77
+ assert(keys.include?(@key2))
78
+ assert(keys.include?(@key3))
79
+ end
80
+
81
+ def test_09_copy_key
82
+ #--- test COPY
83
+ # copy a key
84
+ assert @s3.copy(@bucket, @key1, @bucket, @key1_copy)
85
+ # check it was copied well
86
+ assert_equal RIGHT_OBJECT_TEXT, @s3.get_object(@bucket, @key1_copy), "copied object must have the same data"
87
+ # check meta-headers were copied
88
+ headers = @s3.head(@bucket, @key1_copy)
89
+ assert_equal 'Woohoo1!', headers['x-amz-meta-family'], "x-amz-meta-family header must be equal to 'Woohoo1!'"
90
+ #--- test REPLACE
91
+ assert @s3.copy(@bucket, @key1, @bucket, @key1_copy, :replace, 'x-amz-meta-family' => 'oooops!')
92
+ # check it was copied well
93
+ assert_equal RIGHT_OBJECT_TEXT, @s3.get_object(@bucket, @key1_copy), "copied object must have the same data"
94
+ # check meta-headers were overwrittenn
95
+ headers = @s3.head(@bucket, @key1_copy)
96
+ assert_equal 'oooops!', headers['x-amz-meta-family'], "x-amz-meta-family header must be equal to 'oooops!'"
97
+ end
98
+
99
+ def test_10_move_key
100
+ # move a key
101
+ assert @s3.move(@bucket, @key1, @bucket, @key1_new_name)
102
+ # check it's data was moved correctly
103
+ assert_equal RIGHT_OBJECT_TEXT, @s3.get_object(@bucket, @key1_new_name), "moved object must have the same data"
104
+ # check meta-headers were moved
105
+ headers = @s3.head(@bucket, @key1_new_name)
106
+ assert_equal 'Woohoo1!', headers['x-amz-meta-family'], "x-amz-meta-family header must be equal to 'Woohoo1!'"
107
+ # check the original key is not exists any more
108
+ keys = @s3.list_bucket(@bucket).map{|b| b[:key]}
109
+ assert(!keys.include?(@key1))
110
+ end
111
+
112
+ def test_11_rename_key
113
+ # rename a key
114
+ assert @s3.rename(@bucket, @key2, @key2_new_name)
115
+ # check the new key data
116
+ assert_equal RIGHT_OBJECT_TEXT, @s3.get_object(@bucket, @key2_new_name), "moved object must have the same data"
117
+ # check meta-headers
118
+ headers = @s3.head(@bucket, @key2_new_name)
119
+ assert_equal 'Woohoo2!', headers['x-amz-meta-family'], "x-amz-meta-family header must be equal to 'Woohoo2!'"
120
+ # check the original key is not exists any more
121
+ keys = @s3.list_bucket(@bucket).map{|b| b[:key]}
122
+ assert(!keys.include?(@key2))
123
+ end
124
+ def test_12_retrieve_object
125
+ assert_raise(Rightscale::AwsError) { @s3.retrieve_object(:bucket => @bucket, :key => 'undefined/key') }
126
+ data1 = @s3.retrieve_object(:bucket => @bucket, :key => @key1_new_name)
127
+ assert_equal RIGHT_OBJECT_TEXT, data1[:object], "Object text must be equal to '#{RIGHT_OBJECT_TEXT}'"
128
+ assert_equal 'Woohoo1!', data1[:headers]['x-amz-meta-family'], "x-amz-meta-family header must be equal to 'Woohoo1!'"
129
+ end
130
+ def test_13_delete_folder
131
+ assert_equal 1, @s3.delete_folder(@bucket, 'test').size, "Only one key(#{@key1}) must be deleted!"
132
+ end
133
+
134
+ def test_14_delete_bucket
135
+ assert_raise(Rightscale::AwsError) { @s3.delete_bucket(@bucket) }
136
+ assert @s3.clear_bucket(@bucket), 'Clear_bucket fail'
137
+ assert_equal 0, @s3.list_bucket(@bucket).size, 'Bucket must be empty'
138
+ assert @s3.delete_bucket(@bucket)
139
+ assert !@s3.list_all_my_buckets.map{|bucket| bucket[:name]}.include?(@bucket), "#{@bucket} must not exist"
140
+ end
141
+
142
+
143
+
144
+
145
+ #---------------------------
146
+ # Rightscale::S3 classes
147
+ #---------------------------
148
+
149
+ def test_20_s3
150
+ # create bucket
151
+ bucket = @s.bucket(@bucket, true)
152
+ assert bucket
153
+ # check that the bucket exists
154
+ assert @s.buckets.map{|b| b.name}.include?(@bucket)
155
+ # delete bucket
156
+ assert bucket.clear
157
+ assert bucket.delete
158
+ end
159
+
160
+ def test_21_bucket_create_put_get_key
161
+ bucket = Rightscale::S3::Bucket.create(@s, @bucket, true)
162
+ # check that the bucket exists
163
+ assert @s.buckets.map{|b| b.name}.include?(@bucket)
164
+ assert bucket.keys.empty?
165
+ # put data
166
+ assert bucket.put(@key3, RIGHT_OBJECT_TEXT, {'family'=>'123456'})
167
+ # get data and compare
168
+ assert_equal RIGHT_OBJECT_TEXT, bucket.get(@key3)
169
+ # get key object
170
+ key = bucket.key(@key3, true)
171
+ assert_equal Rightscale::S3::Key, key.class
172
+ assert key.exists?
173
+ assert_equal '123456', key.meta_headers['family']
174
+ end
175
+
176
+ def test_22_keys
177
+ bucket = Rightscale::S3::Bucket.create(@s, @bucket, false)
178
+ # create first key
179
+ key3 = Rightscale::S3::Key.create(bucket, @key3)
180
+ key3.refresh
181
+ assert key3.exists?
182
+ assert_equal '123456', key3.meta_headers['family']
183
+ # create second key
184
+ key2 = Rightscale::S3::Key.create(bucket, @key2)
185
+ assert !key2.refresh
186
+ assert !key2.exists?
187
+ assert_raise(Rightscale::AwsError) { key2.head }
188
+ # store key
189
+ key2.meta_headers = {'family'=>'111222333'}
190
+ assert key2.put(RIGHT_OBJECT_TEXT)
191
+ # make sure that the key exists
192
+ assert key2.refresh
193
+ assert key2.exists?
194
+ assert key2.head
195
+ # get its data
196
+ assert_equal RIGHT_OBJECT_TEXT, key2.get
197
+ # drop key
198
+ assert key2.delete
199
+ assert !key2.exists?
200
+ end
201
+
202
+ def test_23_rename_key
203
+ bucket = Rightscale::S3::Bucket.create(@s, @bucket, false)
204
+ # -- 1 -- (key based rename)
205
+ # create a key
206
+ key = bucket.key('test/copy/1')
207
+ key.put(RIGHT_OBJECT_TEXT)
208
+ original_key = key.clone
209
+ assert key.exists?, "'test/copy/1' should exist"
210
+ # rename it
211
+ key.rename('test/copy/2')
212
+ assert_equal 'test/copy/2', key.name
213
+ assert key.exists?, "'test/copy/2' should exist"
214
+ # the original key should not exist
215
+ assert !original_key.exists?, "'test/copy/1' should not exist"
216
+ # -- 2 -- (bucket based rename)
217
+ bucket.rename_key('test/copy/2', 'test/copy/3')
218
+ assert bucket.key('test/copy/3').exists?, "'test/copy/3' should exist"
219
+ assert !bucket.key('test/copy/2').exists?, "'test/copy/2' should not exist"
220
+ end
221
+
222
+ def test_24_copy_key
223
+ bucket = Rightscale::S3::Bucket.create(@s, @bucket, false)
224
+ # -- 1 -- (key based copy)
225
+ # create a key
226
+ key = bucket.key('test/copy/10')
227
+ key.put(RIGHT_OBJECT_TEXT)
228
+ # make copy
229
+ new_key = key.copy('test/copy/11')
230
+ # make sure both the keys exist and have a correct data
231
+ assert key.exists?, "'test/copy/10' should exist"
232
+ assert new_key.exists?, "'test/copy/11' should exist"
233
+ assert_equal RIGHT_OBJECT_TEXT, key.get
234
+ assert_equal RIGHT_OBJECT_TEXT, new_key.get
235
+ # -- 2 -- (bucket based copy)
236
+ bucket.copy_key('test/copy/11', 'test/copy/12')
237
+ assert bucket.key('test/copy/11').exists?, "'test/copy/11' should exist"
238
+ assert bucket.key('test/copy/12').exists?, "'test/copy/12' should exist"
239
+ assert_equal RIGHT_OBJECT_TEXT, bucket.key('test/copy/11').get
240
+ assert_equal RIGHT_OBJECT_TEXT, bucket.key('test/copy/12').get
241
+ end
242
+
243
+ def test_25_move_key
244
+ bucket = Rightscale::S3::Bucket.create(@s, @bucket, false)
245
+ # -- 1 -- (key based copy)
246
+ # create a key
247
+ key = bucket.key('test/copy/20')
248
+ key.put(RIGHT_OBJECT_TEXT)
249
+ # move
250
+ new_key = key.move('test/copy/21')
251
+ # make sure both the keys exist and have a correct data
252
+ assert !key.exists?, "'test/copy/20' should not exist"
253
+ assert new_key.exists?, "'test/copy/21' should exist"
254
+ assert_equal RIGHT_OBJECT_TEXT, new_key.get
255
+ # -- 2 -- (bucket based copy)
256
+ bucket.copy_key('test/copy/21', 'test/copy/22')
257
+ assert bucket.key('test/copy/21').exists?, "'test/copy/21' should not exist"
258
+ assert bucket.key('test/copy/22').exists?, "'test/copy/22' should exist"
259
+ assert_equal RIGHT_OBJECT_TEXT, bucket.key('test/copy/22').get
260
+ end
261
+
262
+ def test_26_save_meta
263
+ bucket = Rightscale::S3::Bucket.create(@s, @bucket, false)
264
+ # create a key
265
+ key = bucket.key('test/copy/30')
266
+ key.put(RIGHT_OBJECT_TEXT)
267
+ assert key.meta_headers.right_blank?
268
+ # store some meta keys
269
+ meta = {'family' => 'oops','race' => 'troll'}
270
+ assert_equal meta, key.save_meta(meta)
271
+ # reload meta
272
+ assert_equal meta, key.reload_meta
273
+ end
274
+
275
+ def test_27_clear_delete
276
+ bucket = Rightscale::S3::Bucket.create(@s, @bucket, false)
277
+ # add another key
278
+ bucket.put(@key2, RIGHT_OBJECT_TEXT)
279
+ # delete 'folder'
280
+ assert_equal 1, bucket.delete_folder(@key1).size
281
+ # delete
282
+ assert_raise(Rightscale::AwsError) { bucket.delete }
283
+ bucket.delete(true)
284
+ end
285
+
286
+ # Grantees
287
+
288
+ def test_30_create_bucket
289
+ bucket = @s.bucket(@bucket, true, 'public-read')
290
+ assert bucket
291
+ end
292
+
293
+ def test_31_list_grantees
294
+ bucket = Rightscale::S3::Bucket.create(@s, @bucket, false)
295
+ # get grantees list
296
+ grantees = bucket.grantees
297
+ # check that the grantees count equal to 2 (root, AllUsers)
298
+ assert_equal 2, grantees.size
299
+ end
300
+
301
+ def test_32_grant_revoke_drop
302
+ bucket = Rightscale::S3::Bucket.create(@s, @bucket, false)
303
+ # Take 'AllUsers' grantee
304
+ grantee = Rightscale::S3::Grantee.new(bucket,'http://acs.amazonaws.com/groups/global/AllUsers')
305
+ # Check exists?
306
+ assert grantee.exists?
307
+ # Add grant as String
308
+ assert grantee.grant('WRITE')
309
+ # Add grants as Array
310
+ assert grantee.grant(['READ_ACP', 'WRITE_ACP'])
311
+ # Check perms count
312
+ assert_equal 4, grantee.perms.size
313
+ # revoke 'WRITE_ACP'
314
+ assert grantee.revoke('WRITE_ACP')
315
+ # Check manual perm removal method
316
+ grantee.perms -= ['READ_ACP']
317
+ grantee.apply
318
+ assert_equal 2, grantee.perms.size
319
+ # Check grantee removal if it has no permissions
320
+ assert grantee.perms = []
321
+ assert grantee.apply
322
+ assert !grantee.exists?
323
+ # Check multiple perms assignment
324
+ assert grantee.grant('FULL_CONTROL', 'READ', 'WRITE')
325
+ assert_equal ['FULL_CONTROL','READ','WRITE'].sort, grantee.perms.sort
326
+ # Check multiple perms removal
327
+ assert grantee.revoke('FULL_CONTROL', 'WRITE')
328
+ assert_equal ['READ'], grantee.perms
329
+ # check 'Drop' method
330
+ assert grantee.drop
331
+ assert !grantee.exists?
332
+ assert_equal 1, bucket.grantees.size
333
+ # Delete bucket
334
+ bucket.delete(true)
335
+ end
336
+
337
+ def test_33_key_grantees
338
+ # Create bucket
339
+ bucket = @s.bucket(@bucket, true)
340
+ # Create key
341
+ key = bucket.key(@key1)
342
+ assert key.put(RIGHT_OBJECT_TEXT, 'public-read')
343
+ # Get grantees list (must be == 2)
344
+ grantees = key.grantees
345
+ assert grantees
346
+ assert_equal 2, grantees.size
347
+ # Take one of grantees and give him 'Write' perms
348
+ grantee = grantees[0]
349
+ assert grantee.grant('WRITE')
350
+ # Drop grantee
351
+ assert grantee.drop
352
+ # Drop bucket
353
+ bucket.delete(true)
354
+ end
355
+
356
+ def test_34_bucket_create_put_with_perms
357
+ bucket = Rightscale::S3::Bucket.create(@s, @bucket, true)
358
+ # check that the bucket exists
359
+ assert @s.buckets.map{|b| b.name}.include?(@bucket)
360
+ assert bucket.keys.empty?
361
+ # put data (with canned ACL)
362
+ assert bucket.put(@key1, RIGHT_OBJECT_TEXT, {'family'=>'123456'}, "public-read")
363
+ # get data and compare
364
+ assert_equal RIGHT_OBJECT_TEXT, bucket.get(@key1)
365
+ # get key object
366
+ key = bucket.key(@key1, true)
367
+ assert_equal Rightscale::S3::Key, key.class
368
+ assert key.exists?
369
+ assert_equal '123456', key.meta_headers['family']
370
+ end
371
+
372
+ def test_35_key_put_with_perms
373
+ bucket = Rightscale::S3::Bucket.create(@s, @bucket, false)
374
+ # create first key
375
+ key1 = Rightscale::S3::Key.create(bucket, @key1)
376
+ key1.refresh
377
+ assert key1.exists?
378
+ assert key1.put(RIGHT_OBJECT_TEXT, "public-read")
379
+ # get its data
380
+ assert_equal RIGHT_OBJECT_TEXT, key1.get
381
+ # drop key
382
+ assert key1.delete
383
+ assert !key1.exists?
384
+ end
385
+
386
+ def test_36_set_amazon_problems
387
+ original_problems = RightAws::S3Interface.amazon_problems
388
+ assert(original_problems.length > 0)
389
+ RightAws::S3Interface.amazon_problems= original_problems << "A New Problem"
390
+ new_problems = RightAws::S3Interface.amazon_problems
391
+ assert_equal(new_problems, original_problems)
392
+
393
+ RightAws::S3Interface.amazon_problems= nil
394
+ assert_nil(RightAws::S3Interface.amazon_problems)
395
+ end
396
+
397
+ def test_37_access_logging
398
+ bucket = Rightscale::S3::Bucket.create(@s, @bucket, false)
399
+ targetbucket = Rightscale::S3::Bucket.create(@s, @bucket2, true)
400
+ # Take 'AllUsers' grantee
401
+ grantee = Rightscale::S3::Grantee.new(targetbucket,'http://acs.amazonaws.com/groups/s3/LogDelivery')
402
+
403
+ assert grantee.grant(['READ_ACP', 'WRITE'])
404
+
405
+ assert bucket.enable_logging(:targetbucket => targetbucket, :targetprefix => "loggylogs/")
406
+ sleep 10
407
+
408
+ assert_equal({:enabled => true, :targetbucket => @bucket2, :targetprefix => "loggylogs/"}, bucket.logging_info)
409
+
410
+ assert bucket.disable_logging
411
+
412
+ # check 'Drop' method
413
+ assert grantee.drop
414
+ end
415
+
416
+ def test_40_delete_buckets
417
+ Rightscale::S3::Bucket.create(@s, @bucket, false).delete(true)
418
+ Rightscale::S3::Bucket.create(@s, @bucket2, false).delete(true)
419
+ end
420
+
421
+ end