right_aws 1.9.0 → 3.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 +164 -13
  2. data/Manifest.txt +28 -1
  3. data/README.txt +12 -10
  4. data/Rakefile +56 -29
  5. data/lib/acf/right_acf_interface.rb +343 -172
  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/right_awsbase.rb +755 -115
  12. data/lib/awsbase/support.rb +2 -78
  13. data/lib/awsbase/version.rb +9 -0
  14. data/lib/ec2/right_ec2.rb +274 -1294
  15. data/lib/ec2/right_ec2_ebs.rb +514 -0
  16. data/lib/ec2/right_ec2_images.rb +444 -0
  17. data/lib/ec2/right_ec2_instances.rb +797 -0
  18. data/lib/ec2/right_ec2_monitoring.rb +70 -0
  19. data/lib/ec2/right_ec2_placement_groups.rb +108 -0
  20. data/lib/ec2/right_ec2_reserved_instances.rb +243 -0
  21. data/lib/ec2/right_ec2_security_groups.rb +496 -0
  22. data/lib/ec2/right_ec2_spot_instances.rb +422 -0
  23. data/lib/ec2/right_ec2_tags.rb +139 -0
  24. data/lib/ec2/right_ec2_vpc.rb +598 -0
  25. data/lib/ec2/right_ec2_vpc2.rb +382 -0
  26. data/lib/ec2/right_ec2_windows_mobility.rb +84 -0
  27. data/lib/elb/right_elb_interface.rb +573 -0
  28. data/lib/emr/right_emr_interface.rb +728 -0
  29. data/lib/iam/right_iam_access_keys.rb +71 -0
  30. data/lib/iam/right_iam_groups.rb +195 -0
  31. data/lib/iam/right_iam_interface.rb +341 -0
  32. data/lib/iam/right_iam_mfa_devices.rb +67 -0
  33. data/lib/iam/right_iam_users.rb +251 -0
  34. data/lib/rds/right_rds_interface.rb +1657 -0
  35. data/lib/right_aws.rb +30 -13
  36. data/lib/route_53/right_route_53_interface.rb +641 -0
  37. data/lib/s3/right_s3.rb +108 -41
  38. data/lib/s3/right_s3_interface.rb +349 -118
  39. data/lib/sdb/active_sdb.rb +388 -54
  40. data/lib/sdb/right_sdb_interface.rb +323 -64
  41. data/lib/sns/right_sns_interface.rb +286 -0
  42. data/lib/sqs/right_sqs.rb +1 -2
  43. data/lib/sqs/right_sqs_gen2.rb +73 -17
  44. data/lib/sqs/right_sqs_gen2_interface.rb +146 -73
  45. data/lib/sqs/right_sqs_interface.rb +12 -22
  46. data/right_aws.gemspec +91 -0
  47. data/test/README.mdown +39 -0
  48. data/test/acf/test_right_acf.rb +11 -19
  49. data/test/awsbase/test_helper.rb +2 -0
  50. data/test/awsbase/test_right_awsbase.rb +11 -0
  51. data/test/ec2/test_right_ec2.rb +32 -1
  52. data/test/elb/test_helper.rb +2 -0
  53. data/test/elb/test_right_elb.rb +43 -0
  54. data/test/rds/test_helper.rb +2 -0
  55. data/test/rds/test_right_rds.rb +120 -0
  56. data/test/route_53/fixtures/a_record.xml +18 -0
  57. data/test/route_53/fixtures/alias_record.xml +18 -0
  58. data/test/route_53/test_helper.rb +2 -0
  59. data/test/route_53/test_right_route_53.rb +141 -0
  60. data/test/s3/test_right_s3.rb +176 -42
  61. data/test/s3/test_right_s3_stubbed.rb +6 -4
  62. data/test/sdb/test_active_sdb.rb +120 -19
  63. data/test/sdb/test_batch_put_attributes.rb +54 -0
  64. data/test/sdb/test_right_sdb.rb +71 -16
  65. data/test/sns/test_helper.rb +2 -0
  66. data/test/sns/test_right_sns.rb +153 -0
  67. data/test/sqs/test_right_sqs.rb +0 -6
  68. data/test/sqs/test_right_sqs_gen2.rb +104 -49
  69. data/test/ts_right_aws.rb +1 -0
  70. metadata +181 -22
@@ -81,15 +81,17 @@ class TestS3Stubbed < Test::Unit::TestCase
81
81
  def test_116_move_key
82
82
  # move a key
83
83
  Rightscale::HttpConnection.push(413, 'not found')
84
- assert @s3.move(@bucket, @key1, @bucket, @key1_new_name)
85
-
84
+ assert_raise RightAws::AwsError do
85
+ @s3.move(@bucket, @key1, @bucket, @key1_new_name)
86
+ end
86
87
  end
87
88
 
88
89
  def test_117_rename_key
89
90
  # rename a key
90
91
  Rightscale::HttpConnection.push(500, 'not found')
91
- assert @s3.rename(@bucket, @key2, @key2_new_name)
92
-
92
+ assert_raise RightAws::AwsError do
93
+ @s3.rename(@bucket, @key2, @key2_new_name)
94
+ end
93
95
  end
94
96
 
95
97
  end
@@ -1,11 +1,25 @@
1
1
  require File.dirname(__FILE__) + '/test_helper.rb'
2
2
 
3
3
  class TestSdb < Test::Unit::TestCase
4
-
5
- DOMAIN_NAME = 'right_sdb_awesome_test_domain'
6
-
4
+ DOMAIN_PREFIX = 'right_sdb_awesome_test'
5
+ CLIENT_DOMAIN = "#{DOMAIN_PREFIX}_client"
6
+ PERSON_DOMAIN = "#{DOMAIN_PREFIX}_person"
7
+
7
8
  class Client < RightAws::ActiveSdb::Base
8
- set_domain_name DOMAIN_NAME
9
+ set_domain_name CLIENT_DOMAIN
10
+ end
11
+
12
+ class Person < RightAws::ActiveSdb::Base
13
+ set_domain_name PERSON_DOMAIN
14
+
15
+ columns do
16
+ name
17
+ email
18
+ score :Integer
19
+ is_active :Boolean
20
+ registered_at :DateTime
21
+ created_at :DateTime, :default => lambda{ Time.now }
22
+ end
9
23
  end
10
24
 
11
25
  def setup
@@ -17,6 +31,13 @@ class TestSdb < Test::Unit::TestCase
17
31
  { 'name' => 'Mary', 'country' => 'USA', 'gender' => 'female', 'hobby' => ['patchwork', 'bundle jumping'] },
18
32
  { 'name' => 'Sandy', 'country' => 'Russia', 'gender' => 'female', 'hobby' => ['flowers', 'cats', 'cooking'] },
19
33
  { 'name' => 'Mary', 'country' => 'Russia', 'gender' => 'female', 'hobby' => ['flowers', 'cats', 'cooking'] } ]
34
+ @people = [
35
+ { :name => 'Yetta E. Andrews', :email => 'nulla.facilisis@metus.com', :score => 100, :is_active => true, :registered_at => Time.local(2000, 1, 1) },
36
+ { :name => 'Sybill O. Olson', :email => 'nisi.Aenean.eget@urna.com', :score => 87, :is_active => true, :registered_at => Time.local(2008, 7, 6) },
37
+ { :name => 'Isabelle K. Flynn', :email => 'velit@amet.com', :score => 98, :is_active => false, :registered_at => Time.local(2003, 5, 20) },
38
+ { :name => 'Juliet H. Witt', :email => 'egestas@pretiumaliquet.ca', :score => 72, :is_active => true, :registered_at => Time.local(2007, 2, 28) },
39
+ { :name => 'Lucy N. Christensen', :email => 'lacus.v12@stu.edu', :score => 94, :is_active => false, :registered_at => Time.local(2005, 10, 26) }
40
+ ]
20
41
  RightAws::ActiveSdb.establish_connection(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
21
42
  end
22
43
 
@@ -37,24 +58,26 @@ class TestSdb < Test::Unit::TestCase
37
58
  #---------------------------
38
59
 
39
60
  def test_00_delete_domain
40
- assert RightAws::ActiveSdb.delete_domain(DOMAIN_NAME)
61
+ assert RightAws::ActiveSdb.delete_domain(CLIENT_DOMAIN)
62
+ assert RightAws::ActiveSdb.delete_domain(PERSON_DOMAIN)
41
63
  wait SDB_DELAY, 'test 00: after domain deletion'
42
64
  end
43
65
 
44
66
  def test_01_create_domain
45
67
  # check that domain does not exist
46
- assert !RightAws::ActiveSdb.domains.include?(DOMAIN_NAME)
68
+ assert !RightAws::ActiveSdb.domains.include?(CLIENT_DOMAIN)
47
69
  # create domain
48
70
  assert Client.create_domain
71
+ assert Person.create_domain
49
72
  wait SDB_DELAY, 'test 01: after domain creation'
50
73
  # check that we have received new domain from Amazin
51
- assert RightAws::ActiveSdb.domains.include?(DOMAIN_NAME)
74
+ assert RightAws::ActiveSdb.domains.include?(CLIENT_DOMAIN)
52
75
  end
53
76
 
54
77
  def test_02_create_items
55
78
  # check that DB is empty
56
79
  clients = Client.find(:all)
57
- assert clients.blank?
80
+ assert clients.right_blank?
58
81
  # put some clients there
59
82
  @clients.each do |client|
60
83
  Client.create client
@@ -107,6 +130,10 @@ class TestSdb < Test::Unit::TestCase
107
130
  assert_raise(RightAws::ActiveSdb::ActiveSdbError) do
108
131
  Client.find(ids)
109
132
  end
133
+ # find one record by unknown id
134
+ assert_raise(RightAws::ActiveSdb::ActiveSdbError) do
135
+ Client.find('dummy_id')
136
+ end
110
137
  end
111
138
 
112
139
  def test_05_find_first
@@ -144,7 +171,7 @@ class TestSdb < Test::Unit::TestCase
144
171
  assert_equal ['Bush'], Client.find_by_post('president', :order => 'name', :auto_load => true)['name']
145
172
  assert_equal ['Putin'], Client.find_by_post('president', :order => 'name desc', :auto_load => true)['name']
146
173
  end
147
-
174
+
148
175
  def test_08_reload
149
176
  putin = Client.find_by_name('Putin')
150
177
  # attributes must be empty until reload (except 'id' field)
@@ -163,9 +190,44 @@ class TestSdb < Test::Unit::TestCase
163
190
  assert_equal ['2008'], putin['expiration']
164
191
  assert_equal ['president'], putin['post']
165
192
  end
193
+
194
+ def test_09_select
195
+ # select all records
196
+ assert_equal 7, Client.select(:all).size
197
+ # LIMIT
198
+ # 1 record
199
+ assert Client.select(:first).is_a?(Client)
200
+ # select 2 recs
201
+ assert_equal 2, Client.select(:all, :limit => 2).size
202
+ # ORDER
203
+ # select all recs ordered by 'expration' (must find only recs where 'expration' attribute presents)
204
+ result = Client.select(:all, :order => 'expiration')
205
+ assert_equal 3, result.size
206
+ assert_equal ['2008', '2009', '2012'], result.map{ |c| c['expiration'] }.flatten
207
+ # desc order
208
+ result = Client.select(:all, :order => 'expiration desc')
209
+ assert_equal ['2012', '2009', '2008'], result.map{ |c| c['expiration'] }.flatten
210
+ # CONDITIONS
211
+ result = Client.select(:all, :conditions => ["expiration >= ?", 2009], :order => 'name')
212
+ assert_equal ['Bush', 'Medvedev'], result.map{ |c| c['name'] }.flatten
213
+ result = Client.select(:all, :conditions => "hobby='flowers' AND gender='female'", :order => 'name')
214
+ assert_equal ['Mary', 'Sandy'], result.map{ |c| c['name'] }.flatten
215
+ # SELECT
216
+ result = Client.select(:all, :select => 'hobby', :conditions => "gender IS NOT NULL", :order => 'name')
217
+ hobbies = result.map{|c| c['hobby']}
218
+ # must return all recs
219
+ assert_equal 6, result.size
220
+ # but anly 3 of them have this field set
221
+ assert_equal 3, hobbies.compact.size
222
+ end
223
+
224
+ def test_10_select_by
225
+ assert_equal 2, Client.select_all_by_hobby('flowers').size
226
+ assert_equal 2, Client.select_all_by_hobby_and_country('flowers', 'Russia').size
227
+ assert_equal ['Putin'], Client.select_by_post_and_expiration('president','2008')['name']
228
+ end
166
229
 
167
-
168
- def test_09_save_and_put
230
+ def test_11_save_and_put
169
231
  putin = Client.find_by_name('Putin')
170
232
  putin.reload
171
233
  putin['hobby'] = 'ski'
@@ -194,7 +256,7 @@ class TestSdb < Test::Unit::TestCase
194
256
  assert ['dogs', 'ski'], new_putin['hobby'].sort
195
257
  end
196
258
 
197
- def test_10_save_and_put_attributes
259
+ def test_12_save_and_put_attributes
198
260
  putin = Client.find_by_name('Putin')
199
261
  putin.reload
200
262
  # SAVE method (replace values)
@@ -220,12 +282,16 @@ class TestSdb < Test::Unit::TestCase
220
282
  assert ['english', 'german', 'russian'], new_putin['language'].sort
221
283
  end
222
284
 
223
- def test_11_delete
285
+ def test_13_delete
224
286
  putin = Client.find_by_name('Putin')
225
287
  putin.reload
226
288
  # --- delete_values
289
+ # remove an unknown attribute
290
+ # should return an empty hash
291
+ assert_equal( {}, putin.delete_values('undefined_attribute' => 'ohoho'))
227
292
  # remove 2 languages
228
- putin.delete_values('language' => ['english', 'german'])
293
+ lang_hash = {'language' => ['english', 'german']}
294
+ assert_equal lang_hash, putin.delete_values(lang_hash)
229
295
  wait SDB_DELAY, 'test 11: after put_attributes'
230
296
  # now Putin must know only russian lang
231
297
  new_putin = Client.find_by_name('Putin')
@@ -244,12 +310,47 @@ class TestSdb < Test::Unit::TestCase
244
310
  wait SDB_DELAY, 'test 11: after delete item'
245
311
  assert_nil Client.find_by_name('Putin')
246
312
  end
247
-
248
- def test_12_delete_domain
313
+
314
+ def test_14_dynamic_attribute_accessors
315
+ bush = Client.find_by_name('Bush')
316
+ bush.reload
317
+ assert_nothing_raised {
318
+ assert_equal ['male'], bush.gender
319
+ bush.name = 'George'
320
+ assert_equal ['George'], bush.name
321
+ }
322
+ assert_raise(NoMethodError) { bush.flarble }
323
+ end
324
+
325
+ def test_15_column_emulation
326
+ @people.each do |person|
327
+ Person.create person
328
+ end
329
+ wait SDB_DELAY, 'test 15: after people creation'
330
+ person = Person.find_by_email 'nulla.facilisis@metus.com'
331
+ person.reload
332
+
333
+ assert_equal 'Yetta E. Andrews', person.name
334
+ assert_equal DateTime, person.registered_at.class
335
+ assert person['registered_at'].is_a?(DateTime)
336
+ assert person[:registered_at].is_a?(DateTime)
337
+
338
+ assert ! person[:created_at].nil?
339
+ assert_equal DateTime, person.created_at.class
340
+ assert person['created_at'].is_a?(DateTime)
341
+ assert person[:created_at].is_a?(DateTime)
342
+
343
+ assert person.is_active
344
+
345
+ assert_equal 100, person.score
346
+ end
347
+
348
+ def test_999_delete_domain
249
349
  assert Client.delete_domain
250
- wait SDB_DELAY, 'test 12: after delete domain'
251
- assert_raise(Rightscale::AwsError) do
252
- Client.find :all
350
+ assert Person.delete_domain
351
+ wait SDB_DELAY, 'test 999: after delete domain'
352
+ assert_raise(Rightscale::AwsError) do
353
+ Client.find :all
253
354
  end
254
355
  end
255
356
 
@@ -0,0 +1,54 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.dirname(__FILE__) + '/test_helper.rb'
3
+
4
+ class TestSdb < Test::Unit::TestCase
5
+
6
+ def setup
7
+ STDOUT.sync = true
8
+ @domain = 'right_sdb_awesome_test_domain'
9
+ @attributes = {
10
+ 'a' => { 'foo' => '123' },
11
+ 'b' => { 'bar' => '456' }
12
+ }
13
+ # Interface instance
14
+ @sdb = Rightscale::SdbInterface.new
15
+ @sdb.delete_domain(@domain)
16
+ wait(SDB_DELAY, "after removing domain")
17
+ @sdb.create_domain(@domain)
18
+ wait(SDB_DELAY, "after recreating domain")
19
+ end
20
+
21
+ SDB_DELAY = 2
22
+
23
+ def wait(delay, msg='')
24
+ print "waiting #{delay} seconds #{msg}"
25
+ while delay>0 do
26
+ delay -= 1
27
+ print '.'
28
+ sleep 1
29
+ end
30
+ puts
31
+ end
32
+
33
+ def test_batch_put_attributes
34
+ @sdb.batch_put_attributes(@domain, @attributes)
35
+ wait(SDB_DELAY, "after putting attributes")
36
+ a = @sdb.get_attributes(@domain, 'a')[:attributes]
37
+ b = @sdb.get_attributes(@domain, 'b')[:attributes]
38
+ assert_equal( {'foo' => ['123']}, a)
39
+ assert_equal( {'bar' => ['456']}, b)
40
+
41
+ # Replace = false
42
+ @sdb.batch_put_attributes(@domain, { 'a' => {'foo' => ['789']}})
43
+ wait(SDB_DELAY, "after putting attributes")
44
+ a = @sdb.get_attributes(@domain, 'a')[:attributes]
45
+ assert_equal ['123', '789'], a['foo'].sort
46
+
47
+ # Replace = true
48
+ @sdb.batch_put_attributes(@domain, {'b' => {'bar' => ['789']}}, true)
49
+ wait(SDB_DELAY, "after putting attributes")
50
+ b = @sdb.get_attributes(@domain, 'b')[:attributes]
51
+ assert_equal ['789'], b['bar'].sort
52
+
53
+ end
54
+ end
@@ -11,7 +11,7 @@ class TestSdb < Test::Unit::TestCase
11
11
  @sdb = Rightscale::SdbInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
12
12
  end
13
13
 
14
- SDB_DELAY = 2
14
+ SDB_DELAY = 7
15
15
 
16
16
  def wait(delay, msg='')
17
17
  print "waiting #{delay} seconds #{msg}"
@@ -51,7 +51,7 @@ class TestSdb < Test::Unit::TestCase
51
51
 
52
52
  def test_03_get_attributes
53
53
  # get attributes
54
- values = @sdb.get_attributes(@domain, @item)[:attributes]['Jon'].to_a.sort
54
+ values = Array(@sdb.get_attributes(@domain, @item)[:attributes]['Jon']).sort
55
55
  # compare to original list
56
56
  assert_equal values, @attr['Jon'].sort
57
57
  end
@@ -62,7 +62,7 @@ class TestSdb < Test::Unit::TestCase
62
62
  @sdb.put_attributes @domain, @item, {'Jon' => new_value}
63
63
  wait SDB_DELAY, 'after putting attributes'
64
64
  # get attributes ('girls' must be added to already existent attributes)
65
- values = @sdb.get_attributes(@domain, @item)[:attributes]['Jon'].to_a.sort
65
+ values = Array(@sdb.get_attributes(@domain, @item)[:attributes]['Jon']).sort
66
66
  assert_equal values, (@attr['Jon'] << new_value).sort
67
67
  end
68
68
 
@@ -80,7 +80,7 @@ class TestSdb < Test::Unit::TestCase
80
80
  @sdb.put_attributes @domain, @item, {'Jon' => ['girls','vodka']}
81
81
  wait SDB_DELAY, 'after adding attributes'
82
82
  # get attributes ('girls' and 'vodka' must be added 'pub')
83
- values = @sdb.get_attributes(@domain, @item)[:attributes]['Jon'].to_a.sort
83
+ values = Array(@sdb.get_attributes(@domain, @item)[:attributes]['Jon']).sort
84
84
  assert_equal values, ['girls', 'pub', 'vodka']
85
85
  # delete a single value 'girls' from attribute 'Jon'
86
86
  @sdb.delete_attributes @domain, @item, 'Jon' => ['girls']
@@ -100,10 +100,11 @@ class TestSdb < Test::Unit::TestCase
100
100
  @sdb.put_attributes @domain, @item, {'Volodya' => ['girls','vodka']}
101
101
  wait SDB_DELAY, 'after adding attributes'
102
102
  # get attributes ('girls' and 'vodka' must be there)
103
- values = @sdb.get_attributes(@domain, @item)[:attributes]['Volodya'].to_a.sort
103
+ values = Array(@sdb.get_attributes(@domain, @item)[:attributes]['Volodya']).sort
104
104
  assert_equal values, ['girls', 'vodka']
105
105
  # delete an item
106
106
  @sdb.delete_attributes @domain, @item
107
+ wait SDB_DELAY, 'after deleting attributes'
107
108
  # get attributes (values must be empty)
108
109
  values = @sdb.get_attributes(@domain, @item)[:attributes]['Volodya']
109
110
  assert_equal values, nil
@@ -128,33 +129,52 @@ class TestSdb < Test::Unit::TestCase
128
129
  assert sdb.put_attributes(@domain, item, attributes)
129
130
  wait SDB_DELAY, 'after putting attributes'
130
131
  # get attributes
131
- values = sdb.get_attributes(@domain, item)[:attributes]['Jurgen'].to_a.sort
132
+ values = Array(sdb.get_attributes(@domain, item)[:attributes]['Jurgen']).sort
132
133
  # compare to original list
133
134
  assert_equal values, attributes['Jurgen'].sort
134
135
  # check that the request has correct signature version
135
136
  assert sdb.last_request.path.include?('SignatureVersion=0')
136
137
  end
137
-
138
- def test_10_array_of_attrs
138
+
139
+ def test_10_signature_version_1
140
+ sdb = Rightscale::SdbInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key, :signature_version => '1')
141
+ domains = nil
142
+ assert_nothing_thrown "Failed to use signature V1" do
143
+ domains = sdb.list_domains
144
+ end
145
+ assert domains
146
+ end
147
+
148
+ def test_11_signature_version_1
149
+ sdb = Rightscale::SdbInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key, :signature_version => '2')
150
+ domains = nil
151
+ assert_nothing_thrown "Failed to use signature V2" do
152
+ domains = sdb.list_domains
153
+ end
154
+ assert domains
155
+ end
156
+
157
+ def test_12_array_of_attrs
139
158
  item = 'multiples'
140
159
  assert_nothing_thrown "Failed to put multiple attrs" do
141
160
  @sdb.put_attributes(@domain, item, {:one=>1, :two=>2, :three=>3})
142
161
  end
143
162
  end
144
163
 
145
- def test_11_zero_len_attrs
164
+ def test_13_zero_len_attrs
146
165
  item = 'zeroes'
147
166
  assert_nothing_thrown "Failed to put zero-length attributes" do
148
167
  @sdb.put_attributes(@domain, item, {:one=>"", :two=>"", :three=>""})
149
168
  end
150
169
  end
151
170
 
152
- def test_12_nil_attrs
171
+ def test_14_nil_attrs
153
172
  item = 'nils'
154
173
  res = nil
155
174
  assert_nothing_thrown do
156
175
  @sdb.put_attributes(@domain, item, {:one=>nil, :two=>nil, :three=>'chunder'})
157
176
  end
177
+ wait SDB_DELAY, 'after putting attributes'
158
178
  assert_nothing_thrown do
159
179
  res = @sdb.get_attributes(@domain, item)
160
180
  end
@@ -163,18 +183,19 @@ class TestSdb < Test::Unit::TestCase
163
183
  assert_not_nil(res[:attributes]['three'][0])
164
184
  end
165
185
 
166
- def test_13_url_escape
186
+ def test_15_url_escape
167
187
  item = 'urlescapes'
168
188
  content = {:a=>"one & two & three",
169
189
  :b=>"one ? two / three"}
170
190
  @sdb.put_attributes(@domain, item, content)
191
+ wait SDB_DELAY, 'after putting attributes'
171
192
 
172
193
  res = @sdb.get_attributes(@domain, item)
173
194
  assert_equal(content[:a], res[:attributes]['a'][0])
174
195
  assert_equal(content[:b], res[:attributes]['b'][0])
175
196
  end
176
197
 
177
- def test_14_put_attrs_by_post
198
+ def test_16_put_attrs_by_post
178
199
  item = 'reqgirth'
179
200
  i = 0
180
201
  sa = ""
@@ -183,16 +204,50 @@ class TestSdb < Test::Unit::TestCase
183
204
  i += 1
184
205
  end
185
206
  @sdb.put_attributes(@domain, item, {:a => sa, :b => sa, :c => sa, :d => sa, :e => sa})
207
+ wait SDB_DELAY, 'after putting attributes'
186
208
  end
187
-
209
+
210
+ def test_20_query_with_atributes
211
+ response = @sdb.query_with_attributes(@domain)
212
+ # convers response to a hash representation
213
+ items = {};
214
+ response[:items].each{ |item| items.merge!(item) }
215
+ # check we have receied all 5 items each full of attributes
216
+ assert_equal 6, items.keys.size
217
+ assert items['toys'].size > 0
218
+ assert items['nils'].size > 0
219
+ assert items['urlescapes'].size > 0
220
+ assert items['multiples'].size > 0
221
+ assert items['reqgirth'].size > 0
222
+ assert items['zeroes'].size > 0
223
+ # fetch only Jon's attributes from all items
224
+ response = @sdb.query_with_attributes(@domain,['Jon'])
225
+ items = {};
226
+ response[:items].each{ |item| items.merge!(item) }
227
+ # check we have receied all 5 items
228
+ # check we have receied all 5 items, but only 'toys' has attributes
229
+ puts items.inspect
230
+ assert_equal 2, items['toys']['Jon'].size
231
+ assert_equal 0, items['nils'].size
232
+ assert_equal 0, items['urlescapes'].size
233
+ assert_equal 0, items['multiples'].size
234
+ assert_equal 0, items['reqgirth'].size
235
+ assert_equal 0, items['zeroes'].size
236
+ # kust Jurgen's attriburs
237
+ response = @sdb.query_with_attributes(@domain,['Jurgen'], "['Jurgen'='piglet']")
238
+ items = {};
239
+ response[:items].each{ |item| items.merge!(item) }
240
+ # check we have receied an only item
241
+ assert_equal 1, items.keys.size
242
+ assert_equal ["chickabiddy", "kitten", "piglet", "puppy"], items['toys']['Jurgen'].sort
243
+ end
244
+
188
245
  # Keep this test last, because it deletes the domain...
189
- def test_20_delete_domain
246
+ def test_21_delete_domain
190
247
  assert @sdb.delete_domain(@domain), 'delete_domain fail'
191
248
  wait SDB_DELAY, 'after domain deletion'
192
249
  # check that domain does not exist
193
250
  assert !@sdb.list_domains[:domains].include?(@domain)
194
251
  end
195
252
 
196
-
197
-
198
253
  end