stomp 1.2.4 → 1.2.5
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 +11 -0
- data/README.rdoc +38 -26
- data/Rakefile +3 -0
- data/bin/catstomp +34 -34
- data/bin/stompcat +36 -36
- data/examples/client11_ex1.rb +64 -55
- data/examples/client11_putget1.rb +47 -35
- data/examples/conn11_ex1.rb +59 -51
- data/examples/conn11_ex2.rb +59 -50
- data/examples/conn11_hb1.rb +35 -26
- data/examples/consumer.rb +25 -12
- data/examples/get11conn_ex1.rb +97 -89
- data/examples/get11conn_ex2.rb +55 -47
- data/examples/logexamp.rb +66 -52
- data/examples/logexamp_ssl.rb +66 -52
- data/examples/publisher.rb +21 -10
- data/examples/put11conn_ex1.rb +35 -24
- data/examples/putget11_rh1.rb +66 -56
- data/examples/slogger.rb +65 -52
- data/examples/ssl_uc1.rb +24 -13
- data/examples/ssl_uc1_ciphers.rb +28 -15
- data/examples/ssl_uc2.rb +26 -16
- data/examples/ssl_uc2_ciphers.rb +31 -18
- data/examples/ssl_uc3.rb +25 -14
- data/examples/ssl_uc3_ciphers.rb +31 -18
- data/examples/ssl_uc4.rb +26 -15
- data/examples/ssl_uc4_ciphers.rb +32 -19
- data/examples/ssl_ucx_default_ciphers.rb +25 -12
- data/examples/stomp11_common.rb +16 -15
- data/examples/topic_consumer.rb +23 -10
- data/examples/topic_publisher.rb +22 -8
- data/lib/client/utils.rb +116 -0
- data/lib/connection/heartbeats.rb +173 -0
- data/lib/connection/netio.rb +322 -0
- data/lib/connection/utf8.rb +294 -0
- data/lib/connection/utils.rb +104 -0
- data/lib/stomp/client.rb +127 -179
- data/lib/stomp/codec.rb +5 -2
- data/lib/stomp/connection.rb +109 -865
- data/lib/stomp/constants.rb +52 -33
- data/lib/stomp/errors.rb +56 -5
- data/lib/stomp/ext/hash.rb +4 -0
- data/lib/stomp/message.rb +49 -29
- data/lib/stomp/sslparams.rb +83 -71
- data/lib/stomp/version.rb +3 -1
- data/lib/stomp.rb +18 -9
- data/stomp.gemspec +58 -3
- data/test/test_client.rb +28 -1
- data/test/test_codec.rb +8 -2
- data/test/test_connection.rb +29 -0
- data/test/test_connection1p.rb +31 -16
- data/test/test_helper.rb +20 -3
- data/test/test_message.rb +8 -3
- data/test/test_ssl.rb +10 -4
- data/test/tlogger.rb +16 -15
- metadata +59 -4
data/stomp.gemspec
CHANGED
@@ -5,17 +5,67 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{stomp}
|
8
|
-
s.version = "1.2.
|
8
|
+
s.version = "1.2.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Brian McCallister", "Marius Mathiesen", "Thiago Morello", "Guy M. Allard"]
|
12
|
-
s.date = %q{2012-
|
12
|
+
s.date = %q{2012-08-04}
|
13
13
|
s.description = %q{Ruby client for the Stomp messaging protocol. Note that this gem is no longer supported on rubyforge.}
|
14
14
|
s.email = ["brianm@apache.org", "marius@stones.com", "morellon@gmail.com", "allard.guy.m@gmail.com"]
|
15
15
|
s.executables = ["catstomp", "stompcat"]
|
16
16
|
s.extra_rdoc_files = [
|
17
|
+
"CHANGELOG.rdoc",
|
17
18
|
"LICENSE",
|
18
|
-
"README.rdoc"
|
19
|
+
"README.rdoc",
|
20
|
+
"examples/client11_ex1.rb",
|
21
|
+
"examples/client11_putget1.rb",
|
22
|
+
"examples/conn11_ex1.rb",
|
23
|
+
"examples/conn11_ex2.rb",
|
24
|
+
"examples/conn11_hb1.rb",
|
25
|
+
"examples/consumer.rb",
|
26
|
+
"examples/get11conn_ex1.rb",
|
27
|
+
"examples/get11conn_ex2.rb",
|
28
|
+
"examples/logexamp.rb",
|
29
|
+
"examples/logexamp_ssl.rb",
|
30
|
+
"examples/publisher.rb",
|
31
|
+
"examples/put11conn_ex1.rb",
|
32
|
+
"examples/putget11_rh1.rb",
|
33
|
+
"examples/slogger.rb",
|
34
|
+
"examples/ssl_uc1.rb",
|
35
|
+
"examples/ssl_uc1_ciphers.rb",
|
36
|
+
"examples/ssl_uc2.rb",
|
37
|
+
"examples/ssl_uc2_ciphers.rb",
|
38
|
+
"examples/ssl_uc3.rb",
|
39
|
+
"examples/ssl_uc3_ciphers.rb",
|
40
|
+
"examples/ssl_uc4.rb",
|
41
|
+
"examples/ssl_uc4_ciphers.rb",
|
42
|
+
"examples/ssl_ucx_default_ciphers.rb",
|
43
|
+
"examples/stomp11_common.rb",
|
44
|
+
"examples/topic_consumer.rb",
|
45
|
+
"examples/topic_publisher.rb",
|
46
|
+
"lib/client/utils.rb",
|
47
|
+
"lib/connection/heartbeats.rb",
|
48
|
+
"lib/connection/netio.rb",
|
49
|
+
"lib/connection/utf8.rb",
|
50
|
+
"lib/connection/utils.rb",
|
51
|
+
"lib/stomp.rb",
|
52
|
+
"lib/stomp/client.rb",
|
53
|
+
"lib/stomp/codec.rb",
|
54
|
+
"lib/stomp/connection.rb",
|
55
|
+
"lib/stomp/constants.rb",
|
56
|
+
"lib/stomp/errors.rb",
|
57
|
+
"lib/stomp/ext/hash.rb",
|
58
|
+
"lib/stomp/message.rb",
|
59
|
+
"lib/stomp/sslparams.rb",
|
60
|
+
"lib/stomp/version.rb",
|
61
|
+
"test/test_client.rb",
|
62
|
+
"test/test_codec.rb",
|
63
|
+
"test/test_connection.rb",
|
64
|
+
"test/test_connection1p.rb",
|
65
|
+
"test/test_helper.rb",
|
66
|
+
"test/test_message.rb",
|
67
|
+
"test/test_ssl.rb",
|
68
|
+
"test/tlogger.rb"
|
19
69
|
]
|
20
70
|
s.files = [
|
21
71
|
"CHANGELOG.rdoc",
|
@@ -50,6 +100,11 @@ Gem::Specification.new do |s|
|
|
50
100
|
"examples/stomp11_common.rb",
|
51
101
|
"examples/topic_consumer.rb",
|
52
102
|
"examples/topic_publisher.rb",
|
103
|
+
"lib/client/utils.rb",
|
104
|
+
"lib/connection/heartbeats.rb",
|
105
|
+
"lib/connection/netio.rb",
|
106
|
+
"lib/connection/utf8.rb",
|
107
|
+
"lib/connection/utils.rb",
|
53
108
|
"lib/stomp.rb",
|
54
109
|
"lib/stomp/client.rb",
|
55
110
|
"lib/stomp/codec.rb",
|
data/test/test_client.rb
CHANGED
@@ -4,6 +4,11 @@ $:.unshift(File.dirname(__FILE__))
|
|
4
4
|
|
5
5
|
require 'test_helper'
|
6
6
|
|
7
|
+
=begin
|
8
|
+
|
9
|
+
Main class for testing Stomp::Client instances.
|
10
|
+
|
11
|
+
=end
|
7
12
|
class TestClient < Test::Unit::TestCase
|
8
13
|
include TestBase
|
9
14
|
|
@@ -18,12 +23,14 @@ class TestClient < Test::Unit::TestCase
|
|
18
23
|
@client.close if @client.open? # allow tests to close
|
19
24
|
end
|
20
25
|
|
26
|
+
# Test poll works.
|
21
27
|
def test_poll_async
|
22
28
|
# If the test 'hangs' here, Connection#poll is broken.
|
23
29
|
m = @client.poll
|
24
30
|
assert m.nil?
|
25
31
|
end
|
26
32
|
|
33
|
+
# Test ACKs.
|
27
34
|
def test_ack_api_works
|
28
35
|
@client.publish make_destination, message_text, {:suppress_content_length => true}
|
29
36
|
|
@@ -41,6 +48,7 @@ class TestClient < Test::Unit::TestCase
|
|
41
48
|
assert_not_nil receipt.headers['receipt-id']
|
42
49
|
end unless ENV['STOMP_RABBIT']
|
43
50
|
|
51
|
+
# Test Client subscribe
|
44
52
|
def test_asynch_subscribe
|
45
53
|
received = false
|
46
54
|
@client.subscribe(make_destination) {|msg| received = msg}
|
@@ -50,6 +58,7 @@ class TestClient < Test::Unit::TestCase
|
|
50
58
|
assert_equal message_text, received.body
|
51
59
|
end
|
52
60
|
|
61
|
+
# Test not ACKing messages.
|
53
62
|
def test_noack
|
54
63
|
@client.publish make_destination, message_text
|
55
64
|
|
@@ -71,17 +80,19 @@ class TestClient < Test::Unit::TestCase
|
|
71
80
|
assert_equal received.headers['message-id'], received2.headers['message-id'] unless ENV['STOMP_RABBIT']
|
72
81
|
end unless RUBY_ENGINE =~ /jruby/
|
73
82
|
|
83
|
+
# Test obtaining a RECEIPT via a listener.
|
74
84
|
def test_receipts
|
75
85
|
receipt = false
|
76
86
|
@client.publish(make_destination, message_text) {|r| receipt = r}
|
77
87
|
sleep 0.1 until receipt
|
78
|
-
|
88
|
+
assert_equal receipt.command, Stomp::CMD_RECEIPT
|
79
89
|
message = nil
|
80
90
|
@client.subscribe(make_destination) {|m| message = m}
|
81
91
|
sleep 0.1 until message
|
82
92
|
assert_equal message_text, message.body
|
83
93
|
end
|
84
94
|
|
95
|
+
# Test requesting a receipt on disconnect.
|
85
96
|
def test_disconnect_receipt
|
86
97
|
@client.close :receipt => "xyz789"
|
87
98
|
assert_nothing_raised {
|
@@ -91,6 +102,7 @@ class TestClient < Test::Unit::TestCase
|
|
91
102
|
}
|
92
103
|
end
|
93
104
|
|
105
|
+
# Test publish and immediate subscribe.
|
94
106
|
def test_publish_then_sub
|
95
107
|
@client.publish make_destination, message_text
|
96
108
|
message = nil
|
@@ -100,12 +112,14 @@ class TestClient < Test::Unit::TestCase
|
|
100
112
|
assert_equal message_text, message.body
|
101
113
|
end
|
102
114
|
|
115
|
+
# Test that Client subscribe requires a block.
|
103
116
|
def test_subscribe_requires_block
|
104
117
|
assert_raise(RuntimeError) do
|
105
118
|
@client.subscribe make_destination
|
106
119
|
end
|
107
120
|
end unless RUBY_ENGINE =~ /jruby/
|
108
121
|
|
122
|
+
# Test transaction publish.
|
109
123
|
def test_transactional_publish
|
110
124
|
@client.begin 'tx1'
|
111
125
|
@client.publish make_destination, message_text, :transaction => 'tx1'
|
@@ -118,6 +132,7 @@ class TestClient < Test::Unit::TestCase
|
|
118
132
|
assert_equal message_text, message.body
|
119
133
|
end
|
120
134
|
|
135
|
+
# Test transaction publish and abort.
|
121
136
|
def test_transaction_publish_then_rollback
|
122
137
|
@client.begin 'tx1'
|
123
138
|
@client.publish make_destination, "first_message", :transaction => 'tx1'
|
@@ -133,6 +148,7 @@ class TestClient < Test::Unit::TestCase
|
|
133
148
|
assert_equal "second_message", message.body
|
134
149
|
end unless RUBY_ENGINE =~ /jruby/
|
135
150
|
|
151
|
+
# Test transaction publish and abort, receive with new client.
|
136
152
|
def test_transaction_ack_rollback_with_new_client
|
137
153
|
@client.publish make_destination, message_text
|
138
154
|
|
@@ -185,6 +201,7 @@ class TestClient < Test::Unit::TestCase
|
|
185
201
|
}
|
186
202
|
end
|
187
203
|
|
204
|
+
# Test that subscription destinations must be unique for a Client.
|
188
205
|
def test_raise_on_multiple_subscriptions_to_same_make_destination
|
189
206
|
subscribe_dest = make_destination
|
190
207
|
@client.subscribe(subscribe_dest) {|m| nil }
|
@@ -193,6 +210,7 @@ class TestClient < Test::Unit::TestCase
|
|
193
210
|
end
|
194
211
|
end
|
195
212
|
|
213
|
+
# Test that subscription IDs must be unique for a Client.
|
196
214
|
def test_raise_on_multiple_subscriptions_to_same_id
|
197
215
|
subscribe_dest = make_destination
|
198
216
|
@client.subscribe(subscribe_dest, {'id' => 'myid'}) {|m| nil }
|
@@ -201,6 +219,7 @@ class TestClient < Test::Unit::TestCase
|
|
201
219
|
end
|
202
220
|
end
|
203
221
|
|
222
|
+
# Test that subscription IDs must be unique for a Client, mixed id specification.
|
204
223
|
def test_raise_on_multiple_subscriptions_to_same_id_mixed
|
205
224
|
subscribe_dest = make_destination
|
206
225
|
@client.subscribe(subscribe_dest, {'id' => 'myid'}) {|m| nil }
|
@@ -209,6 +228,7 @@ class TestClient < Test::Unit::TestCase
|
|
209
228
|
end
|
210
229
|
end
|
211
230
|
|
231
|
+
# Test wildcard subscribe. Primarily for AMQ.
|
212
232
|
def test_asterisk_wildcard_subscribe
|
213
233
|
queue_base_name = make_destination
|
214
234
|
queue1 = queue_base_name + ".a"
|
@@ -239,6 +259,7 @@ class TestClient < Test::Unit::TestCase
|
|
239
259
|
|
240
260
|
end unless ENV['STOMP_NOWILD']
|
241
261
|
|
262
|
+
# Test wildcard subscribe with >. Primarily for AMQ.
|
242
263
|
def test_greater_than_wildcard_subscribe
|
243
264
|
queue_base_name = make_destination + "."
|
244
265
|
queue1 = queue_base_name + "foo.a"
|
@@ -272,6 +293,7 @@ class TestClient < Test::Unit::TestCase
|
|
272
293
|
assert results.all?{|a| a == true }
|
273
294
|
end unless ENV['STOMP_NOWILD'] || ENV['STOMP_DOTQUEUE']
|
274
295
|
|
296
|
+
# Test transaction with client side redilivery.
|
275
297
|
def test_transaction_with_client_side_redelivery
|
276
298
|
@client.publish make_destination, message_text
|
277
299
|
|
@@ -310,10 +332,12 @@ class TestClient < Test::Unit::TestCase
|
|
310
332
|
@client.commit 'tx2'
|
311
333
|
end
|
312
334
|
|
335
|
+
# Test that a connection frame is received.
|
313
336
|
def test_connection_frame
|
314
337
|
assert_not_nil @client.connection_frame
|
315
338
|
end unless RUBY_ENGINE =~ /jruby/
|
316
339
|
|
340
|
+
# Test basic unsubscribe.
|
317
341
|
def test_unsubscribe
|
318
342
|
message = nil
|
319
343
|
dest = make_destination
|
@@ -353,6 +377,7 @@ class TestClient < Test::Unit::TestCase
|
|
353
377
|
assert_equal message.headers['message-id'], message_copy.headers['message-id'], "header check" unless ENV['STOMP_RABBIT']
|
354
378
|
end
|
355
379
|
|
380
|
+
# Test subscribe from a worker thread.
|
356
381
|
def test_thread_one_subscribe
|
357
382
|
msg = nil
|
358
383
|
dest = make_destination
|
@@ -374,6 +399,7 @@ class TestClient < Test::Unit::TestCase
|
|
374
399
|
assert_not_nil msg
|
375
400
|
end unless RUBY_ENGINE =~ /jruby/
|
376
401
|
|
402
|
+
# Test subscribe from multiple worker threads.
|
377
403
|
def test_thread_multi_subscribe
|
378
404
|
#
|
379
405
|
lock = Mutex.new
|
@@ -424,6 +450,7 @@ class TestClient < Test::Unit::TestCase
|
|
424
450
|
assert_equal @max_msgs, msg_ctr
|
425
451
|
end
|
426
452
|
|
453
|
+
# Test that methods detect no client connection is present.
|
427
454
|
def test_closed_checks_client
|
428
455
|
@client.close
|
429
456
|
#
|
data/test/test_codec.rb
CHANGED
@@ -4,6 +4,11 @@ $:.unshift(File.dirname(__FILE__))
|
|
4
4
|
|
5
5
|
require 'test_helper'
|
6
6
|
|
7
|
+
=begin
|
8
|
+
|
9
|
+
Main class for testing Stomp::HeadreCodec methods.
|
10
|
+
|
11
|
+
=end
|
7
12
|
class TestCodec < Test::Unit::TestCase
|
8
13
|
include TestBase
|
9
14
|
|
@@ -18,6 +23,7 @@ class TestCodec < Test::Unit::TestCase
|
|
18
23
|
@conn.disconnect if @conn.open? # allow tests to disconnect
|
19
24
|
end
|
20
25
|
|
26
|
+
# Test that the codec does nothing to strings that do not need encoding.
|
21
27
|
def test_1000_check_notneeded
|
22
28
|
test_data = [
|
23
29
|
"a",
|
@@ -39,7 +45,7 @@ class TestCodec < Test::Unit::TestCase
|
|
39
45
|
end
|
40
46
|
end
|
41
47
|
|
42
|
-
#
|
48
|
+
# Test the basic encoding / decoding requirements.
|
43
49
|
def test_1010_basic_encode_decode
|
44
50
|
test_data = [
|
45
51
|
[ "\\\\", "\\" ],
|
@@ -62,7 +68,7 @@ class TestCodec < Test::Unit::TestCase
|
|
62
68
|
end
|
63
69
|
end
|
64
70
|
|
65
|
-
#
|
71
|
+
# Test more complex strings with the codec.
|
66
72
|
def test_1020_fancier
|
67
73
|
test_data = [
|
68
74
|
[ "a\\\\b", "a\\b" ],
|
data/test/test_connection.rb
CHANGED
@@ -4,6 +4,11 @@ $:.unshift(File.dirname(__FILE__))
|
|
4
4
|
|
5
5
|
require 'test_helper'
|
6
6
|
|
7
|
+
=begin
|
8
|
+
|
9
|
+
Main class for testing Stomp::Connection instances.
|
10
|
+
|
11
|
+
=end
|
7
12
|
class TestConnection < Test::Unit::TestCase
|
8
13
|
include TestBase
|
9
14
|
|
@@ -18,10 +23,12 @@ class TestConnection < Test::Unit::TestCase
|
|
18
23
|
@conn.disconnect if @conn.open? # allow tests to disconnect
|
19
24
|
end
|
20
25
|
|
26
|
+
# Test basic connection creation.
|
21
27
|
def test_connection_exists
|
22
28
|
assert_not_nil @conn
|
23
29
|
end
|
24
30
|
|
31
|
+
# Test asynchronous polling.
|
25
32
|
def test_poll_async
|
26
33
|
@conn.subscribe("/queue/do.not.put.messages.on.this.queue", :id => "a.no.messages.queue")
|
27
34
|
# If the test 'hangs' here, Connection#poll is broken.
|
@@ -29,6 +36,7 @@ class TestConnection < Test::Unit::TestCase
|
|
29
36
|
assert m.nil?
|
30
37
|
end
|
31
38
|
|
39
|
+
# Test suppression of content length header.
|
32
40
|
def test_no_length
|
33
41
|
conn_subscribe make_destination
|
34
42
|
#
|
@@ -47,6 +55,7 @@ class TestConnection < Test::Unit::TestCase
|
|
47
55
|
end
|
48
56
|
end unless ENV['STOMP_RABBIT']
|
49
57
|
|
58
|
+
# Test direct / explicit receive.
|
50
59
|
def test_explicit_receive
|
51
60
|
conn_subscribe make_destination
|
52
61
|
@conn.publish make_destination, "test_stomp#test_explicit_receive"
|
@@ -54,12 +63,14 @@ class TestConnection < Test::Unit::TestCase
|
|
54
63
|
assert_equal "test_stomp#test_explicit_receive", msg.body
|
55
64
|
end
|
56
65
|
|
66
|
+
# Test asking for a receipt.
|
57
67
|
def test_receipt
|
58
68
|
conn_subscribe make_destination, :receipt => "abc"
|
59
69
|
msg = @conn.receive
|
60
70
|
assert_equal "abc", msg.headers['receipt-id']
|
61
71
|
end
|
62
72
|
|
73
|
+
# Test asking for a receipt on disconnect.
|
63
74
|
def test_disconnect_receipt
|
64
75
|
@conn.disconnect :receipt => "abc123"
|
65
76
|
assert_nothing_raised {
|
@@ -69,6 +80,7 @@ class TestConnection < Test::Unit::TestCase
|
|
69
80
|
}
|
70
81
|
end
|
71
82
|
|
83
|
+
# Test ACKs using symbols for header keys.
|
72
84
|
def test_client_ack_with_symbol
|
73
85
|
if @conn.protocol == Stomp::SPL_10
|
74
86
|
@conn.subscribe make_destination, :ack => :client
|
@@ -87,6 +99,7 @@ class TestConnection < Test::Unit::TestCase
|
|
87
99
|
}
|
88
100
|
end
|
89
101
|
|
102
|
+
# Test a message with 0x00 embedded in the body.
|
90
103
|
def test_embedded_null
|
91
104
|
conn_subscribe make_destination
|
92
105
|
@conn.publish make_destination, "a\0"
|
@@ -94,18 +107,21 @@ class TestConnection < Test::Unit::TestCase
|
|
94
107
|
assert_equal "a\0" , msg.body
|
95
108
|
end
|
96
109
|
|
110
|
+
# Test connection open checking.
|
97
111
|
def test_connection_open?
|
98
112
|
assert_equal true , @conn.open?
|
99
113
|
@conn.disconnect
|
100
114
|
assert_equal false, @conn.open?
|
101
115
|
end
|
102
116
|
|
117
|
+
# Test connection closed checking.
|
103
118
|
def test_connection_closed?
|
104
119
|
assert_equal false, @conn.closed?
|
105
120
|
@conn.disconnect
|
106
121
|
assert_equal true, @conn.closed?
|
107
122
|
end
|
108
123
|
|
124
|
+
# Test that methods detect a closed connection.
|
109
125
|
def test_closed_checks_conn
|
110
126
|
@conn.disconnect
|
111
127
|
#
|
@@ -154,6 +170,7 @@ class TestConnection < Test::Unit::TestCase
|
|
154
170
|
end
|
155
171
|
end
|
156
172
|
|
173
|
+
# Test that we receive a Stomp::Message.
|
157
174
|
def test_response_is_instance_of_message_class
|
158
175
|
conn_subscribe make_destination
|
159
176
|
@conn.publish make_destination, "a\0"
|
@@ -161,6 +178,7 @@ class TestConnection < Test::Unit::TestCase
|
|
161
178
|
assert_instance_of Stomp::Message , msg
|
162
179
|
end
|
163
180
|
|
181
|
+
# Test converting a Message to a string.
|
164
182
|
def test_message_to_s
|
165
183
|
conn_subscribe make_destination
|
166
184
|
@conn.publish make_destination, "a\0"
|
@@ -168,10 +186,12 @@ class TestConnection < Test::Unit::TestCase
|
|
168
186
|
assert_match /^<Stomp::Message headers=/ , msg.to_s
|
169
187
|
end
|
170
188
|
|
189
|
+
# Test that a connection frame is present.
|
171
190
|
def test_connection_frame
|
172
191
|
assert_not_nil @conn.connection_frame
|
173
192
|
end
|
174
193
|
|
194
|
+
# Test messages with multiple line ends.
|
175
195
|
def test_messages_with_multipleLine_ends
|
176
196
|
conn_subscribe make_destination
|
177
197
|
@conn.publish make_destination, "a\n\n"
|
@@ -184,6 +204,7 @@ class TestConnection < Test::Unit::TestCase
|
|
184
204
|
assert_equal "b\n\na\n\n", msg_b.body
|
185
205
|
end
|
186
206
|
|
207
|
+
# Test publishing multiple messages.
|
187
208
|
def test_publish_two_messages
|
188
209
|
conn_subscribe make_destination
|
189
210
|
@conn.publish make_destination, "a\0"
|
@@ -211,6 +232,7 @@ class TestConnection < Test::Unit::TestCase
|
|
211
232
|
assert_equal message, received.body
|
212
233
|
end
|
213
234
|
|
235
|
+
# Test polling with a single thread.
|
214
236
|
def test_thread_poll_one
|
215
237
|
received = nil
|
216
238
|
max_sleep = (RUBY_VERSION =~ /1\.8/) ? 10 : 1
|
@@ -231,6 +253,7 @@ class TestConnection < Test::Unit::TestCase
|
|
231
253
|
assert_equal message, received.body
|
232
254
|
end
|
233
255
|
|
256
|
+
# Test receiving with multiple threads.
|
234
257
|
def test_multi_thread_receive
|
235
258
|
lock = Mutex.new
|
236
259
|
msg_ctr = 0
|
@@ -268,6 +291,7 @@ class TestConnection < Test::Unit::TestCase
|
|
268
291
|
assert_equal @max_msgs, msg_ctr
|
269
292
|
end unless RUBY_ENGINE =~ /jruby/
|
270
293
|
|
294
|
+
# Test polling with multiple threads.
|
271
295
|
def test_multi_thread_poll
|
272
296
|
#
|
273
297
|
lock = Mutex.new
|
@@ -311,6 +335,7 @@ class TestConnection < Test::Unit::TestCase
|
|
311
335
|
assert_equal @max_msgs, msg_ctr
|
312
336
|
end unless RUBY_ENGINE =~ /jruby/
|
313
337
|
|
338
|
+
# Test using a nil body.
|
314
339
|
def test_nil_body
|
315
340
|
dest = make_destination
|
316
341
|
assert_nothing_raised {
|
@@ -321,6 +346,7 @@ class TestConnection < Test::Unit::TestCase
|
|
321
346
|
assert_equal "", msg.body
|
322
347
|
end
|
323
348
|
|
349
|
+
# Test transaction message sequencing.
|
324
350
|
def test_transaction
|
325
351
|
conn_subscribe make_destination
|
326
352
|
|
@@ -337,6 +363,7 @@ class TestConnection < Test::Unit::TestCase
|
|
337
363
|
assert_equal "txn message", msg.body
|
338
364
|
end
|
339
365
|
|
366
|
+
# Test duplicate subscriptions.
|
340
367
|
def test_duplicate_subscription
|
341
368
|
@conn.disconnect # not reliable
|
342
369
|
@conn = Stomp::Connection.open(user, passcode, host, port, true) # reliable
|
@@ -348,6 +375,7 @@ class TestConnection < Test::Unit::TestCase
|
|
348
375
|
end
|
349
376
|
end
|
350
377
|
|
378
|
+
# Test nil 1.1 connection parameters.
|
351
379
|
def test_nil_connparms
|
352
380
|
@conn.disconnect
|
353
381
|
#
|
@@ -356,6 +384,7 @@ class TestConnection < Test::Unit::TestCase
|
|
356
384
|
end
|
357
385
|
end
|
358
386
|
|
387
|
+
# Basic NAK test.
|
359
388
|
def test_nack11p_0010
|
360
389
|
if @conn.protocol == Stomp::SPL_10
|
361
390
|
assert_raise Stomp::Error::UnsupportedProtocolError do
|
data/test/test_connection1p.rb
CHANGED
@@ -4,6 +4,11 @@ $:.unshift(File.dirname(__FILE__))
|
|
4
4
|
|
5
5
|
require 'test_helper'
|
6
6
|
|
7
|
+
=begin
|
8
|
+
|
9
|
+
Main class for testing Stomp::Connection instances, protocol level 1.1+.
|
10
|
+
|
11
|
+
=end
|
7
12
|
class TestConnection1P < Test::Unit::TestCase
|
8
13
|
include TestBase
|
9
14
|
|
@@ -14,11 +19,13 @@ class TestConnection1P < Test::Unit::TestCase
|
|
14
19
|
def teardown
|
15
20
|
@conn.disconnect if @conn.open? # allow tests to disconnect
|
16
21
|
end
|
17
|
-
|
22
|
+
|
23
|
+
# Test basic connection open.
|
18
24
|
def test_conn_1p_0000
|
19
25
|
assert @conn.open?
|
20
26
|
end
|
21
|
-
|
27
|
+
|
28
|
+
# Test missing connect headers.
|
22
29
|
def test_conn_1p_0010
|
23
30
|
#
|
24
31
|
cha = {:host => "localhost"}
|
@@ -31,7 +38,8 @@ class TestConnection1P < Test::Unit::TestCase
|
|
31
38
|
conn = Stomp::Connection.open(user, passcode, host, port, false, 5, chb)
|
32
39
|
end
|
33
40
|
end
|
34
|
-
|
41
|
+
|
42
|
+
# Test requesting only a 1.0 connection.
|
35
43
|
def test_conn_1p_0020
|
36
44
|
#
|
37
45
|
cha = {:host => "localhost", "accept-version" => "1.0"}
|
@@ -43,7 +51,8 @@ class TestConnection1P < Test::Unit::TestCase
|
|
43
51
|
end
|
44
52
|
assert_equal conn.protocol, Stomp::SPL_10
|
45
53
|
end
|
46
|
-
|
54
|
+
|
55
|
+
# Test requesting only a 1.1 connection.
|
47
56
|
def test_conn_1p_0030
|
48
57
|
#
|
49
58
|
cha = {:host => "localhost", "accept-version" => "1.1"}
|
@@ -55,7 +64,8 @@ class TestConnection1P < Test::Unit::TestCase
|
|
55
64
|
end
|
56
65
|
assert_equal conn.protocol, Stomp::SPL_11
|
57
66
|
end
|
58
|
-
|
67
|
+
|
68
|
+
# Test basic request for no heartbeats.
|
59
69
|
def test_conn_1p_0040
|
60
70
|
#
|
61
71
|
cha = {:host => "localhost", "accept-version" => "1.1"}
|
@@ -68,8 +78,8 @@ class TestConnection1P < Test::Unit::TestCase
|
|
68
78
|
end
|
69
79
|
assert_equal conn.protocol, Stomp::SPL_11
|
70
80
|
end
|
71
|
-
#
|
72
81
|
|
82
|
+
# Test malformed heartbeat header.
|
73
83
|
def test_conn_1p_0050
|
74
84
|
#
|
75
85
|
cha = {:host => "localhost", "accept-version" => "1.1"}
|
@@ -80,7 +90,8 @@ class TestConnection1P < Test::Unit::TestCase
|
|
80
90
|
conn = Stomp::Connection.open(user, passcode, host, port, false, 5, cha)
|
81
91
|
end
|
82
92
|
end
|
83
|
-
|
93
|
+
|
94
|
+
# Test malformed heartbeat header.
|
84
95
|
def test_conn_11h_0060
|
85
96
|
#
|
86
97
|
cha = {:host => "localhost", "accept-version" => "1.1"}
|
@@ -91,7 +102,8 @@ class TestConnection1P < Test::Unit::TestCase
|
|
91
102
|
conn = Stomp::Connection.open(user, passcode, host, port, false, 5, cha)
|
92
103
|
end
|
93
104
|
end
|
94
|
-
|
105
|
+
|
106
|
+
# Test a valid heartbeat header.
|
95
107
|
def test_conn_1p_0070
|
96
108
|
#
|
97
109
|
cha = {:host => "localhost", "accept-version" => "1.1"}
|
@@ -106,7 +118,7 @@ class TestConnection1P < Test::Unit::TestCase
|
|
106
118
|
assert conn.hbrecv_interval > 0
|
107
119
|
end
|
108
120
|
|
109
|
-
#
|
121
|
+
# Test only sending heartbeats.
|
110
122
|
def test_conn_1p_0080
|
111
123
|
#
|
112
124
|
cha = {:host => "localhost", "accept-version" => "1.1"}
|
@@ -124,7 +136,7 @@ class TestConnection1P < Test::Unit::TestCase
|
|
124
136
|
hb_asserts_send(conn)
|
125
137
|
end if ENV['STOMP_HB11LONG']
|
126
138
|
|
127
|
-
#
|
139
|
+
# Test only receiving heartbeats.
|
128
140
|
def test_conn_1p_0090
|
129
141
|
#
|
130
142
|
cha = {:host => "localhost", "accept-version" => "1.1"}
|
@@ -143,7 +155,7 @@ class TestConnection1P < Test::Unit::TestCase
|
|
143
155
|
hb_asserts_recv(conn)
|
144
156
|
end if ENV['STOMP_HB11LONG']
|
145
157
|
|
146
|
-
#
|
158
|
+
# Test sending and receiving heartbeats.
|
147
159
|
def test_conn_1p_0100
|
148
160
|
#
|
149
161
|
cha = {:host => "localhost", "accept-version" => "1.1"}
|
@@ -162,7 +174,7 @@ class TestConnection1P < Test::Unit::TestCase
|
|
162
174
|
hb_asserts_both(conn)
|
163
175
|
end if ENV['STOMP_HB11LONG']
|
164
176
|
|
165
|
-
#
|
177
|
+
# Test valid UTF8 data.
|
166
178
|
def test_conn_1p_0110
|
167
179
|
#
|
168
180
|
cha = {:host => "localhost", "accept-version" => "1.1"}
|
@@ -193,7 +205,7 @@ class TestConnection1P < Test::Unit::TestCase
|
|
193
205
|
conn.disconnect
|
194
206
|
end
|
195
207
|
|
196
|
-
#
|
208
|
+
# Test invalid UTF8 data.
|
197
209
|
def test_conn_1p_0120
|
198
210
|
#
|
199
211
|
cha = {:host => "localhost", "accept-version" => "1.1"}
|
@@ -230,6 +242,8 @@ class TestConnection1P < Test::Unit::TestCase
|
|
230
242
|
# Repeated headers test. Currently:
|
231
243
|
# - Apollo emits repeated headers for a 1.1 connection only
|
232
244
|
# - RabbitMQ does not emit repeated headers under any circumstances
|
245
|
+
# - AMQ 5.6 does not emit repeated headers under any circumstances
|
246
|
+
# Pure luck that this runs against AMQ at present.
|
233
247
|
def test_conn_1p_0120
|
234
248
|
dest = make_destination
|
235
249
|
msg = "payload: #{Time.now.to_f}"
|
@@ -253,6 +267,7 @@ class TestConnection1P < Test::Unit::TestCase
|
|
253
267
|
@conn.unsubscribe dest, :id => sid
|
254
268
|
end
|
255
269
|
|
270
|
+
# Test frozen headers.
|
256
271
|
def test_conn_1p_0120
|
257
272
|
dest = make_destination
|
258
273
|
sid = @conn.uuid()
|
@@ -262,7 +277,7 @@ class TestConnection1P < Test::Unit::TestCase
|
|
262
277
|
}
|
263
278
|
end
|
264
279
|
|
265
|
-
#
|
280
|
+
# Test heartbeats with send and receive.
|
266
281
|
def test_conn_1p_0130
|
267
282
|
#
|
268
283
|
cha = {:host => "localhost", "accept-version" => "1.1"}
|
@@ -281,7 +296,7 @@ class TestConnection1P < Test::Unit::TestCase
|
|
281
296
|
hb_asserts_both(conn)
|
282
297
|
end if ENV['STOMP_HB11LONG']
|
283
298
|
|
284
|
-
#
|
299
|
+
# Test heartbeats with send and receive.
|
285
300
|
def test_conn_1p_0130
|
286
301
|
#
|
287
302
|
cha = {:host => "localhost", "accept-version" => "1.1"}
|
@@ -300,7 +315,7 @@ class TestConnection1P < Test::Unit::TestCase
|
|
300
315
|
hb_asserts_both(conn)
|
301
316
|
end if ENV['STOMP_HB11LONG']
|
302
317
|
|
303
|
-
#
|
318
|
+
# Test heartbeats with send and receive.
|
304
319
|
def test_conn_1p_0140
|
305
320
|
#
|
306
321
|
cha = {:host => "localhost", "accept-version" => "1.1"}
|