stomp 1.1.10 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +17 -0
- data/README.rdoc +11 -3
- data/Rakefile +2 -2
- data/bin/catstomp +3 -3
- data/examples/client11_ex1.rb +78 -0
- data/examples/client11_putget1.rb +57 -0
- data/examples/conn11_ex1.rb +101 -0
- data/examples/conn11_ex2.rb +75 -0
- data/examples/conn11_hb1.rb +46 -0
- data/examples/consumer.rb +2 -0
- data/examples/get11conn_ex1.rb +107 -0
- data/examples/get11conn_ex2.rb +67 -0
- data/examples/logexamp.rb +18 -2
- data/examples/publisher.rb +2 -0
- data/examples/put11conn_ex1.rb +43 -0
- data/examples/putget11_rh1.rb +81 -0
- data/examples/slogger.rb +79 -1
- data/examples/stomp11_common.rb +45 -0
- data/examples/topic_consumer.rb +19 -0
- data/examples/topic_publisher.rb +15 -0
- data/lib/stomp.rb +4 -0
- data/lib/stomp/client.rb +36 -4
- data/lib/stomp/codec.rb +41 -0
- data/lib/stomp/connection.rb +623 -29
- data/lib/stomp/constants.rb +78 -0
- data/lib/stomp/errors.rb +60 -2
- data/lib/stomp/ext/hash.rb +3 -1
- data/lib/stomp/message.rb +32 -3
- data/lib/stomp/version.rb +4 -2
- data/spec/client_shared_examples.rb +2 -0
- data/spec/client_spec.rb +2 -0
- data/spec/connection_spec.rb +30 -9
- data/spec/message_spec.rb +2 -0
- data/spec/spec_helper.rb +2 -0
- data/stomp.gemspec +25 -24
- data/test/test_client.rb +152 -44
- data/test/test_codec.rb +83 -0
- data/test/test_connection.rb +138 -25
- data/test/test_connection1p.rb +251 -0
- data/test/test_helper.rb +48 -0
- data/test/test_message.rb +69 -19
- data/test/tlogger.rb +155 -0
- metadata +52 -69
data/test/test_client.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
1
3
|
$:.unshift(File.dirname(__FILE__))
|
2
4
|
|
3
5
|
require 'test_helper'
|
@@ -6,14 +8,14 @@ class TestClient < Test::Unit::TestCase
|
|
6
8
|
include TestBase
|
7
9
|
|
8
10
|
def setup
|
9
|
-
@client =
|
11
|
+
@client = get_client()
|
10
12
|
# Multi_thread test data
|
11
13
|
@max_threads = 20
|
12
14
|
@max_msgs = 50
|
13
15
|
end
|
14
16
|
|
15
17
|
def teardown
|
16
|
-
@client.close if @client # allow tests to close
|
18
|
+
@client.close if @client.open? # allow tests to close
|
17
19
|
end
|
18
20
|
|
19
21
|
def test_ack_api_works
|
@@ -23,9 +25,12 @@ class TestClient < Test::Unit::TestCase
|
|
23
25
|
@client.subscribe(make_destination, {:ack => 'client'}) {|msg| received = msg}
|
24
26
|
sleep 0.01 until received
|
25
27
|
assert_equal message_text, received.body
|
26
|
-
|
27
28
|
receipt = nil
|
28
|
-
|
29
|
+
ack_headers = {}
|
30
|
+
if @client.protocol > Stomp::SPL_10
|
31
|
+
ack_headers["subscription"] = received.headers["subscription"]
|
32
|
+
end
|
33
|
+
@client.acknowledge(received, ack_headers) {|r| receipt = r}
|
29
34
|
sleep 0.01 until receipt
|
30
35
|
assert_not_nil receipt.headers['receipt-id']
|
31
36
|
end unless ENV['STOMP_RABBIT']
|
@@ -50,7 +55,7 @@ class TestClient < Test::Unit::TestCase
|
|
50
55
|
|
51
56
|
# was never acked so should be resent to next client
|
52
57
|
|
53
|
-
@client =
|
58
|
+
@client = get_client()
|
54
59
|
received2 = nil
|
55
60
|
@client.subscribe(make_destination) {|msg| received2 = msg}
|
56
61
|
sleep 0.01 until received2
|
@@ -78,7 +83,6 @@ class TestClient < Test::Unit::TestCase
|
|
78
83
|
assert_equal(@client.disconnect_receipt.headers['receipt-id'],
|
79
84
|
"xyz789", "receipt sent and received should match")
|
80
85
|
}
|
81
|
-
@client = nil
|
82
86
|
end
|
83
87
|
|
84
88
|
def test_publish_then_sub
|
@@ -128,27 +132,51 @@ class TestClient < Test::Unit::TestCase
|
|
128
132
|
|
129
133
|
@client.begin 'tx1'
|
130
134
|
message = nil
|
131
|
-
|
135
|
+
sid = nil
|
136
|
+
if @client.protocol() == Stomp::SPL_10
|
137
|
+
@client.subscribe(make_destination, :ack => 'client') {|m| message = m}
|
138
|
+
else
|
139
|
+
sid = @client.uuid()
|
140
|
+
@client.subscribe(make_destination, :ack => 'client', :id => sid) {|m| message = m}
|
141
|
+
end
|
132
142
|
sleep 0.01 until message
|
133
143
|
assert_equal message_text, message.body
|
134
|
-
|
135
|
-
|
136
|
-
|
144
|
+
assert_nothing_raised {
|
145
|
+
if @client.protocol() == Stomp::SPL_10
|
146
|
+
@client.acknowledge message, :transaction => 'tx1'
|
147
|
+
else
|
148
|
+
@client.acknowledge message, :transaction => 'tx1', :subscription => sid
|
149
|
+
end
|
150
|
+
message = nil
|
151
|
+
@client.abort 'tx1'
|
152
|
+
}
|
137
153
|
|
138
154
|
# lets recreate the connection
|
139
155
|
teardown
|
140
156
|
setup
|
141
|
-
|
142
|
-
|
157
|
+
sid = nil
|
158
|
+
assert_nothing_raised {
|
159
|
+
if @client.protocol() == Stomp::SPL_10
|
160
|
+
@client.subscribe(make_destination, :ack => 'client') {|m| message = m}
|
161
|
+
else
|
162
|
+
sid = @client.uuid()
|
163
|
+
@client.subscribe(make_destination, :ack => 'client', :id => sid) {|m| message = m}
|
164
|
+
end
|
165
|
+
}
|
143
166
|
Timeout::timeout(4) do
|
144
167
|
sleep 0.01 until message
|
145
168
|
end
|
146
169
|
assert_not_nil message
|
147
170
|
assert_equal message_text, message.body
|
148
|
-
|
171
|
+
assert_nothing_raised {
|
149
172
|
@client.begin 'tx2'
|
150
|
-
|
151
|
-
|
173
|
+
if @client.protocol() == Stomp::SPL_10
|
174
|
+
@client.acknowledge message, :transaction => 'tx2'
|
175
|
+
else
|
176
|
+
@client.acknowledge message, :transaction => 'tx2', :subscription => sid
|
177
|
+
end
|
178
|
+
@client.commit 'tx2'
|
179
|
+
}
|
152
180
|
end
|
153
181
|
|
154
182
|
def test_raise_on_multiple_subscriptions_to_same_make_destination
|
@@ -243,12 +271,22 @@ class TestClient < Test::Unit::TestCase
|
|
243
271
|
|
244
272
|
@client.begin 'tx1'
|
245
273
|
message = nil
|
246
|
-
|
274
|
+
sid = nil
|
275
|
+
if @client.protocol() == Stomp::SPL_10
|
276
|
+
@client.subscribe(make_destination, :ack => 'client') { |m| message = m }
|
277
|
+
else
|
278
|
+
sid = @client.uuid()
|
279
|
+
@client.subscribe(make_destination, :ack => 'client', :id => sid) { |m| message = m }
|
280
|
+
end
|
247
281
|
|
248
282
|
sleep 0.1 while message.nil?
|
249
283
|
|
250
284
|
assert_equal message_text, message.body
|
251
|
-
@client.
|
285
|
+
if @client.protocol() == Stomp::SPL_10
|
286
|
+
@client.acknowledge message, :transaction => 'tx1'
|
287
|
+
else
|
288
|
+
@client.acknowledge message, :transaction => 'tx1', :subscription => sid
|
289
|
+
end
|
252
290
|
message = nil
|
253
291
|
@client.abort 'tx1'
|
254
292
|
|
@@ -258,7 +296,11 @@ class TestClient < Test::Unit::TestCase
|
|
258
296
|
assert_equal message_text, message.body
|
259
297
|
|
260
298
|
@client.begin 'tx2'
|
261
|
-
@client.
|
299
|
+
if @client.protocol() == Stomp::SPL_10
|
300
|
+
@client.acknowledge message, :transaction => 'tx2'
|
301
|
+
else
|
302
|
+
@client.acknowledge message, :transaction => 'tx2', :subscription => sid
|
303
|
+
end
|
262
304
|
@client.commit 'tx2'
|
263
305
|
end
|
264
306
|
|
@@ -270,28 +312,37 @@ class TestClient < Test::Unit::TestCase
|
|
270
312
|
message = nil
|
271
313
|
dest = make_destination
|
272
314
|
to_send = message_text
|
273
|
-
client =
|
274
|
-
|
315
|
+
client = get_client()
|
316
|
+
sid = nil
|
317
|
+
if @client.protocol() == Stomp::SPL_10
|
275
318
|
client.subscribe(dest, :ack => 'client') { |m| message = m }
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
319
|
+
else
|
320
|
+
sid = client.uuid()
|
321
|
+
client.subscribe(dest, :ack => 'client', :id => sid) { |m| message = m }
|
322
|
+
end
|
323
|
+
@client.publish dest, to_send
|
324
|
+
Timeout::timeout(4) do
|
325
|
+
sleep 0.01 until message
|
326
|
+
end
|
281
327
|
assert_equal to_send, message.body, "first body check"
|
282
|
-
|
283
|
-
client.unsubscribe dest
|
284
|
-
|
285
|
-
|
328
|
+
if @client.protocol() == Stomp::SPL_10
|
329
|
+
client.unsubscribe dest
|
330
|
+
else
|
331
|
+
client.unsubscribe dest, :subscription => sid
|
332
|
+
end
|
333
|
+
client.close
|
286
334
|
# Same message should remain on the queue. Receive it again with ack=>auto.
|
287
335
|
message_copy = nil
|
288
|
-
client =
|
289
|
-
|
336
|
+
client = get_client()
|
337
|
+
if @client.protocol() == Stomp::SPL_10
|
290
338
|
client.subscribe(dest, :ack => 'auto') { |m| message_copy = m }
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
339
|
+
else
|
340
|
+
sid = client.uuid()
|
341
|
+
client.subscribe(dest, :ack => 'auto', :id => sid) { |m| message_copy = m }
|
342
|
+
end
|
343
|
+
Timeout::timeout(4) do
|
344
|
+
sleep 0.01 until message_copy
|
345
|
+
end
|
295
346
|
assert_equal to_send, message_copy.body, "second body check"
|
296
347
|
assert_equal message.headers['message-id'], message_copy.headers['message-id'], "header check" unless ENV['STOMP_RABBIT']
|
297
348
|
end
|
@@ -301,7 +352,11 @@ class TestClient < Test::Unit::TestCase
|
|
301
352
|
dest = make_destination
|
302
353
|
Thread.new(@client) do |acli|
|
303
354
|
assert_nothing_raised {
|
304
|
-
acli.
|
355
|
+
if acli.protocol() == Stomp::SPL_10
|
356
|
+
acli.subscribe(dest) { |m| msg = m }
|
357
|
+
else
|
358
|
+
acli.subscribe(dest, :id => acli.uuid()) { |m| msg = m }
|
359
|
+
end
|
305
360
|
Timeout::timeout(4) do
|
306
361
|
sleep 0.01 until msg
|
307
362
|
end
|
@@ -322,14 +377,26 @@ class TestClient < Test::Unit::TestCase
|
|
322
377
|
# Threads within threads .....
|
323
378
|
Thread.new(@client) do |acli|
|
324
379
|
assert_nothing_raised {
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
380
|
+
# this is ugly .....
|
381
|
+
if acli.protocol() == Stomp::SPL_10
|
382
|
+
acli.subscribe(dest) { |m|
|
383
|
+
msg = m
|
384
|
+
lock.synchronize do
|
385
|
+
msg_ctr += 1
|
386
|
+
end
|
387
|
+
# Simulate message processing
|
388
|
+
sleep 0.05
|
389
|
+
}
|
390
|
+
else
|
391
|
+
acli.subscribe(dest, :id => acli.uuid()) { |m|
|
392
|
+
msg = m
|
393
|
+
lock.synchronize do
|
394
|
+
msg_ctr += 1
|
395
|
+
end
|
396
|
+
# Simulate message processing
|
397
|
+
sleep 0.05
|
398
|
+
}
|
399
|
+
end
|
333
400
|
}
|
334
401
|
end
|
335
402
|
end
|
@@ -351,6 +418,47 @@ class TestClient < Test::Unit::TestCase
|
|
351
418
|
assert_equal @max_msgs, msg_ctr
|
352
419
|
end
|
353
420
|
|
421
|
+
def test_closed_checks_client
|
422
|
+
@client.close
|
423
|
+
#
|
424
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
425
|
+
m = Stomp::Message.new("")
|
426
|
+
@client.acknowledge(m) {|r| receipt = r}
|
427
|
+
end
|
428
|
+
#
|
429
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
430
|
+
@client.begin("dummy_data")
|
431
|
+
end
|
432
|
+
#
|
433
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
434
|
+
@client.commit("dummy_data")
|
435
|
+
end
|
436
|
+
#
|
437
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
438
|
+
@client.abort("dummy_data")
|
439
|
+
end
|
440
|
+
#
|
441
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
442
|
+
@client.subscribe("dummy_data", {:ack => 'auto'}) {|msg| received = msg}
|
443
|
+
end
|
444
|
+
#
|
445
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
446
|
+
@client.unsubscribe("dummy_data")
|
447
|
+
end
|
448
|
+
#
|
449
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
450
|
+
@client.publish("dummy_data","dummy_data")
|
451
|
+
end
|
452
|
+
#
|
453
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
454
|
+
@client.unreceive("dummy_data")
|
455
|
+
end
|
456
|
+
#
|
457
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
458
|
+
@client.close("dummy_data")
|
459
|
+
end
|
460
|
+
end
|
461
|
+
|
354
462
|
private
|
355
463
|
def message_text
|
356
464
|
name = caller_method_name unless name
|
data/test/test_codec.rb
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
$:.unshift(File.dirname(__FILE__))
|
4
|
+
|
5
|
+
require 'test_helper'
|
6
|
+
|
7
|
+
class TestCodec < Test::Unit::TestCase
|
8
|
+
include TestBase
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@conn = get_connection()
|
12
|
+
# Data for multi_thread tests
|
13
|
+
@max_threads = 20
|
14
|
+
@max_msgs = 100
|
15
|
+
end
|
16
|
+
|
17
|
+
def teardown
|
18
|
+
@conn.disconnect if @conn.open? # allow tests to disconnect
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_1000_check_notneeded
|
22
|
+
test_data = [
|
23
|
+
"a",
|
24
|
+
"abcdefghijklmnopqrstuvwxyz",
|
25
|
+
"ªºÀÁ",
|
26
|
+
"AÇBØCꞇDẼ",
|
27
|
+
"ªºÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ" +
|
28
|
+
"ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġDŽDždžLJLjǼǽǾǿȀȁȂȃȌȍȒɰɵɲɮᴘᴤᴭᴥᵻᶅ" +
|
29
|
+
"ᶑṆṌṕṽẄẂỚỘⅱⅲꜨꝐꞂ",
|
30
|
+
]
|
31
|
+
#
|
32
|
+
test_data.each do |s|
|
33
|
+
#
|
34
|
+
s_decoded = Stomp::HeaderCodec::decode(s)
|
35
|
+
assert_equal s, s_decoded, "Sanity check decode: #{s} | #{s_decoded}"
|
36
|
+
s_reencoded = Stomp::HeaderCodec::encode(s_decoded)
|
37
|
+
assert_equal s_decoded, s_reencoded, "Sanity check reencode: #{s_decoded} | #{s_reencoded}"
|
38
|
+
#
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
#
|
43
|
+
def test_1010_basic_encode_decode
|
44
|
+
test_data = [
|
45
|
+
[ "\\\\", "\\" ],
|
46
|
+
["\\n", "\n"],
|
47
|
+
["\\c", ":"],
|
48
|
+
["\\\\\\n\\c", "\\\n:"],
|
49
|
+
["\\c\\n\\\\", ":\n\\"],
|
50
|
+
["\\\\\\c", "\\:"],
|
51
|
+
["c\\cc", "c:c"],
|
52
|
+
["n\\nn", "n\nn"],
|
53
|
+
]
|
54
|
+
#
|
55
|
+
test_data.each do |s|
|
56
|
+
#
|
57
|
+
s_decoded = Stomp::HeaderCodec::encode(s[0])
|
58
|
+
assert_equal s[1], s_decoded, "Sanity check encode: #{s[1]} | #{s_decoded}"
|
59
|
+
#
|
60
|
+
s_encoded = Stomp::HeaderCodec::decode(s[1])
|
61
|
+
assert_equal s[0], s_encoded, "Sanity check decode: #{s[0]} | #{s_encoded}"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
#
|
66
|
+
def test_1020_fancier
|
67
|
+
test_data = [
|
68
|
+
[ "a\\\\b", "a\\b" ],
|
69
|
+
[ "\\\\\\n\\c", "\\\n:" ],
|
70
|
+
]
|
71
|
+
#
|
72
|
+
test_data.each do |s|
|
73
|
+
#
|
74
|
+
s_decoded = Stomp::HeaderCodec::encode(s[0])
|
75
|
+
assert_equal s[1], s_decoded, "Sanity check encode: #{s[1]} | #{s_decoded}"
|
76
|
+
#
|
77
|
+
s_encoded = Stomp::HeaderCodec::decode(s[1])
|
78
|
+
assert_equal s[0], s_encoded, "Sanity check decode: #{s[0]} | #{s_encoded}"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
end # of class
|
83
|
+
|
data/test/test_connection.rb
CHANGED
@@ -1,19 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
1
3
|
$:.unshift(File.dirname(__FILE__))
|
2
4
|
|
3
5
|
require 'test_helper'
|
4
6
|
|
5
|
-
class
|
7
|
+
class TestConnection < Test::Unit::TestCase
|
6
8
|
include TestBase
|
7
9
|
|
8
10
|
def setup
|
9
|
-
@conn =
|
11
|
+
@conn = get_connection()
|
10
12
|
# Data for multi_thread tests
|
11
13
|
@max_threads = 20
|
12
14
|
@max_msgs = 100
|
13
15
|
end
|
14
16
|
|
15
17
|
def teardown
|
16
|
-
@conn.disconnect if @conn # allow tests to disconnect
|
18
|
+
@conn.disconnect if @conn.open? # allow tests to disconnect
|
17
19
|
end
|
18
20
|
|
19
21
|
def test_connection_exists
|
@@ -21,7 +23,7 @@ class TestStomp < Test::Unit::TestCase
|
|
21
23
|
end
|
22
24
|
|
23
25
|
def test_no_length
|
24
|
-
|
26
|
+
conn_subscribe make_destination
|
25
27
|
#
|
26
28
|
@conn.publish make_destination, "test_stomp#test_no_length",
|
27
29
|
{ :suppress_content_length => true }
|
@@ -31,18 +33,22 @@ class TestStomp < Test::Unit::TestCase
|
|
31
33
|
@conn.publish make_destination, "test_stomp#test_\000_length",
|
32
34
|
{ :suppress_content_length => true }
|
33
35
|
msg2 = @conn.receive
|
34
|
-
|
36
|
+
if @conn.protocol == Stomp::SPL_10
|
37
|
+
assert_equal "test_stomp#test_", msg2.body
|
38
|
+
else
|
39
|
+
assert_equal "test_stomp#test_\000_length", msg2.body
|
40
|
+
end
|
35
41
|
end unless ENV['STOMP_RABBIT']
|
36
42
|
|
37
43
|
def test_explicit_receive
|
38
|
-
|
44
|
+
conn_subscribe make_destination
|
39
45
|
@conn.publish make_destination, "test_stomp#test_explicit_receive"
|
40
46
|
msg = @conn.receive
|
41
47
|
assert_equal "test_stomp#test_explicit_receive", msg.body
|
42
48
|
end
|
43
49
|
|
44
50
|
def test_receipt
|
45
|
-
|
51
|
+
conn_subscribe make_destination, :receipt => "abc"
|
46
52
|
msg = @conn.receive
|
47
53
|
assert_equal "abc", msg.headers['receipt-id']
|
48
54
|
end
|
@@ -54,18 +60,28 @@ class TestStomp < Test::Unit::TestCase
|
|
54
60
|
assert_equal(@conn.disconnect_receipt.headers['receipt-id'],
|
55
61
|
"abc123", "receipt sent and received should match")
|
56
62
|
}
|
57
|
-
@conn = nil
|
58
63
|
end
|
59
64
|
|
60
65
|
def test_client_ack_with_symbol
|
61
|
-
@conn.
|
66
|
+
if @conn.protocol == Stomp::SPL_10
|
67
|
+
@conn.subscribe make_destination, :ack => :client
|
68
|
+
else
|
69
|
+
sid = @conn.uuid()
|
70
|
+
@conn.subscribe make_destination, :ack => :client, :id => sid
|
71
|
+
end
|
62
72
|
@conn.publish make_destination, "test_stomp#test_client_ack_with_symbol"
|
63
73
|
msg = @conn.receive
|
64
|
-
|
74
|
+
assert_nothing_raised {
|
75
|
+
if @conn.protocol == Stomp::SPL_10
|
76
|
+
@conn.ack msg.headers['message-id']
|
77
|
+
else
|
78
|
+
@conn.ack msg.headers['message-id'], :subscription => sid
|
79
|
+
end
|
80
|
+
}
|
65
81
|
end
|
66
82
|
|
67
83
|
def test_embedded_null
|
68
|
-
|
84
|
+
conn_subscribe make_destination
|
69
85
|
@conn.publish make_destination, "a\0"
|
70
86
|
msg = @conn.receive
|
71
87
|
assert_equal "a\0" , msg.body
|
@@ -83,15 +99,63 @@ class TestStomp < Test::Unit::TestCase
|
|
83
99
|
assert_equal true, @conn.closed?
|
84
100
|
end
|
85
101
|
|
102
|
+
def test_closed_checks_conn
|
103
|
+
@conn.disconnect
|
104
|
+
#
|
105
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
106
|
+
@conn.ack("dummy_data")
|
107
|
+
end
|
108
|
+
#
|
109
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
110
|
+
@conn.begin("dummy_data")
|
111
|
+
end
|
112
|
+
#
|
113
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
114
|
+
@conn.commit("dummy_data")
|
115
|
+
end
|
116
|
+
#
|
117
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
118
|
+
@conn.abort("dummy_data")
|
119
|
+
end
|
120
|
+
#
|
121
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
122
|
+
conn_subscribe("dummy_data")
|
123
|
+
end
|
124
|
+
#
|
125
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
126
|
+
@conn.unsubscribe("dummy_data")
|
127
|
+
end
|
128
|
+
#
|
129
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
130
|
+
@conn.publish("dummy_data","dummy_data")
|
131
|
+
end
|
132
|
+
#
|
133
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
134
|
+
@conn.unreceive("dummy_data")
|
135
|
+
end
|
136
|
+
#
|
137
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
138
|
+
@conn.disconnect("dummy_data")
|
139
|
+
end
|
140
|
+
#
|
141
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
142
|
+
m = @conn.receive
|
143
|
+
end
|
144
|
+
#
|
145
|
+
assert_raise Stomp::Error::NoCurrentConnection do
|
146
|
+
m = @conn.poll
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
86
150
|
def test_response_is_instance_of_message_class
|
87
|
-
|
151
|
+
conn_subscribe make_destination
|
88
152
|
@conn.publish make_destination, "a\0"
|
89
153
|
msg = @conn.receive
|
90
154
|
assert_instance_of Stomp::Message , msg
|
91
155
|
end
|
92
156
|
|
93
157
|
def test_message_to_s
|
94
|
-
|
158
|
+
conn_subscribe make_destination
|
95
159
|
@conn.publish make_destination, "a\0"
|
96
160
|
msg = @conn.receive
|
97
161
|
assert_match /^<Stomp::Message headers=/ , msg.to_s
|
@@ -102,7 +166,7 @@ class TestStomp < Test::Unit::TestCase
|
|
102
166
|
end
|
103
167
|
|
104
168
|
def test_messages_with_multipleLine_ends
|
105
|
-
|
169
|
+
conn_subscribe make_destination
|
106
170
|
@conn.publish make_destination, "a\n\n"
|
107
171
|
@conn.publish make_destination, "b\n\na\n\n"
|
108
172
|
|
@@ -114,7 +178,7 @@ class TestStomp < Test::Unit::TestCase
|
|
114
178
|
end
|
115
179
|
|
116
180
|
def test_publish_two_messages
|
117
|
-
|
181
|
+
conn_subscribe make_destination
|
118
182
|
@conn.publish make_destination, "a\0"
|
119
183
|
@conn.publish make_destination, "b\0"
|
120
184
|
msg_a = @conn.receive
|
@@ -132,7 +196,7 @@ class TestStomp < Test::Unit::TestCase
|
|
132
196
|
end
|
133
197
|
end
|
134
198
|
#
|
135
|
-
|
199
|
+
conn_subscribe( make_destination )
|
136
200
|
message = Time.now.to_s
|
137
201
|
@conn.publish(make_destination, message)
|
138
202
|
sleep 1
|
@@ -142,7 +206,7 @@ class TestStomp < Test::Unit::TestCase
|
|
142
206
|
|
143
207
|
def test_thread_poll_one
|
144
208
|
received = nil
|
145
|
-
max_sleep = (RUBY_VERSION =~ /1\.8
|
209
|
+
max_sleep = (RUBY_VERSION =~ /1\.8/) ? 10 : 1
|
146
210
|
Thread.new(@conn) do |amq|
|
147
211
|
while true
|
148
212
|
received = amq.poll
|
@@ -152,7 +216,7 @@ class TestStomp < Test::Unit::TestCase
|
|
152
216
|
end
|
153
217
|
end
|
154
218
|
#
|
155
|
-
|
219
|
+
conn_subscribe( make_destination )
|
156
220
|
message = Time.now.to_s
|
157
221
|
@conn.publish(make_destination, message)
|
158
222
|
sleep max_sleep+1
|
@@ -178,13 +242,14 @@ class TestStomp < Test::Unit::TestCase
|
|
178
242
|
end
|
179
243
|
end
|
180
244
|
#
|
181
|
-
|
245
|
+
conn_subscribe( dest )
|
182
246
|
1.upto(@max_msgs) do |mnum|
|
183
247
|
msg = Time.now.to_s + " #{mnum}"
|
184
248
|
@conn.publish(dest, msg)
|
185
249
|
end
|
186
250
|
#
|
187
|
-
max_sleep = (RUBY_VERSION =~ /1\.8
|
251
|
+
max_sleep = (RUBY_VERSION =~ /1\.8/) ? 30 : 5
|
252
|
+
max_sleep = 30 if RUBY_ENGINE =~ /mingw/
|
188
253
|
sleep_incr = 0.10
|
189
254
|
total_slept = 0
|
190
255
|
while true
|
@@ -194,7 +259,7 @@ class TestStomp < Test::Unit::TestCase
|
|
194
259
|
sleep sleep_incr
|
195
260
|
end
|
196
261
|
assert_equal @max_msgs, msg_ctr
|
197
|
-
end
|
262
|
+
end unless RUBY_ENGINE =~ /jruby/
|
198
263
|
|
199
264
|
def test_multi_thread_poll
|
200
265
|
#
|
@@ -220,13 +285,14 @@ class TestStomp < Test::Unit::TestCase
|
|
220
285
|
end
|
221
286
|
end
|
222
287
|
#
|
223
|
-
|
288
|
+
conn_subscribe( dest )
|
224
289
|
1.upto(@max_msgs) do |mnum|
|
225
290
|
msg = Time.now.to_s + " #{mnum}"
|
226
291
|
@conn.publish(dest, msg)
|
227
292
|
end
|
228
293
|
#
|
229
294
|
max_sleep = (RUBY_VERSION =~ /1\.8\.6/) ? 30 : 5
|
295
|
+
max_sleep = 30 if RUBY_ENGINE =~ /mingw/
|
230
296
|
sleep_incr = 0.10
|
231
297
|
total_slept = 0
|
232
298
|
while true
|
@@ -236,20 +302,20 @@ class TestStomp < Test::Unit::TestCase
|
|
236
302
|
sleep sleep_incr
|
237
303
|
end
|
238
304
|
assert_equal @max_msgs, msg_ctr
|
239
|
-
end
|
305
|
+
end unless RUBY_ENGINE =~ /jruby/
|
240
306
|
|
241
307
|
def test_nil_body
|
242
308
|
dest = make_destination
|
243
309
|
assert_nothing_raised {
|
244
310
|
@conn.publish dest, nil
|
245
311
|
}
|
246
|
-
|
312
|
+
conn_subscribe dest
|
247
313
|
msg = @conn.receive
|
248
314
|
assert_equal "", msg.body
|
249
315
|
end
|
250
316
|
|
251
317
|
def test_transaction
|
252
|
-
|
318
|
+
conn_subscribe make_destination
|
253
319
|
|
254
320
|
@conn.begin "txA"
|
255
321
|
@conn.publish make_destination, "txn message", 'transaction' => "txA"
|
@@ -264,5 +330,52 @@ class TestStomp < Test::Unit::TestCase
|
|
264
330
|
assert_equal "txn message", msg.body
|
265
331
|
end
|
266
332
|
|
333
|
+
def test_duplicate_subscription
|
334
|
+
@conn.disconnect # not reliable
|
335
|
+
@conn = Stomp::Connection.open(user, passcode, host, port, true) # reliable
|
336
|
+
dest = make_destination
|
337
|
+
conn_subscribe dest
|
338
|
+
#
|
339
|
+
assert_raise Stomp::Error::DuplicateSubscription do
|
340
|
+
conn_subscribe dest
|
341
|
+
end
|
342
|
+
end
|
343
|
+
|
344
|
+
def test_nil_connparms
|
345
|
+
@conn.disconnect
|
346
|
+
#
|
347
|
+
assert_nothing_raised do
|
348
|
+
@conn = Stomp::Connection.open(user, passcode, host, port, false, 5, nil)
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
352
|
+
def test_nack11p_0010
|
353
|
+
if @conn.protocol == Stomp::SPL_10
|
354
|
+
assert_raise Stomp::Error::UnsupportedProtocolError do
|
355
|
+
@conn.nack "dummy msg-id"
|
356
|
+
end
|
357
|
+
else
|
358
|
+
sid = @conn.uuid()
|
359
|
+
dest = make_destination
|
360
|
+
@conn.subscribe dest, :ack => :client, :id => sid
|
361
|
+
smsg = "test_stomp#test_nack01: #{Time.now.to_f}"
|
362
|
+
@conn.publish make_destination, smsg
|
363
|
+
msg = @conn.receive
|
364
|
+
assert_equal smsg, msg.body
|
365
|
+
assert_nothing_raised {
|
366
|
+
@conn.nack msg.headers["message-id"], :subscription => sid
|
367
|
+
sleep 0.05 # Give racy brokers a chance to handle the last nack before unsubscribe
|
368
|
+
@conn.unsubscribe dest, :id => sid
|
369
|
+
}
|
370
|
+
# phase 2
|
371
|
+
teardown()
|
372
|
+
setup()
|
373
|
+
sid = @conn.uuid()
|
374
|
+
@conn.subscribe dest, :ack => :auto, :id => sid
|
375
|
+
msg2 = @conn.receive
|
376
|
+
assert_equal smsg, msg2.body
|
377
|
+
end
|
378
|
+
end
|
379
|
+
|
267
380
|
end
|
268
381
|
|