dustMason-right_aws 2.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 +305 -0
  2. data/Manifest.txt +60 -0
  3. data/README.txt +165 -0
  4. data/Rakefile +112 -0
  5. data/lib/acf/right_acf_interface.rb +549 -0
  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/benchmark_fix.rb +39 -0
  12. data/lib/awsbase/right_awsbase.rb +1174 -0
  13. data/lib/awsbase/support.rb +35 -0
  14. data/lib/awsbase/version.rb +9 -0
  15. data/lib/ec2/right_ec2.rb +458 -0
  16. data/lib/ec2/right_ec2_ebs.rb +465 -0
  17. data/lib/ec2/right_ec2_images.rb +413 -0
  18. data/lib/ec2/right_ec2_instances.rb +785 -0
  19. data/lib/ec2/right_ec2_monitoring.rb +70 -0
  20. data/lib/ec2/right_ec2_placement_groups.rb +108 -0
  21. data/lib/ec2/right_ec2_reserved_instances.rb +174 -0
  22. data/lib/ec2/right_ec2_security_groups.rb +396 -0
  23. data/lib/ec2/right_ec2_spot_instances.rb +425 -0
  24. data/lib/ec2/right_ec2_tags.rb +139 -0
  25. data/lib/ec2/right_ec2_vpc.rb +583 -0
  26. data/lib/ec2/right_ec2_windows_mobility.rb +84 -0
  27. data/lib/elb/right_elb_interface.rb +571 -0
  28. data/lib/iam/right_iam_access_keys.rb +71 -0
  29. data/lib/iam/right_iam_groups.rb +195 -0
  30. data/lib/iam/right_iam_interface.rb +341 -0
  31. data/lib/iam/right_iam_mfa_devices.rb +67 -0
  32. data/lib/iam/right_iam_users.rb +251 -0
  33. data/lib/rds/right_rds_interface.rb +1309 -0
  34. data/lib/right_aws.rb +88 -0
  35. data/lib/route_53/right_route_53_interface.rb +630 -0
  36. data/lib/s3/right_s3.rb +1123 -0
  37. data/lib/s3/right_s3_interface.rb +1198 -0
  38. data/lib/sdb/active_sdb.rb +1107 -0
  39. data/lib/sdb/right_sdb_interface.rb +753 -0
  40. data/lib/sns/right_sns.rb +205 -0
  41. data/lib/sns/right_sns_interface.rb +343 -0
  42. data/lib/sqs/right_sqs.rb +387 -0
  43. data/lib/sqs/right_sqs_gen2.rb +342 -0
  44. data/lib/sqs/right_sqs_gen2_interface.rb +523 -0
  45. data/lib/sqs/right_sqs_interface.rb +593 -0
  46. data/right_aws.gemspec +91 -0
  47. data/test/acf/test_helper.rb +2 -0
  48. data/test/acf/test_right_acf.rb +138 -0
  49. data/test/awsbase/test_helper.rb +2 -0
  50. data/test/awsbase/test_right_awsbase.rb +12 -0
  51. data/test/ec2/test_helper.rb +2 -0
  52. data/test/ec2/test_right_ec2.rb +108 -0
  53. data/test/http_connection.rb +87 -0
  54. data/test/rds/test_helper.rb +2 -0
  55. data/test/rds/test_right_rds.rb +120 -0
  56. data/test/s3/test_helper.rb +2 -0
  57. data/test/s3/test_right_s3.rb +421 -0
  58. data/test/s3/test_right_s3_stubbed.rb +97 -0
  59. data/test/sdb/test_active_sdb.rb +357 -0
  60. data/test/sdb/test_batch_put_attributes.rb +54 -0
  61. data/test/sdb/test_helper.rb +3 -0
  62. data/test/sdb/test_right_sdb.rb +253 -0
  63. data/test/sns/test_helper.rb +2 -0
  64. data/test/sns/test_right_sns.rb +73 -0
  65. data/test/sqs/test_helper.rb +2 -0
  66. data/test/sqs/test_right_sqs.rb +285 -0
  67. data/test/sqs/test_right_sqs_gen2.rb +264 -0
  68. data/test/test_credentials.rb +37 -0
  69. data/test/ts_right_aws.rb +14 -0
  70. metadata +244 -0
@@ -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
@@ -0,0 +1,3 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../../lib/right_aws'
3
+ require 'sdb/active_sdb'
@@ -0,0 +1,253 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestSdb < Test::Unit::TestCase
4
+
5
+ def setup
6
+ STDOUT.sync = true
7
+ @domain = 'right_sdb_awesome_test_domain'
8
+ @item = 'toys'
9
+ @attr = { 'Jon' => %w{beer car} }
10
+ # Interface instance
11
+ @sdb = Rightscale::SdbInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
12
+ end
13
+
14
+ SDB_DELAY = 7
15
+
16
+ def wait(delay, msg='')
17
+ print "waiting #{delay} seconds #{msg}"
18
+ while delay>0 do
19
+ delay -= 1
20
+ print '.'
21
+ sleep 1
22
+ end
23
+ puts
24
+ end
25
+
26
+ #---------------------------
27
+ # Rightscale::SdbInterface
28
+ #---------------------------
29
+
30
+ def test_00_delete_domain
31
+ # delete the domain to reset all the things
32
+ assert @sdb.delete_domain(@domain), 'delete_domain fail'
33
+ wait SDB_DELAY, 'after domain deletion'
34
+ end
35
+
36
+ def test_01_create_domain
37
+ # check that domain does not exist
38
+ assert !@sdb.list_domains[:domains].include?(@domain)
39
+ # create domain
40
+ assert @sdb.create_domain(@domain), 'create_domain fail'
41
+ wait SDB_DELAY, 'after domain creation'
42
+ # check that we have received new domain from Amazin
43
+ assert @sdb.list_domains[:domains].include?(@domain)
44
+ end
45
+
46
+ def test_02_put_attributes
47
+ # put attributes
48
+ assert @sdb.put_attributes(@domain, @item, @attr)
49
+ wait SDB_DELAY, 'after putting attributes'
50
+ end
51
+
52
+ def test_03_get_attributes
53
+ # get attributes
54
+ values = Array(@sdb.get_attributes(@domain, @item)[:attributes]['Jon']).sort
55
+ # compare to original list
56
+ assert_equal values, @attr['Jon'].sort
57
+ end
58
+
59
+ def test_04_add_attributes
60
+ # add new attribute
61
+ new_value = 'girls'
62
+ @sdb.put_attributes @domain, @item, {'Jon' => new_value}
63
+ wait SDB_DELAY, 'after putting attributes'
64
+ # get attributes ('girls' must be added to already existent attributes)
65
+ values = Array(@sdb.get_attributes(@domain, @item)[:attributes]['Jon']).sort
66
+ assert_equal values, (@attr['Jon'] << new_value).sort
67
+ end
68
+
69
+ def test_05_replace_attributes
70
+ # replace attributes
71
+ @sdb.put_attributes @domain, @item, {'Jon' => 'pub'}, :replace
72
+ wait SDB_DELAY, 'after replacing attributes'
73
+ # get attributes (all must be removed except of 'pub')
74
+ values = @sdb.get_attributes(@domain, @item)[:attributes]['Jon']
75
+ assert_equal values, ['pub']
76
+ end
77
+
78
+ def test_06_delete_attribute
79
+ # add value 'girls' and 'vodka' to 'Jon'
80
+ @sdb.put_attributes @domain, @item, {'Jon' => ['girls','vodka']}
81
+ wait SDB_DELAY, 'after adding attributes'
82
+ # get attributes ('girls' and 'vodka' must be added 'pub')
83
+ values = Array(@sdb.get_attributes(@domain, @item)[:attributes]['Jon']).sort
84
+ assert_equal values, ['girls', 'pub', 'vodka']
85
+ # delete a single value 'girls' from attribute 'Jon'
86
+ @sdb.delete_attributes @domain, @item, 'Jon' => ['girls']
87
+ wait SDB_DELAY, 'after the deletion of attribute'
88
+ # get attributes ('girls' must be removed)
89
+ values = @sdb.get_attributes(@domain, @item)[:attributes]['Jon']
90
+ assert_equal values, ['pub', 'vodka']
91
+ # delete all values from attribute 'Jon'
92
+ @sdb.delete_attributes @domain, @item, ['Jon']
93
+ wait SDB_DELAY, 'after the deletion of attributes'
94
+ # get attributes (values must be empty)
95
+ values = @sdb.get_attributes(@domain, @item)[:attributes]['Jon']
96
+ assert_equal values, nil
97
+ end
98
+
99
+ def test_07_delete_item
100
+ @sdb.put_attributes @domain, @item, {'Volodya' => ['girls','vodka']}
101
+ wait SDB_DELAY, 'after adding attributes'
102
+ # get attributes ('girls' and 'vodka' must be there)
103
+ values = Array(@sdb.get_attributes(@domain, @item)[:attributes]['Volodya']).sort
104
+ assert_equal values, ['girls', 'vodka']
105
+ # delete an item
106
+ @sdb.delete_attributes @domain, @item
107
+ wait SDB_DELAY, 'after deleting attributes'
108
+ # get attributes (values must be empty)
109
+ values = @sdb.get_attributes(@domain, @item)[:attributes]['Volodya']
110
+ assert_equal values, nil
111
+ end
112
+
113
+ def test_08_query
114
+ # add some values for query
115
+ @sdb.put_attributes @domain, @item, {'Jon' => ['girls','vodka']}
116
+ wait SDB_DELAY, 'after adding attributes'
117
+ items = @sdb.query(@domain, ['[?=?]', 'Jon','vodka'])[:items]
118
+ assert_equal items.size, 1
119
+ assert_equal items.first, @item
120
+ end
121
+
122
+ def test_09_signature_version_0
123
+ sdb = Rightscale::SdbInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key, :signature_version => '0')
124
+ item = 'toys'
125
+ # TODO: need to change the below test. I think Juergen's intention was to include some umlauts in the values
126
+ # put attributes
127
+ # mhhh... Not sure how to translate this: hölzchehn klötzchen grÃŒnspan buße... Lets assume this is:
128
+ attributes = { 'Jurgen' => %w{kitten puppy chickabiddy piglet} }
129
+ assert sdb.put_attributes(@domain, item, attributes)
130
+ wait SDB_DELAY, 'after putting attributes'
131
+ # get attributes
132
+ values = Array(sdb.get_attributes(@domain, item)[:attributes]['Jurgen']).sort
133
+ # compare to original list
134
+ assert_equal values, attributes['Jurgen'].sort
135
+ # check that the request has correct signature version
136
+ assert sdb.last_request.path.include?('SignatureVersion=0')
137
+ end
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
158
+ item = 'multiples'
159
+ assert_nothing_thrown "Failed to put multiple attrs" do
160
+ @sdb.put_attributes(@domain, item, {:one=>1, :two=>2, :three=>3})
161
+ end
162
+ end
163
+
164
+ def test_13_zero_len_attrs
165
+ item = 'zeroes'
166
+ assert_nothing_thrown "Failed to put zero-length attributes" do
167
+ @sdb.put_attributes(@domain, item, {:one=>"", :two=>"", :three=>""})
168
+ end
169
+ end
170
+
171
+ def test_14_nil_attrs
172
+ item = 'nils'
173
+ res = nil
174
+ assert_nothing_thrown do
175
+ @sdb.put_attributes(@domain, item, {:one=>nil, :two=>nil, :three=>'chunder'})
176
+ end
177
+ wait SDB_DELAY, 'after putting attributes'
178
+ assert_nothing_thrown do
179
+ res = @sdb.get_attributes(@domain, item)
180
+ end
181
+ assert_nil(res[:attributes]['one'][0])
182
+ assert_nil(res[:attributes]['two'][0])
183
+ assert_not_nil(res[:attributes]['three'][0])
184
+ end
185
+
186
+ def test_15_url_escape
187
+ item = 'urlescapes'
188
+ content = {:a=>"one & two & three",
189
+ :b=>"one ? two / three"}
190
+ @sdb.put_attributes(@domain, item, content)
191
+ wait SDB_DELAY, 'after putting attributes'
192
+
193
+ res = @sdb.get_attributes(@domain, item)
194
+ assert_equal(content[:a], res[:attributes]['a'][0])
195
+ assert_equal(content[:b], res[:attributes]['b'][0])
196
+ end
197
+
198
+ def test_16_put_attrs_by_post
199
+ item = 'reqgirth'
200
+ i = 0
201
+ sa = ""
202
+ while(i < 64) do
203
+ sa += "aaaaaaaa"
204
+ i += 1
205
+ end
206
+ @sdb.put_attributes(@domain, item, {:a => sa, :b => sa, :c => sa, :d => sa, :e => sa})
207
+ wait SDB_DELAY, 'after putting attributes'
208
+ end
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
+
245
+ # Keep this test last, because it deletes the domain...
246
+ def test_21_delete_domain
247
+ assert @sdb.delete_domain(@domain), 'delete_domain fail'
248
+ wait SDB_DELAY, 'after domain deletion'
249
+ # check that domain does not exist
250
+ assert !@sdb.list_domains[:domains].include?(@domain)
251
+ end
252
+
253
+ end
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../../lib/right_aws'
@@ -0,0 +1,73 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestSns < Test::Unit::TestCase
4
+
5
+ GRANTEE_EMAIL_ADDRESS = 'fester@example.com'
6
+ RIGHT_MESSAGE_TEXT = 'Right test message'
7
+
8
+
9
+ def setup
10
+ $stdout.sync = true
11
+ @grantee_aws_id = '100000000001'
12
+ @topic_name = 'right_sns_test_topic'
13
+ @sns = RightAws::Sns.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
14
+ end
15
+
16
+ #---------------------------
17
+ # RightAws::Sns
18
+ #---------------------------
19
+
20
+ def test_01_create_topic
21
+ topic = @sns.create_topic @topic_name
22
+ assert topic.kind_of?(RightAws::Sns::Topic), 'New topic wasn\'t initiated'
23
+ end
24
+
25
+ def test_02_list_topics
26
+ topics = @sns.topics
27
+ assert topics.kind_of?(Array), 'Must be an array'
28
+ assert topics.length > 0, 'Must be more than 0 topics in list'
29
+ end
30
+
31
+ def test_03_set_and_get_topic_attributes
32
+ topic = @sns.topics.last
33
+ assert topic.owner, 'Unable to get the Owner attribute - get_topic_attributes fail'
34
+ topic.display_name = 'Dave'
35
+ assert_equal 'Dave', topic.display_name, 'Unable to set the DisplayName attribute - set_topic_attributes fail'
36
+ end
37
+
38
+ def test_04_add_permissions
39
+ topic = @sns.topics.last
40
+ assert topic.add_permission('test', @grantee_aws_id, 'Publish')
41
+ end
42
+
43
+ def test_05_test_permissions
44
+ topic = @sns.topics.last
45
+ assert !topic.policy.blank?
46
+ end
47
+
48
+ def test_06_remove_permissions
49
+ topic = @sns.topics.last
50
+ assert topic.remove_permission('test')
51
+ end
52
+
53
+ def test_07_send_message
54
+ topic = @sns.topics.last
55
+ message = topic.send_message(RIGHT_MESSAGE_TEXT, 'A subject')
56
+ assert message, 'Message was not created'
57
+ end
58
+
59
+ #---------------------------
60
+ # RightAws::SnsInterface
61
+ #---------------------------
62
+
63
+ def test_08_set_amazon_problems
64
+ original_problems = RightAws::SnsInterface.amazon_problems
65
+ assert(original_problems.length > 0)
66
+ RightAws::SnsInterface.amazon_problems= original_problems << "A New Problem"
67
+ new_problems = RightAws::SnsInterface.amazon_problems
68
+ assert_equal(new_problems, original_problems)
69
+
70
+ RightAws::SnsInterface.amazon_problems= nil
71
+ assert_nil(RightAws::SnsInterface.amazon_problems)
72
+ end
73
+ end
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../../lib/right_aws'
@@ -0,0 +1,285 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestSqs < Test::Unit::TestCase
4
+
5
+ GRANTEE_EMAIL_ADDRESS = 'madhur@amazon.com'
6
+ RIGHT_MESSAGE_TEXT = 'Right test message'
7
+
8
+
9
+ def setup
10
+ @sqs = Rightscale::SqsInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
11
+ @queue_name = 'right_sqs_test_awesome_queue'
12
+ # for classes
13
+ @s = Rightscale::Sqs.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
14
+ end
15
+
16
+ # Wait for the queue to appears in the queues list.
17
+ # Amazon needs some time to after the queue creation to place
18
+ # it to the accessible queues list. If we dont want to get
19
+ # the additional faults then wait a bit...
20
+ def wait_for_queue_url(queue_name)
21
+ queue_url = nil
22
+ until queue_url
23
+ queue_url = @sqs.queue_url_by_name(queue_name)
24
+ unless queue_url
25
+ print '-'
26
+ STDOUT.flush
27
+ sleep 1
28
+ end
29
+ end
30
+ queue_url
31
+ end
32
+
33
+
34
+
35
+
36
+ def assert_eventually_equal(value, timeout=30, failmsg="", &block)
37
+ start_time = Time.now.to_i
38
+ tries = 0
39
+ while(yield != value) do
40
+ tries += 1
41
+ print '-'
42
+ STDOUT.flush
43
+ s = Time.now.to_i - start_time
44
+ flunk("Timeout: #{failmsg}: did not equal \"#{value}\" after #{tries} tries in #{s}s.") if s > timeout
45
+ sleep(1)
46
+ setup if (tries % 10) == 0
47
+ end
48
+ end
49
+
50
+
51
+ #---------------------------
52
+ # Rightscale::SqsInterface
53
+ #---------------------------
54
+
55
+ def test_01_create_queue
56
+ queue_url = @sqs.create_queue @queue_name
57
+ assert queue_url[/http.*#{@queue_name}/], 'New queue creation fail'
58
+ end
59
+
60
+ def test_02_list_queues
61
+ wait_for_queue_url(@queue_name)
62
+ queues = @sqs.list_queues('right_')
63
+ assert queues.size>0, 'Must more that 0 queues in list'
64
+ end
65
+
66
+ def test_03_set_and_get_queue_attributes
67
+ queue_url = @sqs.queue_url_by_name(@queue_name)
68
+ assert queue_url[/http.*#{@queue_name}/], "#{@queue_name} must exist!"
69
+ assert @sqs.set_queue_attributes(queue_url, 'VisibilityTimeout', 111), 'Set_queue_attributes fail'
70
+ sleep 20 # Amazon needs some time to change attribute
71
+ assert_equal '111', @sqs.get_queue_attributes(queue_url)['VisibilityTimeout'], 'New VisibilityTimeout must be equal to 111'
72
+ end
73
+
74
+ def test_04_set_and_get_visibility_timeout
75
+ queue_url = @sqs.queue_url_by_name(@queue_name)
76
+ assert @sqs.set_visibility_timeout(queue_url, 222), 'Set_visibility_timeout fail'
77
+ sleep 20 # Amazon needs some time to change attribute
78
+ #assert_equal 222, @sqs.get_visibility_timeout(queue_url), 'Get_visibility_timeout must return to 222'
79
+ assert_eventually_equal(222, 60, 'Get_visibility_timeout must return to 222') do
80
+ @sqs.get_visibility_timeout(queue_url)
81
+ end
82
+ end
83
+
84
+ def test_05_add_test_remove_grant
85
+ queue_url = @sqs.queue_url_by_name(@queue_name)
86
+ assert @sqs.add_grant(queue_url, GRANTEE_EMAIL_ADDRESS, 'FULLCONTROL'), 'Add grant fail'
87
+ grants_list = @sqs.list_grants(queue_url, GRANTEE_EMAIL_ADDRESS)
88
+ assert grants_list.size>0, 'List_grants must return at least 1 record for user #{GRANTEE_EMAIL_ADDRESS}'
89
+ assert @sqs.remove_grant(queue_url, GRANTEE_EMAIL_ADDRESS, 'FULLCONTROL'), 'Remove_grant fail'
90
+ end
91
+
92
+ def test_06_send_message
93
+ queue_url = @sqs.queue_url_by_name(@queue_name)
94
+ # send 5 messages for the tests below
95
+ assert @sqs.send_message(queue_url, RIGHT_MESSAGE_TEXT)
96
+ assert @sqs.send_message(queue_url, RIGHT_MESSAGE_TEXT)
97
+ assert @sqs.send_message(queue_url, RIGHT_MESSAGE_TEXT)
98
+ assert @sqs.send_message(queue_url, RIGHT_MESSAGE_TEXT)
99
+ assert @sqs.send_message(queue_url, RIGHT_MESSAGE_TEXT)
100
+ end
101
+
102
+ def test_07_get_queue_length
103
+ queue_url = @sqs.queue_url_by_name(@queue_name)
104
+ assert_equal 5, @sqs.get_queue_length(queue_url), 'Queue must have 5 messages'
105
+ end
106
+
107
+ def test_08_receive_message
108
+ queue_url = @sqs.queue_url_by_name(@queue_name)
109
+ r_message = @sqs.receive_message(queue_url, 1)
110
+ assert_equal RIGHT_MESSAGE_TEXT, r_message[:body], 'Receive message get wron message text'
111
+ p_message = @sqs.peek_message(queue_url, r_message[:id])
112
+ assert_equal r_message[:body], p_message[:body], 'Received and Peeked messages must be equal'
113
+ assert @sqs.change_message_visibility(queue_url, r_message[:id], 0), 'Change_message_visibility fail'
114
+ end
115
+
116
+ def test_09_delete_message
117
+ queue_url = @sqs.queue_url_by_name(@queue_name)
118
+ message = @sqs.receive_message(queue_url)
119
+ assert @sqs.delete_message(queue_url, message[:id]), 'Delete_message fail'
120
+ assert @sqs.pop_message(queue_url), 'Pop_message fail'
121
+ end
122
+
123
+ def test_10_clear_and_delete_queue
124
+ queue_url = @sqs.queue_url_by_name(@queue_name)
125
+ assert_raise(Rightscale::AwsError) { @sqs.delete_queue(queue_url) }
126
+ ## oops, force_clear_queue does not work any more - amazon expects for 60 secs timeout between
127
+ ## queue deletion and recreation...
128
+ ## assert @sqs.force_clear_queue(queue_url), 'Force_clear_queue fail'
129
+ assert @sqs.clear_queue(queue_url), 'Clear_queue fail'
130
+ assert @sqs.delete_queue(queue_url), 'Delete_queue fail'
131
+ end
132
+
133
+ #---------------------------
134
+ # Rightscale::Sqs classes
135
+ #---------------------------
136
+
137
+ def test_20_sqs_create_delete_queue
138
+ assert @s, 'Rightscale::Sqs must exist'
139
+ # get queues list
140
+ queues_size = @s.queues.size
141
+ # create new queue
142
+ queue = @s.queue("#{@queue_name}_20", true)
143
+ # check that it is created
144
+ assert queue.is_a?(Rightscale::Sqs::Queue)
145
+ wait_for_queue_url(@queue_name)
146
+ # check that amount of queues has increased
147
+ assert_eventually_equal(queues_size + 1, 60, "The number of queues did not increase by one") do
148
+ @s.queues.size
149
+ end
150
+ # delete queue
151
+ assert queue.delete
152
+ end
153
+
154
+ def test_21_queue_create
155
+ # create new queue
156
+ queue = Rightscale::Sqs::Queue.create(@s, "#{@queue_name}_21", true)
157
+ # check that it is created
158
+ assert queue.is_a?(Rightscale::Sqs::Queue)
159
+ wait_for_queue_url(@queue_name)
160
+ end
161
+
162
+ def test_22_queue_attributes
163
+ queue = Rightscale::Sqs::Queue.create(@s, "#{@queue_name}_21", false)
164
+ # get a list of attrinutes
165
+ attributes = queue.get_attribute
166
+ assert attributes.is_a?(Hash) && attributes.size>0
167
+ # get attribute value and increase it by 10
168
+ v = (queue.get_attribute('VisibilityTimeout').to_i + 10).to_s
169
+ # set attribute
170
+ assert queue.set_attribute('VisibilityTimeout', v)
171
+ # wait a bit
172
+ sleep 20
173
+ # check that attribute has changed
174
+ assert_equal v, queue.get_attribute('VisibilityTimeout')
175
+ # get queue visibility timeout
176
+ assert v.to_i, queue.visibility
177
+ # change it
178
+ queue.visibility += 10
179
+ # make sure that it is changed
180
+ assert v.to_i + 10, queue.visibility
181
+ end
182
+
183
+ def test_23_grantees
184
+ queue = Rightscale::Sqs::Queue.create(@s, "#{@queue_name}_21", false)
185
+ # get a list of grantees
186
+ grantees = queue.grantees
187
+ # well, queue must exist at least some seconds before we could add grantees to it....
188
+ # otherwise we get "Queue does not exists" message. Hence we use the queue
189
+ # has been created at previous step.
190
+ #
191
+ # create new grantee
192
+ grantee = Rightscale::Sqs::Grantee.new(queue, GRANTEE_EMAIL_ADDRESS)
193
+ assert grantee.perms.empty?
194
+ # grant perms
195
+ assert grantee.grant('FULLCONTROL')
196
+ assert grantee.grant('RECEIVEMESSAGE')
197
+ assert_equal 2, grantee.perms.size
198
+ # make sure that amount of grantees has increased
199
+ assert grantees.size < queue.grantees.size
200
+ # revoke perms
201
+ assert grantee.revoke('RECEIVEMESSAGE')
202
+ assert_equal 1, grantee.perms.size
203
+ # remove grantee
204
+ assert grantee.drop
205
+ # Don't test this - just for cleanup purposes
206
+ queue.delete
207
+ end
208
+
209
+ def test_24_send_size
210
+ queue_url = @sqs.queue_url_by_name("#{@queue_name}_24")
211
+ @sqs.delete_queue(queue_url)
212
+ queue = Rightscale::Sqs::Queue.create(@s, "#{@queue_name}_24", true)
213
+ # send 5 messages
214
+ assert queue.push('a1')
215
+ assert queue.push('a2')
216
+ assert queue.push('a3')
217
+ assert queue.push('a4')
218
+ assert queue.push('a5')
219
+ # check queue size
220
+ assert_equal 5, queue.size
221
+ # send one more
222
+ assert queue.push('a6')
223
+ # check queue size again
224
+ assert_equal 6, queue.size
225
+ end
226
+
227
+ def test_25_message_receive_pop_peek_delete
228
+ queue = Rightscale::Sqs::Queue.create(@s, "#{@queue_name}_24", false)
229
+ # get queue size
230
+ size = queue.size
231
+ # get first message
232
+ m1 = queue.receive(10)
233
+ assert m1.is_a?(Rightscale::Sqs::Message)
234
+ # pop second message
235
+ m2 = queue.pop
236
+ assert m2.is_a?(Rightscale::Sqs::Message)
237
+ # make sure that queue size has decreased
238
+ assert_equal size-1, queue.size
239
+ # peek message 1
240
+ m1p = queue.peek(m1.id)
241
+ assert m1p.is_a?(Rightscale::Sqs::Message)
242
+ assert_equal m1.id, m1p.id
243
+ assert_equal m1.body, m1p.body
244
+ # change message visibility
245
+ assert m1.visibility = 30
246
+ # delete messsage
247
+ assert m1.delete
248
+ # make sure that queue size has decreased again
249
+ assert_equal size-2, queue.size
250
+ end
251
+
252
+ def test_26
253
+ queue = Rightscale::Sqs::Queue.create(@s, "#{@queue_name}_24", false)
254
+ # lock message
255
+ queue.receive(100)
256
+ # clear queue
257
+ assert queue.clear
258
+ # queue size is greater than zero
259
+ assert queue.size>0
260
+ queue.push('123456')
261
+ assert_raise(Rightscale::AwsError) { queue.delete }
262
+ assert queue.delete(true)
263
+ end
264
+
265
+ def test_27_set_amazon_problems
266
+ original_problems = Rightscale::SqsInterface.amazon_problems
267
+ assert(original_problems.length > 0)
268
+ Rightscale::SqsInterface.amazon_problems= original_problems << "A New Problem"
269
+ new_problems = Rightscale::SqsInterface.amazon_problems
270
+ assert_equal(new_problems, original_problems)
271
+
272
+ Rightscale::SqsInterface.amazon_problems= nil
273
+ assert_nil(Rightscale::SqsInterface.amazon_problems)
274
+ end
275
+
276
+ def test_29_signature_version_0
277
+ sqs = Rightscale::SqsInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key, :signature_version => '0')
278
+ assert_nothing_raised do
279
+ sqs.list_queues
280
+ end
281
+ # check that the request has correct signature version
282
+ assert sqs.last_request.path.include?('SignatureVersion=0')
283
+ end
284
+
285
+ end