right_aws 1.10.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/History.txt +53 -15
  2. data/Manifest.txt +16 -0
  3. data/README.txt +10 -9
  4. data/Rakefile +13 -15
  5. data/lib/acf/right_acf_interface.rb +224 -118
  6. data/lib/acf/right_acf_origin_access_identities.rb +230 -0
  7. data/lib/acf/right_acf_streaming_interface.rb +236 -0
  8. data/lib/acw/right_acw_interface.rb +249 -0
  9. data/lib/as/right_as_interface.rb +699 -0
  10. data/lib/awsbase/right_awsbase.rb +232 -51
  11. data/lib/awsbase/support.rb +4 -0
  12. data/lib/ec2/right_ec2.rb +33 -1375
  13. data/lib/ec2/right_ec2_ebs.rb +452 -0
  14. data/lib/ec2/right_ec2_images.rb +373 -0
  15. data/lib/ec2/right_ec2_instances.rb +755 -0
  16. data/lib/ec2/right_ec2_monitoring.rb +70 -0
  17. data/lib/ec2/right_ec2_reserved_instances.rb +170 -0
  18. data/lib/ec2/right_ec2_security_groups.rb +280 -0
  19. data/lib/ec2/right_ec2_spot_instances.rb +399 -0
  20. data/lib/ec2/right_ec2_vpc.rb +571 -0
  21. data/lib/elb/right_elb_interface.rb +496 -0
  22. data/lib/rds/right_rds_interface.rb +998 -0
  23. data/lib/right_aws.rb +18 -4
  24. data/lib/s3/right_s3.rb +39 -7
  25. data/lib/s3/right_s3_interface.rb +77 -53
  26. data/lib/sdb/active_sdb.rb +203 -11
  27. data/lib/sdb/right_sdb_interface.rb +68 -45
  28. data/lib/sqs/right_sqs_gen2.rb +73 -16
  29. data/lib/sqs/right_sqs_gen2_interface.rb +131 -51
  30. data/lib/sqs/right_sqs_interface.rb +2 -4
  31. data/test/acf/test_right_acf.rb +10 -18
  32. data/test/rds/test_helper.rb +2 -0
  33. data/test/rds/test_right_rds.rb +120 -0
  34. data/test/s3/test_right_s3.rb +10 -8
  35. data/test/s3/test_right_s3_stubbed.rb +6 -4
  36. data/test/sdb/test_active_sdb.rb +70 -12
  37. data/test/sdb/test_right_sdb.rb +13 -7
  38. data/test/sqs/test_right_sqs_gen2.rb +104 -49
  39. metadata +103 -14
@@ -56,7 +56,7 @@ module RightAws
56
56
  # {:server => 'queue.amazonaws.com' # Amazon service host: 'queue.amazonaws.com'(default)
57
57
  # :port => 443 # Amazon service port: 80 or 443(default)
58
58
  # :multi_thread => true|false # Multi-threaded (connection per each thread): true or false(default)
59
- # :signature_version => '0' # The signature version : '0' or '1'(default)
59
+ # :signature_version => '0' # The signature version : '0', '1' or '2'(default)
60
60
  # :logger => Logger Object} # Logger instance: logs to STDOUT if omitted }
61
61
  #
62
62
  def initialize(aws_access_key_id=nil, aws_secret_access_key=nil, params={})
@@ -128,9 +128,7 @@ module RightAws
128
128
  # Sends request to Amazon and parses the response
129
129
  # Raises AwsError if any banana happened
130
130
  def request_info(request, parser) # :nodoc:
131
- thread = @params[:multi_thread] ? Thread.current : Thread.main
132
- thread[:sqs_connection] ||= Rightscale::HttpConnection.new(:exception => AwsError, :logger => @logger)
133
- request_info_impl(thread[:sqs_connection], @@bench, request, parser)
131
+ request_info_impl(:sqs_connection, @@bench, request, parser)
134
132
  end
135
133
 
136
134
 
@@ -9,7 +9,7 @@ class TestAcf < Test::Unit::TestCase
9
9
  def setup
10
10
  @acf= Rightscale::AcfInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
11
11
  @s3 = Rightscale::S3.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
12
- @bucket_name = "right-acf-awesome-test-bucket-0001"
12
+ @bucket_name = "right-acf-awesome-test-bucket-xxx1"
13
13
  @bucket_domain = "#{@bucket_name}.s3.amazonaws.com"
14
14
  end
15
15
 
@@ -27,13 +27,18 @@ class TestAcf < Test::Unit::TestCase
27
27
  @acf.create_distribution("right-cloudfront-awesome-test-bucket-not-exist", "Mustn't to be born", true)
28
28
  end
29
29
  # a bucket is not a domain naming complied guy
30
- bucket_name = 'right_cloudfront_awesome_test_bucket_BAD'
30
+ bucket_name = 'right_cloudfront_awesome_test_bucket_BAD_XXX'
31
31
  @s3.bucket(bucket_name, :create)
32
32
  assert_raise(Rightscale::AwsError) do
33
33
  @acf.create_distribution(bucket_name, "Mustn't to be born", true)
34
34
  end
35
35
  end
36
36
 
37
+ def test_02_x_delete_bad_bucket
38
+ bucket_name = 'right_cloudfront_awesome_test_bucket_BAD_XXX'
39
+ @s3.bucket(bucket_name, false).delete
40
+ end
41
+
37
42
  def test_03_create
38
43
  comment = 'WooHoo!!!'
39
44
  # create a test bucket
@@ -69,8 +74,8 @@ class TestAcf < Test::Unit::TestCase
69
74
  end
70
75
  # change a config
71
76
  config[:enabled] = false
72
- config[:cnames] << 'x1.myawesomesite.com'
73
- config[:cnames] << 'x2.myawesomesite.com'
77
+ config[:cnames] << 'xxx1.myawesomesite.com'
78
+ config[:cnames] << 'xxx2.myawesomesite.com'
74
79
  # set config
75
80
  set_config_result = nil
76
81
  assert_nothing_raised do
@@ -83,7 +88,7 @@ class TestAcf < Test::Unit::TestCase
83
88
  new_config = @acf.get_distribution_config(old[:aws_id])
84
89
  end
85
90
  assert !new_config[:enabled]
86
- assert_equal new_config[:cnames].sort, ['x1.myawesomesite.com', 'x2.myawesomesite.com']
91
+ assert_equal new_config[:cnames].sort, ['xxx1.myawesomesite.com', 'xxx2.myawesomesite.com']
87
92
  assert_not_equal config[:e_tag], new_config[:e_tag]
88
93
 
89
94
  # try to update the old config again (must fail because ETAG has changed)
@@ -92,19 +97,6 @@ class TestAcf < Test::Unit::TestCase
92
97
  end
93
98
  end
94
99
 
95
- def test_07_caching
96
- # enable caching
97
- @acf.params[:cache] = true
98
- # list distributions
99
- @acf.list_distributions
100
- # list the distributions again - cache should hit
101
- assert_raise(Rightscale::AwsNoChange) do
102
- @acf.list_distributions
103
- end
104
- # disable caching
105
- @acf.params[:cache] = true
106
- end
107
-
108
100
  def test_08_delete_distribution
109
101
  # we need ETAG so use get_distribution
110
102
  distribution = @acf.get_distribution(get_test_distribution[:aws_id])
@@ -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
@@ -6,8 +6,8 @@ class TestS3 < Test::Unit::TestCase
6
6
 
7
7
  def setup
8
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'
9
+ @bucket = 'right_s3_awesome_test_bucket_000B1'
10
+ @bucket2 = 'right_s3_awesome_test_bucket_000B2'
11
11
  @key1 = 'test/woohoo1/'
12
12
  @key2 = 'test1/key/woohoo2'
13
13
  @key3 = 'test2/A%B@C_D&E?F+G=H"I'
@@ -403,17 +403,19 @@ class TestS3 < Test::Unit::TestCase
403
403
  assert grantee.grant(['READ_ACP', 'WRITE'])
404
404
 
405
405
  assert bucket.enable_logging(:targetbucket => targetbucket, :targetprefix => "loggylogs/")
406
+ sleep 10
406
407
 
407
- assert_equal(bucket.logging_info, {:enabled => true, :targetbucket => @bucket2, :targetprefix => "loggylogs/"})
408
+ assert_equal({:enabled => true, :targetbucket => @bucket2, :targetprefix => "loggylogs/"}, bucket.logging_info)
408
409
 
409
410
  assert bucket.disable_logging
410
411
 
411
412
  # check 'Drop' method
412
- assert grantee.drop
413
-
414
- # Delete bucket
415
- bucket.delete(true)
416
- targetbucket.delete(true)
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)
417
419
  end
418
420
 
419
421
  end
@@ -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,18 +58,20 @@ 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
@@ -287,12 +310,47 @@ class TestSdb < Test::Unit::TestCase
287
310
  wait SDB_DELAY, 'test 11: after delete item'
288
311
  assert_nil Client.find_by_name('Putin')
289
312
  end
290
-
291
- def test_14_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
292
349
  assert Client.delete_domain
293
- wait SDB_DELAY, 'test 12: after delete domain'
294
- assert_raise(Rightscale::AwsError) do
295
- 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
296
354
  end
297
355
  end
298
356
 
@@ -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,7 +129,7 @@ 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
@@ -173,6 +174,7 @@ class TestSdb < Test::Unit::TestCase
173
174
  assert_nothing_thrown do
174
175
  @sdb.put_attributes(@domain, item, {:one=>nil, :two=>nil, :three=>'chunder'})
175
176
  end
177
+ wait SDB_DELAY, 'after putting attributes'
176
178
  assert_nothing_thrown do
177
179
  res = @sdb.get_attributes(@domain, item)
178
180
  end
@@ -186,6 +188,7 @@ class TestSdb < Test::Unit::TestCase
186
188
  content = {:a=>"one & two & three",
187
189
  :b=>"one ? two / three"}
188
190
  @sdb.put_attributes(@domain, item, content)
191
+ wait SDB_DELAY, 'after putting attributes'
189
192
 
190
193
  res = @sdb.get_attributes(@domain, item)
191
194
  assert_equal(content[:a], res[:attributes]['a'][0])
@@ -201,6 +204,7 @@ class TestSdb < Test::Unit::TestCase
201
204
  i += 1
202
205
  end
203
206
  @sdb.put_attributes(@domain, item, {:a => sa, :b => sa, :c => sa, :d => sa, :e => sa})
207
+ wait SDB_DELAY, 'after putting attributes'
204
208
  end
205
209
 
206
210
  def test_20_query_with_atributes
@@ -209,12 +213,13 @@ class TestSdb < Test::Unit::TestCase
209
213
  items = {};
210
214
  response[:items].each{ |item| items.merge!(item) }
211
215
  # check we have receied all 5 items each full of attributes
212
- assert_equal 5, items.keys.size
216
+ assert_equal 6, items.keys.size
213
217
  assert items['toys'].size > 0
214
218
  assert items['nils'].size > 0
215
219
  assert items['urlescapes'].size > 0
216
220
  assert items['multiples'].size > 0
217
221
  assert items['reqgirth'].size > 0
222
+ assert items['zeroes'].size > 0
218
223
  # fetch only Jon's attributes from all items
219
224
  response = @sdb.query_with_attributes(@domain,['Jon'])
220
225
  items = {};
@@ -227,6 +232,7 @@ class TestSdb < Test::Unit::TestCase
227
232
  assert_equal 0, items['urlescapes'].size
228
233
  assert_equal 0, items['multiples'].size
229
234
  assert_equal 0, items['reqgirth'].size
235
+ assert_equal 0, items['zeroes'].size
230
236
  # kust Jurgen's attriburs
231
237
  response = @sdb.query_with_attributes(@domain,['Jurgen'], "['Jurgen'='piglet']")
232
238
  items = {};