qoobaa-aws-sqs 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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