kerryb-right_aws 1.7.6 → 1.10.1
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.
- data/History.txt +78 -1
- data/Manifest.txt +3 -1
- data/README.txt +28 -8
- data/Rakefile +23 -7
- data/lib/acf/right_acf_interface.rb +379 -0
- data/lib/awsbase/right_awsbase.rb +150 -12
- data/lib/ec2/right_ec2.rb +595 -77
- data/lib/right_aws.rb +3 -3
- data/lib/s3/right_s3_interface.rb +3 -3
- data/lib/sdb/active_sdb.rb +267 -32
- data/lib/sdb/right_sdb_interface.rb +272 -48
- data/lib/sqs/right_sqs.rb +8 -0
- data/lib/sqs/right_sqs_gen2.rb +8 -0
- data/lib/sqs/right_sqs_gen2_interface.rb +17 -22
- data/lib/sqs/right_sqs_interface.rb +7 -13
- data/test/acf/test_helper.rb +2 -0
- data/test/acf/test_right_acf.rb +146 -0
- data/test/ec2/test_right_ec2.rb +32 -0
- data/test/s3/test_right_s3.rb +41 -10
- data/test/sdb/test_active_sdb.rb +59 -9
- data/test/sdb/test_helper.rb +1 -0
- data/test/sdb/test_right_sdb.rb +106 -6
- data/test/ts_right_aws.rb +1 -0
- metadata +30 -21
- data/lib/awsbase/file_fix.rb +0 -33
@@ -0,0 +1,146 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestAcf < Test::Unit::TestCase
|
4
|
+
|
5
|
+
RIGHT_OBJECT_TEXT = 'Right test message'
|
6
|
+
|
7
|
+
STDOUT.sync = true
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@acf= Rightscale::AcfInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
|
11
|
+
@s3 = Rightscale::S3.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
|
12
|
+
@bucket_name = "right-acf-awesome-test-bucket-0001"
|
13
|
+
@bucket_domain = "#{@bucket_name}.s3.amazonaws.com"
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_01_list_distributions_part1
|
17
|
+
distributions = nil
|
18
|
+
assert_nothing_raised(Rightscale::AwsError) do
|
19
|
+
distributions = @acf.list_distributions
|
20
|
+
end
|
21
|
+
assert distributions.is_a?(Array)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_02_try_to_create_for_bad_bucket
|
25
|
+
# a bucket does not exist
|
26
|
+
assert_raise(Rightscale::AwsError) do
|
27
|
+
@acf.create_distribution("right-cloudfront-awesome-test-bucket-not-exist", "Mustn't to be born", true)
|
28
|
+
end
|
29
|
+
# a bucket is not a domain naming complied guy
|
30
|
+
bucket_name = 'right_cloudfront_awesome_test_bucket_BAD'
|
31
|
+
@s3.bucket(bucket_name, :create)
|
32
|
+
assert_raise(Rightscale::AwsError) do
|
33
|
+
@acf.create_distribution(bucket_name, "Mustn't to be born", true)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_03_create
|
38
|
+
comment = 'WooHoo!!!'
|
39
|
+
# create a test bucket
|
40
|
+
@s3.bucket(@bucket_name, :create)
|
41
|
+
# create a distribution
|
42
|
+
distribution = @acf.create_distribution(@bucket_domain, comment, true)
|
43
|
+
assert_equal comment, distribution[:comment]
|
44
|
+
assert distribution[:cnames].size == 0
|
45
|
+
assert distribution[:enabled]
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_04_list_distributions_part2
|
49
|
+
distributions = @acf.list_distributions
|
50
|
+
assert distributions.size > 0
|
51
|
+
end
|
52
|
+
|
53
|
+
def get_test_distribution
|
54
|
+
@acf.list_distributions.select{ |d| d[:origin] == @bucket_domain }.first
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_05_get_distribution
|
58
|
+
old = get_test_distribution
|
59
|
+
assert_nothing_raised do
|
60
|
+
@acf.get_distribution(old[:aws_id])
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_06_get_and_set_config
|
65
|
+
config = nil
|
66
|
+
old = get_test_distribution
|
67
|
+
assert_nothing_raised do
|
68
|
+
config = @acf.get_distribution_config(old[:aws_id])
|
69
|
+
end
|
70
|
+
# change a config
|
71
|
+
config[:enabled] = false
|
72
|
+
config[:cnames] << 'x1.myawesomesite.com'
|
73
|
+
config[:cnames] << 'x2.myawesomesite.com'
|
74
|
+
# set config
|
75
|
+
set_config_result = nil
|
76
|
+
assert_nothing_raised do
|
77
|
+
set_config_result = @acf.set_distribution_config(old[:aws_id], config)
|
78
|
+
end
|
79
|
+
assert set_config_result
|
80
|
+
# reget the config and check
|
81
|
+
new_config = nil
|
82
|
+
assert_nothing_raised do
|
83
|
+
new_config = @acf.get_distribution_config(old[:aws_id])
|
84
|
+
end
|
85
|
+
assert !new_config[:enabled]
|
86
|
+
assert_equal new_config[:cnames].sort, ['x1.myawesomesite.com', 'x2.myawesomesite.com']
|
87
|
+
assert_not_equal config[:e_tag], new_config[:e_tag]
|
88
|
+
|
89
|
+
# try to update the old config again (must fail because ETAG has changed)
|
90
|
+
assert_raise(Rightscale::AwsError) do
|
91
|
+
@acf.set_distribution_config(old[:aws_id], config)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
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
|
+
def test_08_delete_distribution
|
109
|
+
# we need ETAG so use get_distribution
|
110
|
+
distribution = @acf.get_distribution(get_test_distribution[:aws_id])
|
111
|
+
# try to delete a distribution
|
112
|
+
# should fail because
|
113
|
+
if distribution[:status] == 'InProgress'
|
114
|
+
# should fail because the distribution is not deployed yet
|
115
|
+
assert_raise(Rightscale::AwsError) do
|
116
|
+
@acf.delete_distribution(distribution[:aws_id], distribution[:e_tag])
|
117
|
+
end
|
118
|
+
# wait for a deployed state
|
119
|
+
print "waiting up to 5 min while the distribution is being deployed: "
|
120
|
+
100.times do
|
121
|
+
print '.'
|
122
|
+
distribution = @acf.get_distribution(distribution[:aws_id])
|
123
|
+
if distribution[:status] == 'Deployed'
|
124
|
+
print ' done'
|
125
|
+
break
|
126
|
+
end
|
127
|
+
sleep 3
|
128
|
+
end
|
129
|
+
puts
|
130
|
+
end
|
131
|
+
|
132
|
+
# only disabled and deployed distribution can be deleted
|
133
|
+
assert_equal 'Deployed', distribution[:status]
|
134
|
+
assert !distribution[:enabled]
|
135
|
+
|
136
|
+
# delete the distribution
|
137
|
+
assert_nothing_raised do
|
138
|
+
@acf.delete_distribution(distribution[:aws_id], distribution[:e_tag])
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_09_drop_bucket
|
143
|
+
assert @s3.bucket(@bucket_name).delete
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
data/test/ec2/test_right_ec2.rb
CHANGED
@@ -72,5 +72,37 @@ class TestEc2 < Test::Unit::TestCase
|
|
72
72
|
# check that the request has correct signature version
|
73
73
|
assert ec2.last_request.path.include?('SignatureVersion=0')
|
74
74
|
end
|
75
|
+
|
76
|
+
def test_11_regions
|
77
|
+
regions = nil
|
78
|
+
assert_nothing_raised do
|
79
|
+
regions = @ec2.describe_regions
|
80
|
+
end
|
81
|
+
# check we got more that 0 regions
|
82
|
+
assert regions.size > 0
|
83
|
+
# check an access to regions
|
84
|
+
regions.each do |region|
|
85
|
+
regional_ec2 = Rightscale::Ec2.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key, :region => region)
|
86
|
+
# do we have a correct endpoint server?
|
87
|
+
assert_equal "#{region}.ec2.amazonaws.com", regional_ec2.params[:server]
|
88
|
+
# get a list of images from every region
|
89
|
+
images = nil
|
90
|
+
assert_nothing_raised do
|
91
|
+
images = regional_ec2.describe_regions
|
92
|
+
end
|
93
|
+
# every region must have images
|
94
|
+
assert images.size > 0
|
95
|
+
end
|
96
|
+
end
|
75
97
|
|
98
|
+
def test_12_endpoint_url
|
99
|
+
ec2 = Rightscale::Ec2.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key, :endpoint_url => 'a://b.c:0/d/', :region => 'z')
|
100
|
+
# :endpoint_url has a priority hence :region should be ommitted
|
101
|
+
assert_equal 'a', ec2.params[:protocol]
|
102
|
+
assert_equal 'b.c', ec2.params[:server]
|
103
|
+
assert_equal '/d/', ec2.params[:service]
|
104
|
+
assert_equal 0, ec2.params[:port]
|
105
|
+
assert_nil ec2.params[:region]
|
106
|
+
end
|
107
|
+
|
76
108
|
end
|
data/test/s3/test_right_s3.rb
CHANGED
@@ -6,7 +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 = '
|
9
|
+
@bucket = 'right_s3_awesome_test_bucket_000A1'
|
10
|
+
@bucket2 = 'right_s3_awesome_test_bucket_000A2'
|
10
11
|
@key1 = 'test/woohoo1/'
|
11
12
|
@key2 = 'test1/key/woohoo2'
|
12
13
|
@key3 = 'test2/A%B@C_D&E?F+G=H"I'
|
@@ -72,9 +73,9 @@ class TestS3 < Test::Unit::TestCase
|
|
72
73
|
def test_08_keys
|
73
74
|
keys = @s3.list_bucket(@bucket).map{|b| b[:key]}
|
74
75
|
assert_equal keys.size, 3, "There should be 3 keys"
|
75
|
-
assert(keys.include?
|
76
|
-
assert(keys.include?
|
77
|
-
assert(keys.include?
|
76
|
+
assert(keys.include?(@key1))
|
77
|
+
assert(keys.include?(@key2))
|
78
|
+
assert(keys.include?(@key3))
|
78
79
|
end
|
79
80
|
|
80
81
|
def test_09_copy_key
|
@@ -120,18 +121,26 @@ class TestS3 < Test::Unit::TestCase
|
|
120
121
|
keys = @s3.list_bucket(@bucket).map{|b| b[:key]}
|
121
122
|
assert(!keys.include?(@key2))
|
122
123
|
end
|
123
|
-
|
124
|
-
|
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
|
125
131
|
assert_equal 1, @s3.delete_folder(@bucket, 'test').size, "Only one key(#{@key1}) must be deleted!"
|
126
132
|
end
|
127
|
-
|
128
|
-
def
|
133
|
+
|
134
|
+
def test_14_delete_bucket
|
129
135
|
assert_raise(Rightscale::AwsError) { @s3.delete_bucket(@bucket) }
|
130
136
|
assert @s3.clear_bucket(@bucket), 'Clear_bucket fail'
|
131
137
|
assert_equal 0, @s3.list_bucket(@bucket).size, 'Bucket must be empty'
|
132
138
|
assert @s3.delete_bucket(@bucket)
|
133
139
|
assert !@s3.list_all_my_buckets.map{|bucket| bucket[:name]}.include?(@bucket), "#{@bucket} must not exist"
|
134
140
|
end
|
141
|
+
|
142
|
+
|
143
|
+
|
135
144
|
|
136
145
|
#---------------------------
|
137
146
|
# Rightscale::S3 classes
|
@@ -312,10 +321,10 @@ class TestS3 < Test::Unit::TestCase
|
|
312
321
|
assert grantee.apply
|
313
322
|
assert !grantee.exists?
|
314
323
|
# Check multiple perms assignment
|
315
|
-
assert grantee.grant
|
324
|
+
assert grantee.grant('FULL_CONTROL', 'READ', 'WRITE')
|
316
325
|
assert_equal ['FULL_CONTROL','READ','WRITE'].sort, grantee.perms.sort
|
317
326
|
# Check multiple perms removal
|
318
|
-
assert grantee.revoke
|
327
|
+
assert grantee.revoke('FULL_CONTROL', 'WRITE')
|
319
328
|
assert_equal ['READ'], grantee.perms
|
320
329
|
# check 'Drop' method
|
321
330
|
assert grantee.drop
|
@@ -384,5 +393,27 @@ class TestS3 < Test::Unit::TestCase
|
|
384
393
|
RightAws::S3Interface.amazon_problems= nil
|
385
394
|
assert_nil(RightAws::S3Interface.amazon_problems)
|
386
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
|
387
418
|
|
388
419
|
end
|
data/test/sdb/test_active_sdb.rb
CHANGED
@@ -107,6 +107,10 @@ class TestSdb < Test::Unit::TestCase
|
|
107
107
|
assert_raise(RightAws::ActiveSdb::ActiveSdbError) do
|
108
108
|
Client.find(ids)
|
109
109
|
end
|
110
|
+
# find one record by unknown id
|
111
|
+
assert_raise(RightAws::ActiveSdb::ActiveSdbError) do
|
112
|
+
Client.find('dummy_id')
|
113
|
+
end
|
110
114
|
end
|
111
115
|
|
112
116
|
def test_05_find_first
|
@@ -127,6 +131,11 @@ class TestSdb < Test::Unit::TestCase
|
|
127
131
|
assert_equal 2, Client.find_all_by_post_and_country('president','Russia').size
|
128
132
|
# find all women in USA that love flowers
|
129
133
|
assert_equal 2, Client.find_all_by_gender_and_country_and_hobby('female','Russia','flowers').size
|
134
|
+
# order and auto_load:
|
135
|
+
clients = Client.find_all_by_post('president', :order => 'name', :auto_load => true)
|
136
|
+
assert_equal [['Bush'], ['Medvedev'], ['Putin']], clients.map{|c| c['name']}
|
137
|
+
clients = Client.find_all_by_post('president', :order => 'name desc', :auto_load => true)
|
138
|
+
assert_equal [['Putin'], ['Medvedev'], ['Bush']], clients.map{|c| c['name']}
|
130
139
|
end
|
131
140
|
|
132
141
|
def test_07_find_by_helpers
|
@@ -135,9 +144,11 @@ class TestSdb < Test::Unit::TestCase
|
|
135
144
|
# find any russian president
|
136
145
|
assert Client.find_by_post_and_country('president','Russia')
|
137
146
|
# find Mary in Russia that loves flowers
|
138
|
-
|
147
|
+
# order and auto_load:
|
148
|
+
assert_equal ['Bush'], Client.find_by_post('president', :order => 'name', :auto_load => true)['name']
|
149
|
+
assert_equal ['Putin'], Client.find_by_post('president', :order => 'name desc', :auto_load => true)['name']
|
139
150
|
end
|
140
|
-
|
151
|
+
|
141
152
|
def test_08_reload
|
142
153
|
putin = Client.find_by_name('Putin')
|
143
154
|
# attributes must be empty until reload (except 'id' field)
|
@@ -156,9 +167,44 @@ class TestSdb < Test::Unit::TestCase
|
|
156
167
|
assert_equal ['2008'], putin['expiration']
|
157
168
|
assert_equal ['president'], putin['post']
|
158
169
|
end
|
170
|
+
|
171
|
+
def test_09_select
|
172
|
+
# select all records
|
173
|
+
assert_equal 7, Client.select(:all).size
|
174
|
+
# LIMIT
|
175
|
+
# 1 record
|
176
|
+
assert Client.select(:first).is_a?(Client)
|
177
|
+
# select 2 recs
|
178
|
+
assert_equal 2, Client.select(:all, :limit => 2).size
|
179
|
+
# ORDER
|
180
|
+
# select all recs ordered by 'expration' (must find only recs where 'expration' attribute presents)
|
181
|
+
result = Client.select(:all, :order => 'expiration')
|
182
|
+
assert_equal 3, result.size
|
183
|
+
assert_equal ['2008', '2009', '2012'], result.map{ |c| c['expiration'] }.flatten
|
184
|
+
# desc order
|
185
|
+
result = Client.select(:all, :order => 'expiration desc')
|
186
|
+
assert_equal ['2012', '2009', '2008'], result.map{ |c| c['expiration'] }.flatten
|
187
|
+
# CONDITIONS
|
188
|
+
result = Client.select(:all, :conditions => ["expiration >= ?", 2009], :order => 'name')
|
189
|
+
assert_equal ['Bush', 'Medvedev'], result.map{ |c| c['name'] }.flatten
|
190
|
+
result = Client.select(:all, :conditions => "hobby='flowers' AND gender='female'", :order => 'name')
|
191
|
+
assert_equal ['Mary', 'Sandy'], result.map{ |c| c['name'] }.flatten
|
192
|
+
# SELECT
|
193
|
+
result = Client.select(:all, :select => 'hobby', :conditions => "gender IS NOT NULL", :order => 'name')
|
194
|
+
hobbies = result.map{|c| c['hobby']}
|
195
|
+
# must return all recs
|
196
|
+
assert_equal 6, result.size
|
197
|
+
# but anly 3 of them have this field set
|
198
|
+
assert_equal 3, hobbies.compact.size
|
199
|
+
end
|
200
|
+
|
201
|
+
def test_10_select_by
|
202
|
+
assert_equal 2, Client.select_all_by_hobby('flowers').size
|
203
|
+
assert_equal 2, Client.select_all_by_hobby_and_country('flowers', 'Russia').size
|
204
|
+
assert_equal ['Putin'], Client.select_by_post_and_expiration('president','2008')['name']
|
205
|
+
end
|
159
206
|
|
160
|
-
|
161
|
-
def test_09_save_and_put
|
207
|
+
def test_11_save_and_put
|
162
208
|
putin = Client.find_by_name('Putin')
|
163
209
|
putin.reload
|
164
210
|
putin['hobby'] = 'ski'
|
@@ -187,7 +233,7 @@ class TestSdb < Test::Unit::TestCase
|
|
187
233
|
assert ['dogs', 'ski'], new_putin['hobby'].sort
|
188
234
|
end
|
189
235
|
|
190
|
-
def
|
236
|
+
def test_12_save_and_put_attributes
|
191
237
|
putin = Client.find_by_name('Putin')
|
192
238
|
putin.reload
|
193
239
|
# SAVE method (replace values)
|
@@ -213,12 +259,16 @@ class TestSdb < Test::Unit::TestCase
|
|
213
259
|
assert ['english', 'german', 'russian'], new_putin['language'].sort
|
214
260
|
end
|
215
261
|
|
216
|
-
def
|
262
|
+
def test_13_delete
|
217
263
|
putin = Client.find_by_name('Putin')
|
218
264
|
putin.reload
|
219
265
|
# --- delete_values
|
266
|
+
# remove an unknown attribute
|
267
|
+
# should return an empty hash
|
268
|
+
assert_equal( {}, putin.delete_values('undefined_attribute' => 'ohoho'))
|
220
269
|
# remove 2 languages
|
221
|
-
|
270
|
+
lang_hash = {'language' => ['english', 'german']}
|
271
|
+
assert_equal lang_hash, putin.delete_values(lang_hash)
|
222
272
|
wait SDB_DELAY, 'test 11: after put_attributes'
|
223
273
|
# now Putin must know only russian lang
|
224
274
|
new_putin = Client.find_by_name('Putin')
|
@@ -226,7 +276,7 @@ class TestSdb < Test::Unit::TestCase
|
|
226
276
|
assert ['russian'], new_putin['language'].sort
|
227
277
|
# --- delete_attributes
|
228
278
|
putin.delete_attributes('language', 'hobby')
|
229
|
-
wait SDB_DELAY, 'test 11: after
|
279
|
+
wait SDB_DELAY, 'test 11: after delete_attributes'
|
230
280
|
# trash hoddy and langs
|
231
281
|
new_putin = Client.find_by_name('Putin')
|
232
282
|
new_putin.reload
|
@@ -238,7 +288,7 @@ class TestSdb < Test::Unit::TestCase
|
|
238
288
|
assert_nil Client.find_by_name('Putin')
|
239
289
|
end
|
240
290
|
|
241
|
-
def
|
291
|
+
def test_14_delete_domain
|
242
292
|
assert Client.delete_domain
|
243
293
|
wait SDB_DELAY, 'test 12: after delete domain'
|
244
294
|
assert_raise(Rightscale::AwsError) do
|
data/test/sdb/test_helper.rb
CHANGED
data/test/sdb/test_right_sdb.rb
CHANGED
@@ -97,15 +97,15 @@ class TestSdb < Test::Unit::TestCase
|
|
97
97
|
end
|
98
98
|
|
99
99
|
def test_07_delete_item
|
100
|
-
@sdb.put_attributes @domain, @item, {'
|
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]['
|
103
|
+
values = @sdb.get_attributes(@domain, @item)[:attributes]['Volodya'].to_a.sort
|
104
104
|
assert_equal values, ['girls', 'vodka']
|
105
105
|
# delete an item
|
106
106
|
@sdb.delete_attributes @domain, @item
|
107
107
|
# get attributes (values must be empty)
|
108
|
-
values = @sdb.get_attributes(@domain, @item)[:attributes]['
|
108
|
+
values = @sdb.get_attributes(@domain, @item)[:attributes]['Volodya']
|
109
109
|
assert_equal values, nil
|
110
110
|
end
|
111
111
|
|
@@ -121,6 +121,7 @@ class TestSdb < Test::Unit::TestCase
|
|
121
121
|
def test_09_signature_version_0
|
122
122
|
sdb = Rightscale::SdbInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key, :signature_version => '0')
|
123
123
|
item = 'toys'
|
124
|
+
# TODO: need to change the below test. I think Juergen's intention was to include some umlauts in the values
|
124
125
|
# put attributes
|
125
126
|
# mhhh... Not sure how to translate this: hölzchehn klötzchen grÃŒnspan buÃe... Lets assume this is:
|
126
127
|
attributes = { 'Jurgen' => %w{kitten puppy chickabiddy piglet} }
|
@@ -133,15 +134,114 @@ class TestSdb < Test::Unit::TestCase
|
|
133
134
|
# check that the request has correct signature version
|
134
135
|
assert sdb.last_request.path.include?('SignatureVersion=0')
|
135
136
|
end
|
137
|
+
|
138
|
+
def test_10_signature_version_1
|
139
|
+
sdb = Rightscale::SdbInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key, :signature_version => '1')
|
140
|
+
domains = nil
|
141
|
+
assert_nothing_thrown "Failed to use signature V1" do
|
142
|
+
domains = sdb.list_domains
|
143
|
+
end
|
144
|
+
assert domains
|
145
|
+
end
|
146
|
+
|
147
|
+
def test_11_signature_version_1
|
148
|
+
sdb = Rightscale::SdbInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key, :signature_version => '2')
|
149
|
+
domains = nil
|
150
|
+
assert_nothing_thrown "Failed to use signature V2" do
|
151
|
+
domains = sdb.list_domains
|
152
|
+
end
|
153
|
+
assert domains
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_12_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_13_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
|
136
169
|
|
170
|
+
def test_14_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
|
+
assert_nothing_thrown do
|
177
|
+
res = @sdb.get_attributes(@domain, item)
|
178
|
+
end
|
179
|
+
assert_nil(res[:attributes]['one'][0])
|
180
|
+
assert_nil(res[:attributes]['two'][0])
|
181
|
+
assert_not_nil(res[:attributes]['three'][0])
|
182
|
+
end
|
183
|
+
|
184
|
+
def test_15_url_escape
|
185
|
+
item = 'urlescapes'
|
186
|
+
content = {:a=>"one & two & three",
|
187
|
+
:b=>"one ? two / three"}
|
188
|
+
@sdb.put_attributes(@domain, item, content)
|
189
|
+
|
190
|
+
res = @sdb.get_attributes(@domain, item)
|
191
|
+
assert_equal(content[:a], res[:attributes]['a'][0])
|
192
|
+
assert_equal(content[:b], res[:attributes]['b'][0])
|
193
|
+
end
|
194
|
+
|
195
|
+
def test_16_put_attrs_by_post
|
196
|
+
item = 'reqgirth'
|
197
|
+
i = 0
|
198
|
+
sa = ""
|
199
|
+
while(i < 64) do
|
200
|
+
sa += "aaaaaaaa"
|
201
|
+
i += 1
|
202
|
+
end
|
203
|
+
@sdb.put_attributes(@domain, item, {:a => sa, :b => sa, :c => sa, :d => sa, :e => sa})
|
204
|
+
end
|
205
|
+
|
206
|
+
def test_20_query_with_atributes
|
207
|
+
response = @sdb.query_with_attributes(@domain)
|
208
|
+
# convers response to a hash representation
|
209
|
+
items = {};
|
210
|
+
response[:items].each{ |item| items.merge!(item) }
|
211
|
+
# check we have receied all 5 items each full of attributes
|
212
|
+
assert_equal 5, items.keys.size
|
213
|
+
assert items['toys'].size > 0
|
214
|
+
assert items['nils'].size > 0
|
215
|
+
assert items['urlescapes'].size > 0
|
216
|
+
assert items['multiples'].size > 0
|
217
|
+
assert items['reqgirth'].size > 0
|
218
|
+
# fetch only Jon's attributes from all items
|
219
|
+
response = @sdb.query_with_attributes(@domain,['Jon'])
|
220
|
+
items = {};
|
221
|
+
response[:items].each{ |item| items.merge!(item) }
|
222
|
+
# check we have receied all 5 items
|
223
|
+
# check we have receied all 5 items, but only 'toys' has attributes
|
224
|
+
puts items.inspect
|
225
|
+
assert_equal 2, items['toys']['Jon'].size
|
226
|
+
assert_equal 0, items['nils'].size
|
227
|
+
assert_equal 0, items['urlescapes'].size
|
228
|
+
assert_equal 0, items['multiples'].size
|
229
|
+
assert_equal 0, items['reqgirth'].size
|
230
|
+
# kust Jurgen's attriburs
|
231
|
+
response = @sdb.query_with_attributes(@domain,['Jurgen'], "['Jurgen'='piglet']")
|
232
|
+
items = {};
|
233
|
+
response[:items].each{ |item| items.merge!(item) }
|
234
|
+
# check we have receied an only item
|
235
|
+
assert_equal 1, items.keys.size
|
236
|
+
assert_equal ["chickabiddy", "kitten", "piglet", "puppy"], items['toys']['Jurgen'].sort
|
237
|
+
end
|
238
|
+
|
137
239
|
# Keep this test last, because it deletes the domain...
|
138
|
-
def
|
240
|
+
def test_21_delete_domain
|
139
241
|
assert @sdb.delete_domain(@domain), 'delete_domain fail'
|
140
242
|
wait SDB_DELAY, 'after domain deletion'
|
141
243
|
# check that domain does not exist
|
142
244
|
assert !@sdb.list_domains[:domains].include?(@domain)
|
143
245
|
end
|
144
246
|
|
145
|
-
|
146
|
-
|
147
247
|
end
|
data/test/ts_right_aws.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kerryb-right_aws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.10.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- RightScale, Inc.
|
@@ -9,31 +9,36 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-10-28 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: right_http_connection
|
17
17
|
type: :runtime
|
18
18
|
version_requirement:
|
19
19
|
version_requirements: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 1.2.
|
23
|
+
version: 1.2.4
|
24
24
|
version:
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
25
|
+
description: |-
|
26
|
+
== DESCRIPTION:
|
27
|
+
|
28
|
+
The RightScale AWS gems have been designed to provide a robust, fast, and secure interface to Amazon EC2, EBS, S3, SQS, SDB, and CloudFront.
|
29
|
+
These gems have been used in production by RightScale since late 2006 and are being maintained to track enhancements made by Amazon.
|
30
|
+
The RightScale AWS gems comprise:
|
31
|
+
|
32
|
+
- RightAws::Ec2 -- interface to Amazon EC2 (Elastic Compute Cloud) and the
|
33
|
+
associated EBS (Elastic Block Store)
|
34
|
+
- RightAws::S3 and RightAws::S3Interface -- interface to Amazon S3 (Simple Storage Service)
|
35
|
+
- RightAws::Sqs and RightAws::SqsInterface -- interface to first-generation Amazon SQS (Simple Queue Service) (API version 2007-05-01)
|
36
|
+
- RightAws::SqsGen2 and RightAws::SqsGen2Interface -- interface to second-generation Amazon SQS (Simple Queue Service) (API version 2008-01-01)
|
37
|
+
- RightAws::SdbInterface and RightAws::ActiveSdb -- interface to Amazon SDB (SimpleDB)
|
38
|
+
- RightAws::AcfInterface -- interface to Amazon CloudFront, a content distribution service
|
39
|
+
|
40
|
+
== FEATURES:
|
41
|
+
email: rubygems@rightscale.com
|
37
42
|
executables: []
|
38
43
|
|
39
44
|
extensions: []
|
@@ -48,7 +53,6 @@ files:
|
|
48
53
|
- README.txt
|
49
54
|
- Rakefile
|
50
55
|
- lib/awsbase/benchmark_fix.rb
|
51
|
-
- lib/awsbase/file_fix.rb
|
52
56
|
- lib/awsbase/right_awsbase.rb
|
53
57
|
- lib/awsbase/support.rb
|
54
58
|
- lib/ec2/right_ec2.rb
|
@@ -61,6 +65,7 @@ files:
|
|
61
65
|
- lib/sqs/right_sqs_gen2.rb
|
62
66
|
- lib/sqs/right_sqs_gen2_interface.rb
|
63
67
|
- lib/sqs/right_sqs_interface.rb
|
68
|
+
- lib/acf/right_acf_interface.rb
|
64
69
|
- test/ec2/test_helper.rb
|
65
70
|
- test/ec2/test_right_ec2.rb
|
66
71
|
- test/http_connection.rb
|
@@ -75,8 +80,12 @@ files:
|
|
75
80
|
- test/sqs/test_right_sqs_gen2.rb
|
76
81
|
- test/test_credentials.rb
|
77
82
|
- test/ts_right_aws.rb
|
83
|
+
- test/acf/test_helper.rb
|
84
|
+
- test/acf/test_right_acf.rb
|
78
85
|
has_rdoc: true
|
79
86
|
homepage:
|
87
|
+
licenses: []
|
88
|
+
|
80
89
|
post_install_message:
|
81
90
|
rdoc_options:
|
82
91
|
- --main
|
@@ -97,10 +106,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
97
106
|
version:
|
98
107
|
requirements: []
|
99
108
|
|
100
|
-
rubyforge_project:
|
101
|
-
rubygems_version: 1.
|
109
|
+
rubyforge_project: rightscale
|
110
|
+
rubygems_version: 1.3.5
|
102
111
|
signing_key:
|
103
|
-
specification_version:
|
104
|
-
summary: Interface classes for the Amazon EC2, SQS, and
|
112
|
+
specification_version: 3
|
113
|
+
summary: Interface classes for the Amazon EC2/EBS, SQS, S3, SDB, and ACF Web Services
|
105
114
|
test_files:
|
106
115
|
- test/ts_right_aws.rb
|