qoobaa-aws-sqs 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.gitignore +6 -0
- data/LICENSE +20 -0
- data/README.rdoc +7 -0
- data/Rakefile +58 -0
- data/VERSION +1 -0
- data/aws-sqs.gemspec +51 -0
- data/lib/awsbase/awsbase.rb +801 -0
- data/lib/awsbase/benchmark_fix.rb +36 -0
- data/lib/awsbase/http_connection.rb +418 -0
- data/lib/awsbase/support.rb +111 -0
- data/lib/sqs/sqs.rb +283 -0
- data/lib/sqs/sqs_interface.rb +440 -0
- data/test/sqs_test.rb +197 -0
- data/test/test_helper.rb +101 -0
- metadata +69 -0
data/test/sqs_test.rb
ADDED
@@ -0,0 +1,197 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class TestSqs < Test::Unit::TestCase
|
4
|
+
GRANTEE_EMAIL_ADDRESS = 'fester@example.com'
|
5
|
+
MESSAGE_TEXT = 'Test message'
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@sqs = Aws::SqsInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
|
9
|
+
@queue_name = 'sqs_test_queue'
|
10
|
+
# for classes
|
11
|
+
@s = Aws::Sqs.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
|
12
|
+
end
|
13
|
+
|
14
|
+
# Wait for the queue to appear in the queues list.
|
15
|
+
# Amazon needs some time to after the queue creation to place
|
16
|
+
# it to the accessible queues list. If we dont want to get
|
17
|
+
# the additional faults then wait a bit...
|
18
|
+
def wait_for_queue_url(queue_name)
|
19
|
+
queue_url = nil
|
20
|
+
until queue_url
|
21
|
+
queue_url = @sqs.queue_url_by_name(queue_name)
|
22
|
+
unless queue_url
|
23
|
+
print '-'
|
24
|
+
STDOUT.flush
|
25
|
+
sleep 1
|
26
|
+
end
|
27
|
+
end
|
28
|
+
queue_url
|
29
|
+
end
|
30
|
+
|
31
|
+
#---------------------------
|
32
|
+
# Aws::SqsInterface
|
33
|
+
#---------------------------
|
34
|
+
|
35
|
+
def test_01_create_queue
|
36
|
+
queue_url = @sqs.create_queue @queue_name
|
37
|
+
assert queue_url[/http.*#{@queue_name}/], 'New queue creation failed'
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_02_list_queues
|
41
|
+
wait_for_queue_url(@queue_name)
|
42
|
+
queues = @sqs.list_queues('sqs_test_')
|
43
|
+
assert queues.size>0, 'Must more that 0 queues in list'
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_03_set_and_get_queue_attributes
|
47
|
+
queue_url = @sqs.queue_url_by_name(@queue_name)
|
48
|
+
assert queue_url[/http.*#{@queue_name}/], "#{@queue_name} must exist!"
|
49
|
+
assert @sqs.set_queue_attributes(queue_url, 'VisibilityTimeout', 111), 'Set_queue_attributes fail'
|
50
|
+
sleep 20 # Amazon needs some time to change attribute
|
51
|
+
assert_equal '111', @sqs.get_queue_attributes(queue_url)['VisibilityTimeout'], 'New VisibilityTimeout must be equal to 111'
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_06_send_message
|
55
|
+
queue_url = @sqs.queue_url_by_name(@queue_name)
|
56
|
+
# send 5 messages for the tests below
|
57
|
+
assert @sqs.send_message(queue_url, MESSAGE_TEXT)
|
58
|
+
assert @sqs.send_message(queue_url, MESSAGE_TEXT)
|
59
|
+
assert @sqs.send_message(queue_url, MESSAGE_TEXT)
|
60
|
+
assert @sqs.send_message(queue_url, MESSAGE_TEXT)
|
61
|
+
assert @sqs.send_message(queue_url, MESSAGE_TEXT)
|
62
|
+
sleep 5
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_07_get_queue_length
|
66
|
+
queue_url = @sqs.queue_url_by_name(@queue_name)
|
67
|
+
assert_equal 5, @sqs.get_queue_length(queue_url), 'Queue must have 5 messages'
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_08_receive_message
|
71
|
+
queue_url = @sqs.queue_url_by_name(@queue_name)
|
72
|
+
r_message = @sqs.receive_message(queue_url, 1)[0]
|
73
|
+
assert r_message, "Receive returned no message(s), but this is not necessarily incorrect"
|
74
|
+
assert_equal MESSAGE_TEXT, r_message['Body'], 'Receive message got wrong message text'
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_09_delete_message
|
78
|
+
queue_url = @sqs.queue_url_by_name(@queue_name)
|
79
|
+
message = @sqs.receive_message(queue_url)[0]
|
80
|
+
assert @sqs.delete_message(queue_url, message['ReceiptHandle']), 'Delete_message fail'
|
81
|
+
assert @sqs.pop_message(queue_url), 'Pop_message fail'
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_10_clear_and_delete_queue
|
85
|
+
queue_url = @sqs.queue_url_by_name(@queue_name)
|
86
|
+
assert @sqs.delete_queue(queue_url)
|
87
|
+
end
|
88
|
+
|
89
|
+
#---------------------------
|
90
|
+
# Aws::Sqs classes
|
91
|
+
#---------------------------
|
92
|
+
|
93
|
+
def test_20_sqs_create_delete_queue
|
94
|
+
assert @s, 'Aws::Sqs must exist'
|
95
|
+
# get queues list
|
96
|
+
queues_size = @s.queues.size
|
97
|
+
# create new queue
|
98
|
+
queue = @s.queue("#{@queue_name}_20", true)
|
99
|
+
# check that it is created
|
100
|
+
assert queue.is_a?(Aws::Sqs::Queue)
|
101
|
+
wait_for_queue_url(@queue_name)
|
102
|
+
# check that amount of queues has increased
|
103
|
+
assert_equal queues_size + 1, @s.queues.size
|
104
|
+
# delete queue
|
105
|
+
assert queue.delete
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_21_queue_create
|
109
|
+
# create new queue
|
110
|
+
queue = Aws::Sqs::Queue.create(@s, "#{@queue_name}_21", true)
|
111
|
+
# check that it is created
|
112
|
+
assert queue.is_a?(Aws::Sqs::Queue)
|
113
|
+
wait_for_queue_url(@queue_name)
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_22_queue_attributes
|
117
|
+
queue = Aws::Sqs::Queue.create(@s, "#{@queue_name}_21", false)
|
118
|
+
# get a list of attrinutes
|
119
|
+
attributes = queue.get_attribute
|
120
|
+
assert attributes.is_a?(Hash) && attributes.size>0
|
121
|
+
# get attribute value and increase it by 10
|
122
|
+
v = (queue.get_attribute('VisibilityTimeout').to_i + 10).to_s
|
123
|
+
# set attribute
|
124
|
+
assert queue.set_attribute('VisibilityTimeout', v)
|
125
|
+
# wait a bit
|
126
|
+
sleep 20
|
127
|
+
# check that attribute has changed
|
128
|
+
assert_equal v, queue.get_attribute('VisibilityTimeout')
|
129
|
+
# get queue visibility timeout
|
130
|
+
assert_equal v, queue.visibility
|
131
|
+
# change it
|
132
|
+
queue.visibility = queue.visibility.to_i + 10
|
133
|
+
# make sure that it is changed
|
134
|
+
assert v.to_i + 10, queue.visibility
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_24_send_size
|
138
|
+
queue = Aws::Sqs::Queue.create(@s, "#{@queue_name}_24", true)
|
139
|
+
# send 5 messages
|
140
|
+
assert queue.push('a1')
|
141
|
+
assert queue.push('a2')
|
142
|
+
assert queue.push('a3')
|
143
|
+
assert queue.push('a4')
|
144
|
+
assert queue.push('a5')
|
145
|
+
# check queue size
|
146
|
+
assert_equal 5, queue.size
|
147
|
+
# send one more
|
148
|
+
assert queue.push('a6')
|
149
|
+
# check queue size again
|
150
|
+
assert_equal 6, queue.size
|
151
|
+
end
|
152
|
+
|
153
|
+
def test_25_message_receive_pop_delete
|
154
|
+
queue = Aws::Sqs::Queue.create(@s, "#{@queue_name}_24", false)
|
155
|
+
# get queue size
|
156
|
+
size = queue.size
|
157
|
+
# get first message
|
158
|
+
m1 = queue.receive(10)
|
159
|
+
assert m1.is_a?(Aws::Sqs::Message)
|
160
|
+
# pop second message
|
161
|
+
m2 = queue.pop
|
162
|
+
assert m2.is_a?(Aws::Sqs::Message)
|
163
|
+
# make sure that queue size has decreased
|
164
|
+
assert_equal size-1, queue.size
|
165
|
+
# delete messsage
|
166
|
+
assert m1.delete
|
167
|
+
# make sure that queue size has decreased again
|
168
|
+
assert_equal size-2, queue.size
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_26
|
172
|
+
queue = Aws::Sqs::Queue.create(@s, "#{@queue_name}_24", false)
|
173
|
+
# lock message
|
174
|
+
queue.receive(100)
|
175
|
+
# clear queue
|
176
|
+
assert queue.clear
|
177
|
+
# queue size is greater than zero
|
178
|
+
assert queue.size>0
|
179
|
+
end
|
180
|
+
|
181
|
+
def test_27_set_amazon_problems
|
182
|
+
original_problems = Aws::SqsInterface.amazon_problems
|
183
|
+
assert(original_problems.length > 0)
|
184
|
+
Aws::SqsInterface.amazon_problems= original_problems << "A New Problem"
|
185
|
+
new_problems = Aws::SqsInterface.amazon_problems
|
186
|
+
assert_equal(new_problems, original_problems)
|
187
|
+
|
188
|
+
Aws::SqsInterface.amazon_problems= nil
|
189
|
+
assert_nil(Aws::SqsInterface.amazon_problems)
|
190
|
+
end
|
191
|
+
|
192
|
+
def test_28_check_threading_model
|
193
|
+
assert(!@sqs.multi_thread)
|
194
|
+
newsqs = Aws::SqsInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key, {:multi_thread => true})
|
195
|
+
assert(newsqs.multi_thread)
|
196
|
+
end
|
197
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'shoulda'
|
4
|
+
|
5
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
6
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
7
|
+
|
8
|
+
require 'aws'
|
9
|
+
|
10
|
+
module Net
|
11
|
+
class HTTPResponse
|
12
|
+
alias_method :real_body, :body
|
13
|
+
def setmsg(msg)
|
14
|
+
@mymsg = msg
|
15
|
+
end
|
16
|
+
|
17
|
+
def body
|
18
|
+
# defined?() helps us to get rid of a bunch of 'warnings'
|
19
|
+
(defined?(@mymsg) && @mymsg) ? @mymsg : real_body
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
module Aws
|
25
|
+
class HttpConnection
|
26
|
+
@@response_stack = []
|
27
|
+
|
28
|
+
alias_method :real_request, :request
|
29
|
+
|
30
|
+
def request(request_params, &block)
|
31
|
+
if(@@response_stack.length == 0)
|
32
|
+
return real_request(request_params, &block)
|
33
|
+
end
|
34
|
+
|
35
|
+
if(block)
|
36
|
+
# Do something special
|
37
|
+
else
|
38
|
+
next_response = HttpConnection::pop()
|
39
|
+
classname = Net::HTTPResponse::CODE_TO_OBJ["#{next_response[:code]}"]
|
40
|
+
response = classname.new("1.1", next_response[:code], next_response[:msg])
|
41
|
+
if(next_response[:msg])
|
42
|
+
response.setmsg(next_response[:msg])
|
43
|
+
end
|
44
|
+
response
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.reset
|
49
|
+
@@response_stack = []
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.push(code, msg=nil)
|
53
|
+
response = {:code => code, :msg => msg}
|
54
|
+
@@response_stack << response
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.pop
|
58
|
+
@@response_stack.pop
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.length
|
62
|
+
@@response_stack.length
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class TestCredentials
|
68
|
+
@@aws_access_key_id = ""
|
69
|
+
@@aws_secret_access_key = ""
|
70
|
+
@@account_number = nil
|
71
|
+
|
72
|
+
def self.aws_access_key_id
|
73
|
+
@@aws_access_key_id
|
74
|
+
end
|
75
|
+
def self.aws_access_key_id=(newval)
|
76
|
+
@@aws_access_key_id = newval
|
77
|
+
end
|
78
|
+
def self.account_number
|
79
|
+
@@account_number
|
80
|
+
end
|
81
|
+
def self.account_number=(newval)
|
82
|
+
@@account_number = newval
|
83
|
+
end
|
84
|
+
def self.aws_secret_access_key
|
85
|
+
@@aws_secret_access_key
|
86
|
+
end
|
87
|
+
def self.aws_secret_access_key=(newval)
|
88
|
+
@@aws_secret_access_key = newval
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.get_credentials
|
92
|
+
begin
|
93
|
+
require 'testcredentials'
|
94
|
+
rescue Exception => e
|
95
|
+
puts "Credentials not found in file test/testcredentials.rb"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
class Test::Unit::TestCase
|
101
|
+
end
|
metadata
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: qoobaa-aws-sqs
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- "Jakub Ku\xC5\xBAma"
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-06-02 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description:
|
17
|
+
email: qoobaa@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- LICENSE
|
24
|
+
- README.rdoc
|
25
|
+
files:
|
26
|
+
- .document
|
27
|
+
- .gitignore
|
28
|
+
- LICENSE
|
29
|
+
- README.rdoc
|
30
|
+
- Rakefile
|
31
|
+
- VERSION
|
32
|
+
- aws-sqs.gemspec
|
33
|
+
- lib/awsbase/awsbase.rb
|
34
|
+
- lib/awsbase/benchmark_fix.rb
|
35
|
+
- lib/awsbase/http_connection.rb
|
36
|
+
- lib/awsbase/support.rb
|
37
|
+
- lib/sqs/sqs.rb
|
38
|
+
- lib/sqs/sqs_interface.rb
|
39
|
+
- test/sqs_test.rb
|
40
|
+
- test/test_helper.rb
|
41
|
+
has_rdoc: false
|
42
|
+
homepage: http://github.com/qoobaa/aws-sqs
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options:
|
45
|
+
- --charset=UTF-8
|
46
|
+
require_paths:
|
47
|
+
- lib
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: "0"
|
53
|
+
version:
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: "0"
|
59
|
+
version:
|
60
|
+
requirements: []
|
61
|
+
|
62
|
+
rubyforge_project:
|
63
|
+
rubygems_version: 1.2.0
|
64
|
+
signing_key:
|
65
|
+
specification_version: 3
|
66
|
+
summary: AWS SQS
|
67
|
+
test_files:
|
68
|
+
- test/sqs_test.rb
|
69
|
+
- test/test_helper.rb
|