stomp 1.1.10 → 1.2.0
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.
- 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
|
|