qoobaa-aws-sqs 0.1.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.
@@ -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