redaranj-right_aws 1.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,419 @@
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_000A1'
10
+ @bucket2 = 'right_s3_awesome_test_bucket_000A2'
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.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
+
407
+ assert_equal(bucket.logging_info, {:enabled => true, :targetbucket => @bucket2, :targetprefix => "loggylogs/"})
408
+
409
+ assert bucket.disable_logging
410
+
411
+ # check 'Drop' method
412
+ assert grantee.drop
413
+
414
+ # Delete bucket
415
+ bucket.delete(true)
416
+ targetbucket.delete(true)
417
+ end
418
+
419
+ end
@@ -0,0 +1,95 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestS3Stubbed < 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'
10
+ @key1 = 'test/woohoo1'
11
+ @key2 = 'test1/key/woohoo2'
12
+ @s = Rightscale::S3.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
13
+ Rightscale::HttpConnection.reset
14
+ end
15
+
16
+ # Non-remote tests: these use the stub version of Rightscale::HTTPConnection
17
+ def test_101_create_bucket
18
+ Rightscale::HttpConnection.push(409, 'The named bucket you tried to create already exists')
19
+ Rightscale::HttpConnection.push(500, 'We encountered an internal error. Please try again.')
20
+ Rightscale::HttpConnection.push(500, 'We encountered an internal error. Please try again.')
21
+ assert_raise RightAws::AwsError do
22
+ @s3.create_bucket(@bucket)
23
+ end
24
+ end
25
+
26
+ def test_102_list_all_my_buckets_failure
27
+ Rightscale::HttpConnection.push(401, 'Unauthorized')
28
+ assert_raise RightAws::AwsError do
29
+ @s3.list_all_my_buckets
30
+ end
31
+ end
32
+
33
+ def test_103_list_empty_bucket
34
+ Rightscale::HttpConnection.push(403, 'Access Denied')
35
+ assert_raise RightAws::AwsError do
36
+ @s3.list_bucket(@bucket)
37
+ end
38
+ end
39
+
40
+ def test_104_put
41
+ Rightscale::HttpConnection.push(400, 'Your proposed upload exceeds the maximum allowed object size.')
42
+ Rightscale::HttpConnection.push(400, 'The Content-MD5 you specified was an invalid.')
43
+ Rightscale::HttpConnection.push(409, 'Please try again')
44
+ assert_raise RightAws::AwsError do
45
+ assert @s3.put(@bucket, @key1, RIGHT_OBJECT_TEXT, 'x-amz-meta-family'=>'Woohoo1!'), 'Put bucket fail'
46
+ end
47
+ assert_raise RightAws::AwsError do
48
+ assert @s3.put(@bucket, @key2, RIGHT_OBJECT_TEXT, 'x-amz-meta-family'=>'Woohoo2!'), 'Put bucket fail'
49
+ end
50
+ end
51
+
52
+ def test_105_get_and_get_object
53
+ Rightscale::HttpConnection.push(404, 'not found')
54
+ assert_raise(Rightscale::AwsError) { @s3.get(@bucket, 'undefined/key') }
55
+ end
56
+
57
+ def test_106_head
58
+ Rightscale::HttpConnection.push(404, 'Good Luck!')
59
+ assert_raise RightAws::AwsError do
60
+ @s3.head(@bucket,@key1)
61
+ end
62
+ end
63
+
64
+
65
+ def test_109_delete_bucket
66
+ Rightscale::HttpConnection.push(403, 'Good Luck!')
67
+ assert_raise(Rightscale::AwsError) { @s3.delete_bucket(@bucket) }
68
+ end
69
+
70
+ def test_115_copy_key
71
+
72
+ Rightscale::HttpConnection.push(500, 'not found')
73
+ #--- test COPY
74
+ # copy a key
75
+ assert_raise RightAws::AwsError do
76
+ @s3.copy(@bucket, @key1, @bucket, @key1_copy)
77
+ end
78
+
79
+ end
80
+
81
+ def test_116_move_key
82
+ # move a key
83
+ Rightscale::HttpConnection.push(413, 'not found')
84
+ assert @s3.move(@bucket, @key1, @bucket, @key1_new_name)
85
+
86
+ end
87
+
88
+ def test_117_rename_key
89
+ # rename a key
90
+ Rightscale::HttpConnection.push(500, 'not found')
91
+ assert @s3.rename(@bucket, @key2, @key2_new_name)
92
+
93
+ end
94
+
95
+ end