aws 2.4.5 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. data/README.markdown +9 -75
  2. data/lib/acf/acf_interface.rb +6 -4
  3. data/lib/aws.rb +2 -1
  4. data/lib/awsbase/awsbase.rb +98 -65
  5. data/lib/awsbase/errors.rb +9 -5
  6. data/lib/awsbase/parsers.rb +226 -226
  7. data/lib/awsbase/utils.rb +255 -207
  8. data/lib/ec2/ec2.rb +243 -105
  9. data/lib/ec2/mon_interface.rb +2 -1
  10. data/lib/iam/iam.rb +31 -25
  11. data/lib/right_aws.rb +1 -1
  12. data/lib/s3/bucket.rb +7 -8
  13. data/lib/s3/grantee.rb +238 -238
  14. data/lib/s3/key.rb +281 -281
  15. data/lib/s3/s3.rb +2 -1
  16. data/lib/s3/s3_interface.rb +45 -35
  17. data/lib/sdb/active_sdb.rb +19 -22
  18. data/lib/sdb/sdb_interface.rb +4 -5
  19. data/lib/ses/ses.rb +123 -0
  20. data/lib/sqs/sqs.rb +5 -0
  21. data/lib/sqs/sqs_interface.rb +3 -3
  22. metadata +53 -104
  23. data/lib/awsbase/support.rb +0 -142
  24. data/test/acf/test_acf.rb +0 -148
  25. data/test/acf/test_helper.rb +0 -2
  26. data/test/ec2/test_ec2.rb +0 -205
  27. data/test/ec2/test_helper.rb +0 -2
  28. data/test/ec2/test_mon.rb +0 -17
  29. data/test/elb/test_elb.rb +0 -51
  30. data/test/http_connection.rb +0 -87
  31. data/test/iam/test_iam.rb +0 -36
  32. data/test/rds/test_rds.rb +0 -181
  33. data/test/s3/s3_test_base.rb +0 -23
  34. data/test/s3/test_helper.rb +0 -3
  35. data/test/s3/test_s3.rb +0 -162
  36. data/test/s3/test_s3_class.rb +0 -179
  37. data/test/s3/test_s3_rights.rb +0 -139
  38. data/test/s3/test_s3_stubbed.rb +0 -97
  39. data/test/sdb/test_active_sdb.rb +0 -338
  40. data/test/sdb/test_helper.rb +0 -3
  41. data/test/sdb/test_sdb.rb +0 -220
  42. data/test/sqs/test_helper.rb +0 -2
  43. data/test/sqs/test_sqs.rb +0 -232
  44. data/test/test_credentials.rb +0 -54
  45. data/test/ts_right_aws.rb +0 -13
@@ -1,97 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
- require File.dirname(__FILE__) + '/../test_credentials.rb'
3
-
4
- class TestS3Stubbed < Test::Unit::TestCase
5
-
6
- RIGHT_OBJECT_TEXT = 'Right test message'
7
-
8
- def setup
9
- TestCredentials.get_credentials
10
- @s3 = Aws::S3Interface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
11
- @bucket = 'right_s3_awesome_test_bucket'
12
- @key1 = 'test/woohoo1'
13
- @key2 = 'test1/key/woohoo2'
14
- @s = Aws::S3.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
15
- Rightscale::HttpConnection.reset
16
- end
17
-
18
- # Non-remote tests: these use the stub version of Rightscale::HTTPConnection
19
- def test_101_create_bucket
20
- Rightscale::HttpConnection.push(409, 'The named bucket you tried to create already exists')
21
- Rightscale::HttpConnection.push(500, 'We encountered an internal error. Please try again.')
22
- Rightscale::HttpConnection.push(500, 'We encountered an internal error. Please try again.')
23
- assert_raise Aws::AwsError do
24
- @s3.create_bucket(@bucket)
25
- end
26
- end
27
-
28
- def test_102_list_all_my_buckets_failure
29
- Rightscale::HttpConnection.push(401, 'Unauthorized')
30
- assert_raise Aws::AwsError do
31
- @s3.list_all_my_buckets
32
- end
33
- end
34
-
35
- def test_103_list_empty_bucket
36
- Rightscale::HttpConnection.push(403, 'Access Denied')
37
- assert_raise Aws::AwsError do
38
- @s3.list_bucket(@bucket)
39
- end
40
- end
41
-
42
- def test_104_put
43
- Rightscale::HttpConnection.push(400, 'Your proposed upload exceeds the maximum allowed object size.')
44
- Rightscale::HttpConnection.push(400, 'The Content-MD5 you specified was an invalid.')
45
- Rightscale::HttpConnection.push(409, 'Please try again')
46
- assert_raise Aws::AwsError do
47
- assert @s3.put(@bucket, @key1, RIGHT_OBJECT_TEXT, 'x-amz-meta-family'=>'Woohoo1!'), 'Put bucket fail'
48
- end
49
- assert_raise Aws::AwsError do
50
- assert @s3.put(@bucket, @key2, RIGHT_OBJECT_TEXT, 'x-amz-meta-family'=>'Woohoo2!'), 'Put bucket fail'
51
- end
52
- end
53
-
54
- def test_105_get_and_get_object
55
- Rightscale::HttpConnection.push(404, 'not found')
56
- assert_raise(Rightscale::AwsError) { @s3.get(@bucket, 'undefined/key') }
57
- end
58
-
59
- def test_106_head
60
- Rightscale::HttpConnection.push(404, 'Good Luck!')
61
- assert_raise Aws::AwsError do
62
- @s3.head(@bucket,@key1)
63
- end
64
- end
65
-
66
-
67
- def test_109_delete_bucket
68
- Rightscale::HttpConnection.push(403, 'Good Luck!')
69
- assert_raise(Rightscale::AwsError) { @s3.delete_bucket(@bucket) }
70
- end
71
-
72
- def test_115_copy_key
73
-
74
- Rightscale::HttpConnection.push(500, 'not found')
75
- #--- test COPY
76
- # copy a key
77
- assert_raise Aws::AwsError do
78
- @s3.copy(@bucket, @key1, @bucket, @key1_copy)
79
- end
80
-
81
- end
82
-
83
- def test_116_move_key
84
- # move a key
85
- Rightscale::HttpConnection.push(413, 'not found')
86
- assert @s3.move(@bucket, @key1, @bucket, @key1_new_name)
87
-
88
- end
89
-
90
- def test_117_rename_key
91
- # rename a key
92
- Rightscale::HttpConnection.push(500, 'not found')
93
- assert @s3.rename(@bucket, @key2, @key2_new_name)
94
-
95
- end
96
-
97
- end
@@ -1,338 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
- require File.dirname(__FILE__) + '/../test_credentials.rb'
3
-
4
- class TestSdb < Test::Unit::TestCase
5
-
6
- DOMAIN_NAME = 'right_sdb_awesome_test_domain'
7
- DASH_DOMAIN_NAME = 'right_sdb-awesome_test_domain'
8
-
9
- class Client < Aws::ActiveSdb::Base
10
- set_domain_name DOMAIN_NAME
11
- end
12
- class DashClient < RightAws::ActiveSdb::Base
13
- set_domain_name DASH_DOMAIN_NAME
14
- end
15
-
16
- def setup
17
- TestCredentials.get_credentials
18
- STDOUT.sync = true
19
- @clients = [
20
- { 'name' => 'Bush', 'country' => 'USA', 'gender' => 'male', 'expiration' => '2009', 'post' => 'president' },
21
- { 'name' => 'Putin', 'country' => 'Russia', 'gender' => 'male', 'expiration' => '2008', 'post' => 'president' },
22
- { 'name' => 'Medvedev', 'country' => 'Russia', 'gender' => 'male', 'expiration' => '2012', 'post' => 'president' },
23
- { 'name' => 'Mary', 'country' => 'USA', 'gender' => 'female', 'hobby' => ['patchwork', 'bundle jumping'] },
24
- { 'name' => 'Sandy', 'country' => 'Russia', 'gender' => 'female', 'hobby' => ['flowers', 'cats', 'cooking'] },
25
- { 'name' => 'Mary', 'country' => 'Russia', 'gender' => 'female', 'hobby' => ['flowers', 'cats', 'cooking'] } ]
26
- Aws::ActiveSdb.establish_connection(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
27
- end
28
-
29
- SDB_DELAY = 3
30
-
31
- def wait(delay, msg='')
32
- print " waiting #{delay} seconds: #{msg}"
33
- while delay>0 do
34
- delay -= 1
35
- print '.'
36
- sleep 1
37
- end
38
- puts
39
- end
40
-
41
- #---------------------------
42
- # Aws::SdbInterface
43
- #---------------------------
44
-
45
- def test_00_delete_domain
46
- assert Aws::ActiveSdb.delete_domain(DOMAIN_NAME)
47
- wait SDB_DELAY, 'test 00: after domain deletion'
48
- end
49
-
50
- def test_01_create_domain
51
- # check that domain does not exist
52
- assert !Aws::ActiveSdb.domains.include?(DOMAIN_NAME)
53
- # create domain
54
- assert Client.create_domain
55
- wait SDB_DELAY, 'test 01: after domain creation'
56
- # check that we have received new domain from Amazin
57
- assert Aws::ActiveSdb.domains.include?(DOMAIN_NAME)
58
- end
59
-
60
- def test_02_create_items
61
- # check that DB is empty
62
- clients = Client.find(:all)
63
- assert clients.blank?
64
- # put some clients there
65
- @clients.each do |client|
66
- Client.create client
67
- end
68
- wait SDB_DELAY, 'test 02: after clients creation'
69
- # check that DB has all the clients we just putted
70
- clients = Client.find(:all)
71
- assert_equal @clients.size, clients.size
72
- end
73
-
74
- def test_03_create_and_save_new_item
75
- # get the db
76
- old_clients = Client.find(:all)
77
- # create new client
78
- new_client = Client.new('country' => 'unknown', 'dummy' => 'yes')
79
- wait SDB_DELAY, 'test 03: after in-memory client creation'
80
- # get the db and ensure we created the client in-memory only
81
- assert_equal old_clients.size, Client.find(:all).size
82
- # put the client to DB
83
- new_client.save
84
- wait SDB_DELAY, 'test 03: after in-memory client saving'
85
- # get all db again and compare to original list
86
- assert_equal old_clients.size+1, Client.find(:all).size
87
- end
88
-
89
- def test_04_find_all
90
- # retrieve all the DB, make sure all are in place
91
- clients = Client.find(:all)
92
- ids = clients.map{|client| client.id }[0..1]
93
- assert_equal @clients.size + 1, clients.size
94
- # retrieve all presidents (must find: Bush, Putin, Medvedev)
95
- assert_equal 3, Client.find(:all, :conditions => ["post=?",'president']).size
96
- # retrieve all russian presidents (must find: Putin, Medvedev)
97
- assert_equal 2, Client.find(:all, :conditions => ["post=? and country=?",'president', 'Russia']).size
98
- # retrieve all russian presidents and all women (must find: Putin, Medvedev, 2 Maries and Sandy)
99
- assert_equal 5, Client.find(:all, :conditions => ["post=? and country=? or gender=?",'president', 'Russia','female']).size
100
- # find all rissian presidents Bushes
101
- assert_equal 0, Client.find(:all, :conditions => ["post=? and country=? and name=?",'president', 'Russia','Bush']).size
102
- # --- find by ids
103
- # must find 1 rec (by rec id) and return it
104
- assert_equal ids.first, Client.find(ids.first).id
105
- # must find 1 rec (by one item array) and return an array
106
- assert_equal ids.first, Client.find([ids.first]).first.id
107
- # must find 2 recs (by a list of comma separated ids) and return an array
108
- assert_equal ids.size, Client.find(*ids).size
109
- # must find 2 recs (by an array of ids) and return an array
110
- assert_equal ids.size, Client.find(ids).size
111
- ids << 'dummy_id'
112
- # must raise an error when getting unexistent record
113
- assert_raise(Aws::ActiveSdb::ActiveSdbError) do
114
- Client.find(ids)
115
- end
116
- # find one record by unknown id
117
- assert_raise(Aws::ActiveSdb::ActiveSdbError) do
118
- Client.find('dummy_id')
119
- end
120
- end
121
-
122
- def test_04b_find_all_dashed
123
- # retrieve all the DB, make sure all are in place
124
- clients = DashClient.find(:all)
125
- ids = clients.map{|client| client.id }[0..1]
126
- assert_equal @clients.size + 1, clients.size
127
- # retrieve all presidents (must find: Bush, Putin, Medvedev)
128
- assert_equal 3, DashedClient.find(:all, :conditions => ["[?=?]",'post','president']).size
129
- # retrieve all russian presidents (must find: Putin, Medvedev)
130
- assert_equal 2, DashedClient.find(:all, :conditions => ["['post'=?] intersection ['country'=?]",'president', 'Russia']).size
131
- # retrieve all russian presidents and all women (must find: Putin, Medvedev, 2 Maries and Sandy)
132
- assert_equal 5, DashedClient.find(:all, :conditions => ["['post'=?] intersection ['country'=?] union ['gender'=?]",'president', 'Russia','female']).size
133
- # find all rissian presidents Bushes
134
- assert_equal 0, DashedClient.find(:all, :conditions => ["['post'=?] intersection ['country'=?] intersection ['name'=?]",'president', 'Russia','Bush']).size
135
- # --- find by ids
136
- # must find 1 rec (by rec id) and return it
137
- assert_equal ids.first, DashedClient.find(ids.first).id
138
- # must find 1 rec (by one item array) and return an array
139
- assert_equal ids.first, DashedClient.find([ids.first]).first.id
140
- # must find 2 recs (by a list of comma separated ids) and return an array
141
- assert_equal ids.size, DashedClient.find(*ids).size
142
- # must find 2 recs (by an array of ids) and return an array
143
- assert_equal ids.size, DashedClient.find(ids).size
144
- ids << 'dummy_id'
145
- # must raise an error when getting unexistent record
146
- assert_raise(RightAws::ActiveSdb::ActiveSdbError) do
147
- DashedClient.find(ids)
148
- end
149
- # find one record by unknown id
150
- assert_raise(RightAws::ActiveSdb::ActiveSdbError) do
151
- DashedClient.find('dummy_id')
152
- end
153
- end
154
-
155
- def test_05_find_first
156
- # find any record
157
- assert Client.find(:first)
158
- # find any president
159
- assert Client.find(:first, :conditions => ["post=? and country=?",'president','Russia'])
160
- # find any rissian president
161
- assert_nil Client.find(:first, :conditions => ["post=? and country=?",'president','Rwanda'])
162
- # find any unexistent record
163
- assert Client.find(:first, :conditions => ["?=?",'post','president'])
164
- end
165
-
166
- def test_06_find_all_by_helpers
167
- # find all Bushes
168
- assert_equal 1, Client.find_all_by_name('Bush').size
169
- # find all russian presidents
170
- assert_equal 2, Client.find_all_by_post_and_country('president','Russia').size
171
- # find all women in USA that love flowers
172
- assert_equal 2, Client.find_all_by_gender_and_country_and_hobby('female','Russia','flowers').size
173
- # order and auto_load:
174
- clients = Client.find_all_by_post('president', :order => 'name', :auto_load => true)
175
- assert_equal [['Bush'], ['Medvedev'], ['Putin']], clients.map{|c| c['name']}
176
- clients = Client.find_all_by_post('president', :order => 'name desc', :auto_load => true)
177
- assert_equal [['Putin'], ['Medvedev'], ['Bush']], clients.map{|c| c['name']}
178
- end
179
-
180
- def test_07_find_by_helpers
181
- # find mr Bush
182
- assert Client.find_by_name('Bush')
183
- # find any russian president
184
- assert Client.find_by_post_and_country('president','Russia')
185
- # find Mary in Russia that loves flowers
186
- # order and auto_load:
187
- assert_equal ['Bush'], Client.find_by_post('president', :order => 'name', :auto_load => true)['name']
188
- assert_equal ['Putin'], Client.find_by_post('president', :order => 'name desc', :auto_load => true)['name']
189
- end
190
-
191
- def test_08_reload
192
- putin = Client.find_by_name('Putin')
193
- # attributes must be empty until reload (except 'id' field)
194
- assert_nil putin['name']
195
- assert_nil putin['country']
196
- assert_nil putin['gender']
197
- assert_nil putin['expiration']
198
- assert_nil putin['post']
199
- # reloaded attributes must have 5 items + id
200
- putin.reload
201
- assert_equal 6, putin.attributes.size
202
- # check all attributes
203
- assert_equal ['Putin'], putin['name']
204
- assert_equal ['Russia'], putin['country']
205
- assert_equal ['male'], putin['gender']
206
- assert_equal ['2008'], putin['expiration']
207
- assert_equal ['president'], putin['post']
208
- end
209
-
210
- def test_09_select
211
- # select all records
212
- assert_equal 7, Client.select(:all).size
213
- # LIMIT
214
- # 1 record
215
- assert Client.select(:first).is_a?(Client)
216
- # select 2 recs
217
- assert_equal 2, Client.select(:all, :limit => 2).size
218
- # ORDER
219
- # select all recs ordered by 'expration' (must find only recs where 'expration' attribute presents)
220
- result = Client.select(:all, :order => 'expiration')
221
- assert_equal 3, result.size
222
- assert_equal ['2008', '2009', '2012'], result.map{ |c| c['expiration'] }.flatten
223
- # desc order
224
- result = Client.select(:all, :order => 'expiration desc')
225
- assert_equal ['2012', '2009', '2008'], result.map{ |c| c['expiration'] }.flatten
226
- # CONDITIONS
227
- result = Client.select(:all, :conditions => ["expiration >= ?", 2009], :order => 'name')
228
- assert_equal ['Bush', 'Medvedev'], result.map{ |c| c['name'] }.flatten
229
- result = Client.select(:all, :conditions => "hobby='flowers' AND gender='female'", :order => 'name')
230
- assert_equal ['Mary', 'Sandy'], result.map{ |c| c['name'] }.flatten
231
- # SELECT
232
- result = Client.select(:all, :select => 'hobby', :conditions => "gender IS NOT NULL", :order => 'name')
233
- hobbies = result.map{|c| c['hobby']}
234
- # must return all recs
235
- assert_equal 6, result.size
236
- # but anly 3 of them have this field set
237
- assert_equal 3, hobbies.compact.size
238
- end
239
-
240
- def test_10_select_by
241
- assert_equal 2, Client.select_all_by_hobby('flowers').size
242
- assert_equal 2, Client.select_all_by_hobby_and_country('flowers', 'Russia').size
243
- assert_equal ['Putin'], Client.select_by_post_and_expiration('president','2008')['name']
244
- end
245
-
246
- def test_11_save_and_put
247
- putin = Client.find_by_name('Putin')
248
- putin.reload
249
- putin['hobby'] = 'ski'
250
- # SAVE method (replace values)
251
- putin.save
252
- wait SDB_DELAY, 'test 09: after saving'
253
- # check that DB was updated with 'ski'
254
- new_putin = Client.find_by_name('Putin')
255
- new_putin.reload
256
- assert ['ski'], new_putin['hobby']
257
- # replace hobby
258
- putin['hobby'] = 'dogs'
259
- putin.save
260
- wait SDB_DELAY, 'test 09: after saving'
261
- # check that 'ski' in DB was replaced by 'dogs'
262
- new_putin = Client.find_by_name('Putin')
263
- new_putin.reload
264
- assert ['dogs'], new_putin['hobby']
265
- # PUT method (add values)
266
- putin['hobby'] = 'ski'
267
- putin.put
268
- wait SDB_DELAY, 'test 09: after putting'
269
- # check that 'ski' was added to 'dogs'
270
- new_putin = Client.find_by_name('Putin')
271
- new_putin.reload
272
- assert ['dogs', 'ski'], new_putin['hobby'].sort
273
- end
274
-
275
- def test_12_save_and_put_attributes
276
- putin = Client.find_by_name('Putin')
277
- putin.reload
278
- # SAVE method (replace values)
279
- putin.save_attributes('language' => 'russian')
280
- wait SDB_DELAY, 'test 10: after save_attributes'
281
- # check that DB was updated with 'ski'
282
- new_putin = Client.find_by_name('Putin')
283
- new_putin.reload
284
- assert ['russian'], new_putin['language']
285
- # replace 'russian' by 'german'
286
- putin.save_attributes('language' => 'german')
287
- wait SDB_DELAY, 'test 10: after save_attributes'
288
- # check that 'russian' in DB was replaced by 'german'
289
- new_putin = Client.find_by_name('Putin')
290
- new_putin.reload
291
- assert ['german'], new_putin['language']
292
- # PUT method (add values)
293
- putin.put_attributes('language' => ['russian', 'english'])
294
- wait SDB_DELAY, 'test 10: after put_attributes'
295
- # now Putin must know all the languages
296
- new_putin = Client.find_by_name('Putin')
297
- new_putin.reload
298
- assert ['english', 'german', 'russian'], new_putin['language'].sort
299
- end
300
-
301
- def test_13_delete
302
- putin = Client.find_by_name('Putin')
303
- putin.reload
304
- # --- delete_values
305
- # remove an unknown attribute
306
- # should return an empty hash
307
- assert_equal( {}, putin.delete_values('undefined_attribute' => 'ohoho'))
308
- # remove 2 languages
309
- lang_hash = {'language' => ['english', 'german']}
310
- assert_equal lang_hash, putin.delete_values(lang_hash)
311
- wait SDB_DELAY, 'test 11: after put_attributes'
312
- # now Putin must know only russian lang
313
- new_putin = Client.find_by_name('Putin')
314
- new_putin.reload
315
- assert ['russian'], new_putin['language'].sort
316
- # --- delete_attributes
317
- putin.delete_attributes('language', 'hobby')
318
- wait SDB_DELAY, 'test 11: after delete_attributes'
319
- # trash hoddy and langs
320
- new_putin = Client.find_by_name('Putin')
321
- new_putin.reload
322
- assert_nil new_putin['language']
323
- assert_nil new_putin['hobby']
324
- # --- delete item
325
- putin.delete
326
- wait SDB_DELAY, 'test 11: after delete item'
327
- assert_nil Client.find_by_name('Putin')
328
- end
329
-
330
- def test_14_delete_domain
331
- assert Client.delete_domain
332
- wait SDB_DELAY, 'test 12: after delete domain'
333
- assert_raise(Aws::AwsError) do
334
- Client.find :all
335
- end
336
- end
337
-
338
- end
@@ -1,3 +0,0 @@
1
- require 'test/unit'
2
- require File.dirname(__FILE__) + '/../../lib/right_aws'
3
- require 'sdb/active_sdb'
@@ -1,220 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
- require File.dirname(__FILE__) + '/../test_credentials.rb'
3
-
4
- class TestSdb < Test::Unit::TestCase
5
-
6
- def setup
7
- TestCredentials.get_credentials
8
- STDOUT.sync = true
9
- @domain = 'right_sdb_awesome_test_domain'
10
- @item = 'toys'
11
- @attr = {'Jon' => %w{beer car}}
12
- # Interface instance
13
- @sdb = Aws::SdbInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
14
- end
15
-
16
- SDB_DELAY = 2
17
-
18
- def wait(delay, msg='')
19
- print "waiting #{delay} seconds #{msg}"
20
- while delay>0 do
21
- delay -= 1
22
- print '.'
23
- sleep 1
24
- end
25
- puts
26
- end
27
-
28
- #---------------------------
29
- # Aws::SdbInterface
30
- #---------------------------
31
-
32
- def test_00_delete_domain
33
- # delete the domain to reset all the things
34
- assert @sdb.delete_domain(@domain), 'delete_domain fail'
35
- wait SDB_DELAY, 'after domain deletion'
36
- end
37
-
38
- def test_01_create_domain
39
- # check that domain does not exist
40
- assert !@sdb.list_domains[:domains].include?(@domain)
41
- # create domain
42
- assert @sdb.create_domain(@domain), 'create_domain fail'
43
- wait SDB_DELAY, 'after domain creation'
44
- # check that we have received new domain from Amazin
45
- assert @sdb.list_domains[:domains].include?(@domain)
46
- end
47
-
48
- def test_02_put_attributes
49
- # put attributes
50
- assert @sdb.put_attributes(@domain, @item, @attr)
51
- wait SDB_DELAY, 'after putting attributes'
52
- end
53
-
54
- def test_03_get_attributes
55
- # get attributes
56
- values = @sdb.get_attributes(@domain, @item)[:attributes]['Jon'].to_a.sort
57
- # compare to original list
58
- assert_equal values, @attr['Jon'].sort
59
- end
60
-
61
- def test_04_add_attributes
62
- # add new attribute
63
- new_value = 'girls'
64
- @sdb.put_attributes @domain, @item, {'Jon' => new_value}
65
- wait SDB_DELAY, 'after putting attributes'
66
- # get attributes ('girls' must be added to already existent attributes)
67
- values = @sdb.get_attributes(@domain, @item)[:attributes]['Jon'].to_a.sort
68
- assert_equal values, (@attr['Jon'] << new_value).sort
69
- end
70
-
71
- def test_05_replace_attributes
72
- # replace attributes
73
- @sdb.put_attributes @domain, @item, {'Jon' => 'pub'}, :replace
74
- wait SDB_DELAY, 'after replacing attributes'
75
- # get attributes (all must be removed except of 'pub')
76
- values = @sdb.get_attributes(@domain, @item)[:attributes]['Jon']
77
- assert_equal values, ['pub']
78
- end
79
-
80
- def test_06_delete_attribute
81
- # add value 'girls' and 'vodka' to 'Jon'
82
- @sdb.put_attributes @domain, @item, {'Jon' => ['girls', 'vodka']}
83
- wait SDB_DELAY, 'after adding attributes'
84
- # get attributes ('girls' and 'vodka' must be added 'pub')
85
- values = @sdb.get_attributes(@domain, @item)[:attributes]['Jon'].to_a.sort
86
- assert_equal values, ['girls', 'pub', 'vodka']
87
- # delete a single value 'girls' from attribute 'Jon'
88
- @sdb.delete_attributes @domain, @item, 'Jon' => ['girls']
89
- wait SDB_DELAY, 'after the deletion of attribute'
90
- # get attributes ('girls' must be removed)
91
- values = @sdb.get_attributes(@domain, @item)[:attributes]['Jon']
92
- assert_equal values, ['pub', 'vodka']
93
- # delete all values from attribute 'Jon'
94
- @sdb.delete_attributes @domain, @item, ['Jon']
95
- wait SDB_DELAY, 'after the deletion of attributes'
96
- # get attributes (values must be empty)
97
- values = @sdb.get_attributes(@domain, @item)[:attributes]['Jon']
98
- assert_equal values, nil
99
- end
100
-
101
- def test_07_delete_item
102
- @sdb.put_attributes @domain, @item, {'Volodya' => ['girls', 'vodka']}
103
- wait SDB_DELAY, 'after adding attributes'
104
- # get attributes ('girls' and 'vodka' must be there)
105
- values = @sdb.get_attributes(@domain, @item)[:attributes]['Volodya'].to_a.sort
106
- assert_equal ['girls', 'vodka'], values
107
- # delete an item
108
- @sdb.delete_attributes @domain, @item
109
- sleep 1
110
- # get attributes (values must be empty)
111
- values = @sdb.get_attributes(@domain, @item)[:attributes]['Volodya']
112
- assert_nil values
113
- end
114
-
115
- def test_08_batch_put_and_delete_attributes
116
- items = []
117
- 10.times do |i|
118
- items << Aws::SdbInterface::Item.new("#{@item}_#{i}", {:name=>"name_#{i}"}, true)
119
- end
120
- @sdb.batch_put_attributes @domain, items
121
- sleep 1
122
-
123
- @sdb.batch_delete_attributes @domain, items.collect {|x| x.item_name }
124
- end
125
-
126
-
127
- def test_11_signature_version_2
128
- sdb = Aws::SdbInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key, :signature_version => '2')
129
- domains = nil
130
- assert_nothing_thrown "Failed to use signature V2" do
131
- domains = sdb.list_domains
132
- end
133
- assert domains
134
- end
135
-
136
- def test_12_unicode
137
-
138
- # This was creating a bad signature
139
- s = ''
140
- File.open("unicode.txt", "r") { |f|
141
- s = f.read
142
- }
143
- # s = s.force_encoding("UTF-8")
144
- puts 's=' + s.inspect
145
- puts "encoding? " + s.encoding.name
146
- # s = s.encode("ASCII")
147
- # todo: I'm thinking just iterate through characters and swap out ones that aren't in ascii range.
148
- @sdb.put_attributes @domain, @item, {"badname"=>[s]}
149
- sleep 1
150
- value = @sdb.get_attributes(@domain, @item)[:attributes]['badname'][0]
151
- puts 'value=' + value.inspect
152
- # assert value == s # NOT WORKING, not even sure this is a valid test though
153
-
154
- end
155
-
156
- def test_15_array_of_attrs
157
- item = 'multiples'
158
- assert_nothing_thrown "Failed to put multiple attrs" do
159
- @sdb.put_attributes(@domain, item, {:one=>1, :two=>2, :three=>3})
160
- end
161
- end
162
-
163
- def test_16_zero_len_attrs
164
- item = 'zeroes'
165
- assert_nothing_thrown "Failed to put zero-length attributes" do
166
- @sdb.put_attributes(@domain, item, {:one=>"", :two=>"", :three=>""})
167
- end
168
- end
169
-
170
- def test_17_nil_attrs
171
- item = 'nils'
172
- res = nil
173
- assert_nothing_thrown do
174
- @sdb.put_attributes(@domain, item, {:one=>nil, :two=>nil, :three=>'chunder'})
175
- end
176
- sleep 1
177
- assert_nothing_thrown do
178
- res = @sdb.get_attributes(@domain, item)
179
- end
180
- assert_nil(res[:attributes]['one'][0])
181
- assert_nil(res[:attributes]['two'][0])
182
- assert_not_nil(res[:attributes]['three'][0])
183
- end
184
-
185
- def test_18_url_escape
186
- item = 'urlescapes'
187
- content = {:a=>"one & two & three",
188
- :b=>"one ? two / three"}
189
- @sdb.put_attributes(@domain, item, content)
190
-
191
- res = @sdb.get_attributes(@domain, item)
192
- assert_equal(content[:a], res[:attributes]['a'][0])
193
- assert_equal(content[:b], res[:attributes]['b'][0])
194
- end
195
-
196
- def test_19_put_attrs_by_post
197
- item = 'reqgirth'
198
- i = 0
199
- sa = ""
200
- while (i < 64) do
201
- sa += "aaaaaaaa"
202
- i += 1
203
- end
204
- @sdb.put_attributes(@domain, item, {:a => sa, :b => sa, :c => sa, :d => sa, :e => sa})
205
- end
206
-
207
- def test_21_query_with_atributes
208
- # not applicable anymore
209
- end
210
-
211
- # Keep this test last, because it deletes the domain...
212
- def test_40_delete_domain
213
- assert @sdb.delete_domain(@domain), 'delete_domain fail'
214
- wait SDB_DELAY, 'after domain deletion'
215
- # check that domain does not exist
216
- assert !@sdb.list_domains[:domains].include?(@domain)
217
- end
218
-
219
-
220
- end