Class: TestSqs

Inherits:
Test::Unit::TestCase
  • Object
show all
Defined in:
test/sqs_test.rb

Constant Summary collapse

GRANTEE_EMAIL_ADDRESS =
'[email protected]'
MESSAGE_TEXT =
'Test message'

Instance Method Summary collapse

Instance Method Details

#setupObject



7
8
9
10
11
12
# File 'test/sqs_test.rb', line 7

def setup
  @sqs = Aws::SqsInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
  @queue_name = 'sqs_test_queue'
    # for classes
  @s = Aws::Sqs.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
end

#test_01_create_queueObject


Aws::SqsInterface




35
36
37
38
# File 'test/sqs_test.rb', line 35

def test_01_create_queue
  queue_url = @sqs.create_queue @queue_name
  assert queue_url[/http.*#{@queue_name}/], 'New queue creation failed'
end

#test_02_list_queuesObject



40
41
42
43
44
# File 'test/sqs_test.rb', line 40

def test_02_list_queues
  wait_for_queue_url(@queue_name)
  queues = @sqs.list_queues('sqs_test_')
  assert queues.size>0, 'Must more that 0 queues in list'
end

#test_03_set_and_get_queue_attributesObject



46
47
48
49
50
51
52
# File 'test/sqs_test.rb', line 46

def test_03_set_and_get_queue_attributes
  queue_url = @sqs.queue_url_by_name(@queue_name)
  assert queue_url[/http.*#{@queue_name}/], "#{@queue_name} must exist!"
  assert @sqs.set_queue_attributes(queue_url, 'VisibilityTimeout', 111), 'Set_queue_attributes fail'
  sleep 20 # Amazon needs some time to change attribute
  assert_equal '111', @sqs.get_queue_attributes(queue_url)['VisibilityTimeout'], 'New VisibilityTimeout must be equal to 111'
end

#test_06_send_messageObject



54
55
56
57
58
59
60
61
62
63
# File 'test/sqs_test.rb', line 54

def test_06_send_message
  queue_url = @sqs.queue_url_by_name(@queue_name)
    # send 5 messages for the tests below
  assert @sqs.send_message(queue_url, MESSAGE_TEXT)
  assert @sqs.send_message(queue_url, MESSAGE_TEXT)
  assert @sqs.send_message(queue_url, MESSAGE_TEXT)
  assert @sqs.send_message(queue_url, MESSAGE_TEXT)
  assert @sqs.send_message(queue_url, MESSAGE_TEXT)
  sleep 5
end

#test_07_get_queue_lengthObject



65
66
67
68
# File 'test/sqs_test.rb', line 65

def test_07_get_queue_length
  queue_url = @sqs.queue_url_by_name(@queue_name)
  assert_equal 5, @sqs.get_queue_length(queue_url), 'Queue must have 5 messages'
end

#test_08_receive_messageObject



70
71
72
73
74
75
# File 'test/sqs_test.rb', line 70

def test_08_receive_message
  queue_url = @sqs.queue_url_by_name(@queue_name)
  r_message = @sqs.receive_message(queue_url, 1)[0]
  assert r_message, "Receive returned no message(s), but this is not necessarily incorrect"
  assert_equal MESSAGE_TEXT, r_message['Body'], 'Receive message got wrong message text'
end

#test_09_delete_messageObject



77
78
79
80
81
82
# File 'test/sqs_test.rb', line 77

def test_09_delete_message
  queue_url = @sqs.queue_url_by_name(@queue_name)
  message = @sqs.receive_message(queue_url)[0]
  assert @sqs.delete_message(queue_url, message['ReceiptHandle']), 'Delete_message fail'
  assert @sqs.pop_message(queue_url), 'Pop_message fail'
end

#test_10_clear_and_delete_queueObject



84
85
86
87
# File 'test/sqs_test.rb', line 84

def test_10_clear_and_delete_queue
  queue_url = @sqs.queue_url_by_name(@queue_name)
  assert @sqs.delete_queue(queue_url)
end

#test_20_sqs_create_delete_queueObject


Aws::Sqs classes




93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'test/sqs_test.rb', line 93

def test_20_sqs_create_delete_queue
  assert @s, 'Aws::Sqs must exist'
    # get queues list
  queues_size = @s.queues.size
    # create new queue
  queue  = @s.queue("#{@queue_name}_20", true)
    # check that it is created
  assert queue.is_a?(Aws::Sqs::Queue)
  wait_for_queue_url(@queue_name)
    # check that amount of queues has increased
  assert_equal queues_size + 1, @s.queues.size
    # delete queue
  assert queue.delete
end

#test_21_queue_createObject



108
109
110
111
112
113
114
# File 'test/sqs_test.rb', line 108

def test_21_queue_create
    # create new queue
  queue = Aws::Sqs::Queue.create(@s, "#{@queue_name}_21", true)
    # check that it is created
  assert queue.is_a?(Aws::Sqs::Queue)
  wait_for_queue_url(@queue_name)
end

#test_22_queue_attributesObject



116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'test/sqs_test.rb', line 116

def test_22_queue_attributes
  queue = Aws::Sqs::Queue.create(@s, "#{@queue_name}_21", false)
    # get a list of attrinutes
  attributes = queue.get_attribute
  assert attributes.is_a?(Hash) && attributes.size>0
    # get attribute value and increase it by 10
  v = (queue.get_attribute('VisibilityTimeout').to_i + 10).to_s
    # set attribute
  assert queue.set_attribute('VisibilityTimeout', v)
    # wait a bit
  sleep 20
    # check that attribute has changed
  assert_equal v, queue.get_attribute('VisibilityTimeout')
    # get queue visibility timeout
  assert_equal v, queue.visibility
    # change it
  queue.visibility = queue.visibility.to_i + 10
    # make sure that it is changed
  assert v.to_i + 10, queue.visibility
end

#test_24_send_sizeObject



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'test/sqs_test.rb', line 137

def test_24_send_size
  queue = Aws::Sqs::Queue.create(@s, "#{@queue_name}_24", true)
    # send 5 messages
  assert queue.push('a1')
  assert queue.push('a2')
  assert queue.push('a3')
  assert queue.push('a4')
  assert queue.push('a5')
    # check queue size
  assert_equal 5, queue.size
    # send one more
  assert queue.push('a6')
    # check queue size again
  assert_equal 6, queue.size
end

#test_25_message_receive_pop_deleteObject



153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# File 'test/sqs_test.rb', line 153

def test_25_message_receive_pop_delete
  queue = Aws::Sqs::Queue.create(@s, "#{@queue_name}_24", false)
    # get queue size
  size = queue.size
    # get first message
  m1 = queue.receive(10)
  assert m1.is_a?(Aws::Sqs::Message)
    # pop second message
  m2 = queue.pop
  assert m2.is_a?(Aws::Sqs::Message)
    # make sure that queue size has decreased
  assert_equal size-1, queue.size
    # delete messsage
  assert m1.delete
    # make sure that queue size has decreased again
  assert_equal size-2, queue.size
end

#test_26Object



171
172
173
174
175
176
177
178
179
# File 'test/sqs_test.rb', line 171

def test_26
  queue = Aws::Sqs::Queue.create(@s, "#{@queue_name}_24", false)
    # lock message
  queue.receive(100)
    # clear queue
  assert queue.clear
    # queue size is greater than zero
  assert queue.size>0
end

#test_27_set_amazon_problemsObject



181
182
183
184
185
186
187
188
189
190
# File 'test/sqs_test.rb', line 181

def test_27_set_amazon_problems
  original_problems = Aws::SqsInterface.amazon_problems
  assert(original_problems.length > 0)
  Aws::SqsInterface.amazon_problems= original_problems << "A New Problem"
  new_problems = Aws::SqsInterface.amazon_problems
  assert_equal(new_problems, original_problems)

  Aws::SqsInterface.amazon_problems= nil
  assert_nil(Aws::SqsInterface.amazon_problems)
end

#test_28_check_threading_modelObject



192
193
194
195
196
# File 'test/sqs_test.rb', line 192

def test_28_check_threading_model
  assert(!@sqs.multi_thread)
  newsqs = Aws::SqsInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key, {:multi_thread => true})
  assert(newsqs.multi_thread)
end

#wait_for_queue_url(queue_name) ⇒ Object

Wait for the queue to appear in the queues list. Amazon needs some time to after the queue creation to place it to the accessible queues list. If we dont want to get the additional faults then wait a bit…



18
19
20
21
22
23
24
25
26
27
28
29
# File 'test/sqs_test.rb', line 18

def wait_for_queue_url(queue_name)
  queue_url = nil
  until queue_url
    queue_url = @sqs.queue_url_by_name(queue_name)
    unless queue_url
      print '-'
      STDOUT.flush
      sleep 1
    end
  end
  queue_url
end