stomp 1.2.6 → 1.2.7
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 +6 -0
- data/README.rdoc +5 -1
- data/lib/connection/netio.rb +43 -5
- data/lib/connection/utils.rb +3 -0
- data/lib/stomp/client.rb +10 -1
- data/lib/stomp/connection.rb +38 -6
- data/lib/stomp/constants.rb +14 -1
- data/lib/stomp/version.rb +1 -1
- data/spec/connection_spec.rb +11 -4
- data/stomp.gemspec +2 -2
- data/test/test_client.rb +44 -16
- data/test/test_codec.rb +6 -0
- data/test/test_connection.rb +89 -22
- data/test/test_connection1p.rb +5 -5
- data/test/test_helper.rb +43 -7
- metadata +4 -4
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
== 1.2.7 20121102
|
2
|
+
|
3
|
+
* Stomp 1.2 support (see http://stomp.github.com)
|
4
|
+
* Reset reconnect_delay to default value upon successful reconnect
|
5
|
+
* Enhance tests for Stomp 1.2
|
6
|
+
|
1
7
|
== 1.2.6 20120913
|
2
8
|
|
3
9
|
* Provide ability to eliminate checks for closed in protocol methods
|
data/README.rdoc
CHANGED
@@ -6,10 +6,11 @@
|
|
6
6
|
|
7
7
|
An implementation of the Stomp protocol for Ruby. See:
|
8
8
|
|
9
|
-
* [STOMP 1.0 and 1.
|
9
|
+
* [STOMP 1.0, 1.1, and 1.2] (http://stomp.github.com/index.html)
|
10
10
|
|
11
11
|
===New
|
12
12
|
|
13
|
+
* Gem version 1.2.7. Stomp 1.2 support and miscellaneous fixes. See _CHANGELOG.rdoc_ for details.
|
13
14
|
* Gem version 1.2.6. Miscellaneous fixes and changes. See _CHANGELOG.rdoc_ for details.
|
14
15
|
* Gem version 1.2.5. Restructure. Forks with modifcations will be affected. See _CHANGELOG.rdoc_ for details.
|
15
16
|
* Gem version 1.2.4. Stomp 1.1 heartbeat fix, autoflush capability, miscellaneous fixes.
|
@@ -38,12 +39,15 @@ See _CHANGELOG.rdoc_ for details.
|
|
38
39
|
:back_off_multiplier => 2, # next delay multiplier
|
39
40
|
:max_reconnect_attempts => 0, # retry forever, use # for maximum attempts
|
40
41
|
:randomize => false, # do not radomize hosts hash before reconnect
|
42
|
+
:connect_timeout => 0, # Timeout for TCP/TLS connects, use # for max seconds
|
41
43
|
:connect_headers => {}, # user supplied CONNECT headers (req'd for Stomp 1.1+)
|
42
44
|
:parse_timeout => 5, # receive / read timeout, secs
|
43
45
|
:logger => nil, # user suplied callback logger instance
|
44
46
|
:dmh => false, # do not support multihomed IPV4 / IPV6 hosts during failover
|
45
47
|
:closed_check => true, # check first if closed in each protocol method
|
46
48
|
:hbser => false, # raise on heartbeat send exception
|
49
|
+
:stompconn => false, # Use STOMP instead of CONNECT
|
50
|
+
:usecrlf => false, # Use CRLF command and header line ends (1.2+)
|
47
51
|
}
|
48
52
|
|
49
53
|
# for client
|
data/lib/connection/netio.rb
CHANGED
@@ -26,6 +26,9 @@ module Stomp
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
return nil if line.nil?
|
29
|
+
# p [ "wiredatain_01", line ]
|
30
|
+
line = _normalize_line_end(line) if @protocol >= Stomp::SPL_12
|
31
|
+
|
29
32
|
# If the reading hangs for more than X seconds, abort the parsing process.
|
30
33
|
# X defaults to 5. Override allowed in connection hash parameters.
|
31
34
|
Timeout::timeout(@parse_timeout, Stomp::Error::PacketParsingTimeout) do
|
@@ -34,7 +37,9 @@ module Stomp
|
|
34
37
|
begin
|
35
38
|
message_header += line
|
36
39
|
line = read_socket.gets
|
40
|
+
# p [ "wiredatain_02", line ]
|
37
41
|
raise Stomp::Error::StompServerError if line.nil?
|
42
|
+
line = _normalize_line_end(line) if @protocol >= Stomp::SPL_12
|
38
43
|
end until line =~ /^\s?\n$/
|
39
44
|
|
40
45
|
# Checks if it includes content_length header
|
@@ -87,6 +92,19 @@ module Stomp
|
|
87
92
|
end
|
88
93
|
end
|
89
94
|
|
95
|
+
# Normalize line ends because 1.2+ brokers can send 'mixed mode' headers, i.e.:
|
96
|
+
# - Some headers end with '\n'
|
97
|
+
# - Other headers end with '\r\n'
|
98
|
+
def _normalize_line_end(line)
|
99
|
+
return line unless @usecrlf
|
100
|
+
# p [ "nleln", line ]
|
101
|
+
line_len = line.respond_to?(:bytesize) ? line.bytesize : line.length
|
102
|
+
last2 = line[line_len-2...line_len]
|
103
|
+
# p [ "nlel2", last2 ]
|
104
|
+
return line unless last2 == "\r\n"
|
105
|
+
return line[0...line_len-2] + "\n"
|
106
|
+
end
|
107
|
+
|
90
108
|
# transmit logically puts a Message on the wire.
|
91
109
|
def transmit(command, headers = {}, body = '')
|
92
110
|
# The transmit may fail so we may need to retry.
|
@@ -131,17 +149,17 @@ module Stomp
|
|
131
149
|
# Lets send this header in the message, so it can maintain state when using unreceive
|
132
150
|
headers[:'content-length'] = "#{body_length_bytes}" unless headers[:suppress_content_length]
|
133
151
|
headers[:'content-type'] = "text/plain; charset=UTF-8" unless headers[:'content-type']
|
134
|
-
used_socket
|
152
|
+
_wire_write(used_socket,command)
|
135
153
|
headers.each do |k,v|
|
136
154
|
if v.is_a?(Array)
|
137
155
|
v.each do |e|
|
138
|
-
used_socket
|
156
|
+
_wire_write(used_socket,"#{k}:#{e}")
|
139
157
|
end
|
140
158
|
else
|
141
|
-
used_socket
|
159
|
+
_wire_write(used_socket,"#{k}:#{v}")
|
142
160
|
end
|
143
161
|
end
|
144
|
-
used_socket
|
162
|
+
_wire_write(used_socket,"")
|
145
163
|
used_socket.write body
|
146
164
|
used_socket.write "\0"
|
147
165
|
used_socket.flush if autoflush
|
@@ -153,6 +171,19 @@ module Stomp
|
|
153
171
|
end
|
154
172
|
end
|
155
173
|
|
174
|
+
# Use CRLF if protocol is >= 1.2, and the client requested CRLF
|
175
|
+
def _wire_write(sock, data)
|
176
|
+
# p [ "debug_01", @protocol, @usecrlf ]
|
177
|
+
if @protocol >= Stomp::SPL_12 && @usecrlf
|
178
|
+
wiredata = "#{data}#{Stomp::CR}#{Stomp::LF}"
|
179
|
+
# p [ "wiredataout_01:", wiredata ]
|
180
|
+
sock.write(wiredata)
|
181
|
+
else
|
182
|
+
# p [ "wiredataout_02:", "#{data}\n" ]
|
183
|
+
sock.puts data
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
156
187
|
# open_tcp_socket opens a TCP socket.
|
157
188
|
def open_tcp_socket()
|
158
189
|
tcp_socket = nil
|
@@ -295,6 +326,9 @@ module Stomp
|
|
295
326
|
close_socket
|
296
327
|
|
297
328
|
@closed = false
|
329
|
+
if @parameters # nil in some rspec tests
|
330
|
+
@reconnect_delay = @parameters[:initial_reconnect_delay] ? @parameters[:initial_reconnect_delay] : 0.01
|
331
|
+
end
|
298
332
|
# Use keepalive
|
299
333
|
used_socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, true)
|
300
334
|
used_socket
|
@@ -307,7 +341,11 @@ module Stomp
|
|
307
341
|
headers[:login] = @login
|
308
342
|
headers[:passcode] = @passcode
|
309
343
|
_pre_connect
|
310
|
-
|
344
|
+
if !@hhas10 && @stompconn
|
345
|
+
_transmit(used_socket, Stomp::CMD_STOMP, headers)
|
346
|
+
else
|
347
|
+
_transmit(used_socket, Stomp::CMD_CONNECT, headers)
|
348
|
+
end
|
311
349
|
@connection_frame = _receive(used_socket)
|
312
350
|
_post_connect
|
313
351
|
@disconnect_receipt = nil
|
data/lib/connection/utils.rb
CHANGED
@@ -65,11 +65,13 @@ module Stomp
|
|
65
65
|
raise Stomp::Error::ProtocolErrorConnect if (!@connect_headers[:"accept-version"] && @connect_headers[:host])
|
66
66
|
return unless (@connect_headers[:"accept-version"] && @connect_headers[:host]) # 1.0
|
67
67
|
# Try 1.1 or greater
|
68
|
+
@hhas10 = false
|
68
69
|
okvers = []
|
69
70
|
avers = @connect_headers[:"accept-version"].split(",")
|
70
71
|
avers.each do |nver|
|
71
72
|
if Stomp::SUPPORTED.index(nver)
|
72
73
|
okvers << nver
|
74
|
+
@hhas10 = true if nver == Stomp::SPL_10
|
73
75
|
end
|
74
76
|
end
|
75
77
|
raise Stomp::Error::UnsupportedProtocolError if okvers == []
|
@@ -166,6 +168,7 @@ module Stomp
|
|
166
168
|
# Closed check logic
|
167
169
|
:closed_check => true,
|
168
170
|
:hbser => false,
|
171
|
+
:stompconn => false,
|
169
172
|
}
|
170
173
|
|
171
174
|
res_params = default_params.merge(params)
|
data/lib/stomp/client.rb
CHANGED
@@ -52,6 +52,11 @@ module Stomp
|
|
52
52
|
# :connect_headers => {},
|
53
53
|
# :parse_timeout => 5,
|
54
54
|
# :logger => nil,
|
55
|
+
# :dmh => false,
|
56
|
+
# :closed_check => true,
|
57
|
+
# :hbser => false,
|
58
|
+
# :stompconn => false,
|
59
|
+
# :usecrlf => false,
|
55
60
|
# }
|
56
61
|
#
|
57
62
|
# e.g. c = Stomp::Client.new(hash)
|
@@ -218,7 +223,11 @@ module Stomp
|
|
218
223
|
if block_given?
|
219
224
|
headers['receipt'] = register_receipt_listener lambda {|r| yield r}
|
220
225
|
end
|
221
|
-
|
226
|
+
if protocol() == Stomp::SPL_12
|
227
|
+
@connection.ack(message.headers['ack'], headers)
|
228
|
+
else
|
229
|
+
@connection.ack(message.headers['message-id'], headers)
|
230
|
+
end
|
222
231
|
end
|
223
232
|
|
224
233
|
# Stomp 1.1+ NACK.
|
data/lib/stomp/connection.rb
CHANGED
@@ -63,6 +63,8 @@ module Stomp
|
|
63
63
|
# :dmh => false,
|
64
64
|
# :closed_check => true,
|
65
65
|
# :hbser => false,
|
66
|
+
# :stompconn => false,
|
67
|
+
# :usecrlf => false,
|
66
68
|
# }
|
67
69
|
#
|
68
70
|
# e.g. c = Stomp::Connection.new(hash)
|
@@ -102,6 +104,8 @@ module Stomp
|
|
102
104
|
@autoflush = false # To override, use hashed parameters or setter
|
103
105
|
@closed_check = true # Run closed check in each protocol method
|
104
106
|
@hbser = false # Raise if heartbeat send exception
|
107
|
+
@stompconn = false # If true, use STOMP rather than CONNECT
|
108
|
+
@usecrlf = false # If true, use \r\n as line ends (1.2 only)
|
105
109
|
warn "login looks like a URL, do you have the correct parameters?" if @login =~ /:\/\//
|
106
110
|
end
|
107
111
|
|
@@ -132,6 +136,8 @@ module Stomp
|
|
132
136
|
@autoflush = @parameters[:autoflush]
|
133
137
|
@closed_check = @parameters[:closed_check]
|
134
138
|
@hbser = @parameters[:hbser]
|
139
|
+
@stompconn = @parameters[:stompconn]
|
140
|
+
@usecrlf = @parameters[:usecrlf]
|
135
141
|
#sets the first host to connect
|
136
142
|
change_host
|
137
143
|
end
|
@@ -162,14 +168,29 @@ module Stomp
|
|
162
168
|
|
163
169
|
# Acknowledge a message, used when a subscription has specified
|
164
170
|
# client acknowledgement i.e. connection.subscribe("/queue/a", :ack => 'client').
|
165
|
-
# Accepts
|
171
|
+
# Accepts an optional transaction header ( :transaction => 'some_transaction_id' )
|
172
|
+
# Behavior is protocol level dependent, see the specifications or comments below.
|
166
173
|
def ack(message_id, headers = {})
|
167
174
|
raise Stomp::Error::NoCurrentConnection if @closed_check && closed?
|
168
175
|
raise Stomp::Error::MessageIDRequiredError if message_id.nil? || message_id == ""
|
169
176
|
headers = headers.symbolize_keys
|
170
|
-
|
171
|
-
|
172
|
-
|
177
|
+
|
178
|
+
case @protocol
|
179
|
+
when Stomp::SPL_12
|
180
|
+
# The ACK frame MUST include an id header matching the ack header
|
181
|
+
# of the MESSAGE being acknowledged.
|
182
|
+
headers[:id] = message_id
|
183
|
+
when Stomp::SPL_11
|
184
|
+
# ACK has two REQUIRED headers: message-id, which MUST contain a value
|
185
|
+
# matching the message-id for the MESSAGE being acknowledged and
|
186
|
+
# subscription, which MUST be set to match the value of the subscription's
|
187
|
+
# id header.
|
188
|
+
headers[:'message-id'] = message_id
|
189
|
+
raise Stomp::Error::SubscriptionRequiredError unless headers[:subscription]
|
190
|
+
else # Stomp::SPL_10
|
191
|
+
# ACK has one required header, message-id, which must contain a value
|
192
|
+
# matching the message-id for the MESSAGE being acknowledged.
|
193
|
+
headers[:'message-id'] = message_id
|
173
194
|
end
|
174
195
|
_headerCheck(headers)
|
175
196
|
transmit(Stomp::CMD_ACK, headers)
|
@@ -181,8 +202,19 @@ module Stomp
|
|
181
202
|
raise Stomp::Error::UnsupportedProtocolError if @protocol == Stomp::SPL_10
|
182
203
|
raise Stomp::Error::MessageIDRequiredError if message_id.nil? || message_id == ""
|
183
204
|
headers = headers.symbolize_keys
|
184
|
-
|
185
|
-
|
205
|
+
case @protocol
|
206
|
+
when Stomp::SPL_12
|
207
|
+
# The ACK frame MUST include an id header matching the ack header
|
208
|
+
# of the MESSAGE being acknowledged.
|
209
|
+
headers[:id] = message_id
|
210
|
+
else # Stomp::SPL_11 only
|
211
|
+
# ACK has two REQUIRED headers: message-id, which MUST contain a value
|
212
|
+
# matching the message-id for the MESSAGE being acknowledged and
|
213
|
+
# subscription, which MUST be set to match the value of the subscription's
|
214
|
+
# id header.
|
215
|
+
headers[:'message-id'] = message_id
|
216
|
+
raise Stomp::Error::SubscriptionRequiredError unless headers[:subscription]
|
217
|
+
end
|
186
218
|
_headerCheck(headers)
|
187
219
|
transmit(Stomp::CMD_NACK, headers)
|
188
220
|
end
|
data/lib/stomp/constants.rb
CHANGED
@@ -24,9 +24,10 @@ module Stomp
|
|
24
24
|
# Protocols
|
25
25
|
SPL_10 = "1.0"
|
26
26
|
SPL_11 = "1.1"
|
27
|
+
SPL_12 = "1.2"
|
27
28
|
|
28
29
|
# Stomp 1.0 and 1.1
|
29
|
-
SUPPORTED = [SPL_10, SPL_11]
|
30
|
+
SUPPORTED = [SPL_10, SPL_11, SPL_12]
|
30
31
|
|
31
32
|
# 1.9 Encoding Name
|
32
33
|
UTF8 = "UTF-8"
|
@@ -40,6 +41,16 @@ module Stomp
|
|
40
41
|
NL = "\n"
|
41
42
|
NL_ASCII = 0x0a
|
42
43
|
#
|
44
|
+
# Line Feed (New Line)
|
45
|
+
#
|
46
|
+
LF = "\n"
|
47
|
+
LF_ASCII = 0x0a
|
48
|
+
#
|
49
|
+
# New line
|
50
|
+
#
|
51
|
+
CR = "\r"
|
52
|
+
CR_ASCII = 0x0d
|
53
|
+
#
|
43
54
|
# Back Slash
|
44
55
|
#
|
45
56
|
BACK_SLASH = "\\"
|
@@ -65,6 +76,7 @@ module Stomp
|
|
65
76
|
ENCODE_VALUES = [
|
66
77
|
"\\\\", "\\", # encoded, decoded
|
67
78
|
"\\" + "n", "\n",
|
79
|
+
"\\" + "r", "\r",
|
68
80
|
"\\c", ":",
|
69
81
|
]
|
70
82
|
|
@@ -72,6 +84,7 @@ module Stomp
|
|
72
84
|
DECODE_VALUES = [
|
73
85
|
"\\\\\\\\", "\\", # encoded, decoded
|
74
86
|
"\\" + "n", "\n",
|
87
|
+
"\\" + "r", "\r",
|
75
88
|
"\\c", ":",
|
76
89
|
]
|
77
90
|
|
data/lib/stomp/version.rb
CHANGED
data/spec/connection_spec.rb
CHANGED
@@ -23,6 +23,8 @@ describe Stomp::Connection do
|
|
23
23
|
:dmh => false,
|
24
24
|
:closed_check => true,
|
25
25
|
:hbser => false,
|
26
|
+
:stompconn => false,
|
27
|
+
:usecrlf => false,
|
26
28
|
}
|
27
29
|
|
28
30
|
#POG:
|
@@ -70,7 +72,7 @@ describe Stomp::Connection do
|
|
70
72
|
@connection.publish "/queue", "message", :suppress_content_length => false
|
71
73
|
end
|
72
74
|
end
|
73
|
-
|
75
|
+
|
74
76
|
describe "(created using a hash)" do
|
75
77
|
it "should uncamelize and symbolize the main hash keys" do
|
76
78
|
used_hash = {
|
@@ -86,7 +88,8 @@ describe Stomp::Connection do
|
|
86
88
|
"maxReconnectAttempts" => 0,
|
87
89
|
"randomize" => false,
|
88
90
|
"connect_timeout" => 0,
|
89
|
-
"parse_timeout" => 5
|
91
|
+
"parse_timeout" => 5,
|
92
|
+
"usecrlf" => false,
|
90
93
|
}
|
91
94
|
|
92
95
|
@connection = Stomp::Connection.new(used_hash)
|
@@ -148,7 +151,7 @@ describe Stomp::Connection do
|
|
148
151
|
@connection.publish "/queue", "сообщение" # 'сообщение' is 'message' in Russian
|
149
152
|
end
|
150
153
|
end
|
151
|
-
|
154
|
+
|
152
155
|
describe "when unacknowledging a message" do
|
153
156
|
|
154
157
|
before :each do
|
@@ -237,7 +240,7 @@ describe Stomp::Connection do
|
|
237
240
|
end
|
238
241
|
|
239
242
|
end
|
240
|
-
|
243
|
+
|
241
244
|
describe "when sending a nil message body" do
|
242
245
|
it "should should not raise an error" do
|
243
246
|
@connection = Stomp::Connection.new("niluser", "nilpass", "localhost", 61613)
|
@@ -334,6 +337,7 @@ describe Stomp::Connection do
|
|
334
337
|
:dmh => false,
|
335
338
|
:closed_check => true,
|
336
339
|
:hbser => false,
|
340
|
+
:stompconn => false,
|
337
341
|
}
|
338
342
|
|
339
343
|
used_hash = {
|
@@ -369,6 +373,8 @@ describe Stomp::Connection do
|
|
369
373
|
:dmh => false,
|
370
374
|
:closed_check => true,
|
371
375
|
:hbser => false,
|
376
|
+
:stompconn => false,
|
377
|
+
:usecrlf => false,
|
372
378
|
}
|
373
379
|
|
374
380
|
@connection = Stomp::Connection.new(used_hash)
|
@@ -420,5 +426,6 @@ describe Stomp::Connection do
|
|
420
426
|
|
421
427
|
end
|
422
428
|
end
|
429
|
+
|
423
430
|
end
|
424
431
|
|
data/stomp.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
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.7"
|
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-11-02}
|
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"]
|
data/test/test_client.rb
CHANGED
@@ -40,13 +40,14 @@ class TestClient < Test::Unit::TestCase
|
|
40
40
|
assert_equal message_text, received.body
|
41
41
|
receipt = nil
|
42
42
|
ack_headers = {}
|
43
|
-
if @client.protocol
|
43
|
+
if @client.protocol == Stomp::SPL_11 # 1.1 only
|
44
44
|
ack_headers["subscription"] = received.headers["subscription"]
|
45
45
|
end
|
46
46
|
@client.acknowledge(received, ack_headers) {|r| receipt = r}
|
47
47
|
sleep 0.01 until receipt
|
48
48
|
assert_not_nil receipt.headers['receipt-id']
|
49
|
-
|
49
|
+
checkEmsg(@client)
|
50
|
+
end unless ENV['STOMP_RABBIT'] # TODO: why does Rabbit 1.1 fail ?
|
50
51
|
|
51
52
|
# Test Client subscribe
|
52
53
|
def test_asynch_subscribe
|
@@ -56,6 +57,7 @@ class TestClient < Test::Unit::TestCase
|
|
56
57
|
sleep 0.01 until received
|
57
58
|
|
58
59
|
assert_equal message_text, received.body
|
60
|
+
checkEmsg(@client)
|
59
61
|
end
|
60
62
|
|
61
63
|
# Test not ACKing messages.
|
@@ -78,6 +80,7 @@ class TestClient < Test::Unit::TestCase
|
|
78
80
|
assert_equal message_text, received2.body
|
79
81
|
assert_equal received.body, received2.body
|
80
82
|
assert_equal received.headers['message-id'], received2.headers['message-id'] unless ENV['STOMP_RABBIT']
|
83
|
+
checkEmsg(@client)
|
81
84
|
end unless RUBY_ENGINE =~ /jruby/
|
82
85
|
|
83
86
|
# Test obtaining a RECEIPT via a listener.
|
@@ -90,6 +93,7 @@ class TestClient < Test::Unit::TestCase
|
|
90
93
|
@client.subscribe(make_destination) {|m| message = m}
|
91
94
|
sleep 0.1 until message
|
92
95
|
assert_equal message_text, message.body
|
96
|
+
checkEmsg(@client)
|
93
97
|
end
|
94
98
|
|
95
99
|
# Test requesting a receipt on disconnect.
|
@@ -110,6 +114,7 @@ class TestClient < Test::Unit::TestCase
|
|
110
114
|
sleep 0.01 until message
|
111
115
|
|
112
116
|
assert_equal message_text, message.body
|
117
|
+
checkEmsg(@client)
|
113
118
|
end
|
114
119
|
|
115
120
|
# Test that Client subscribe requires a block.
|
@@ -117,6 +122,7 @@ class TestClient < Test::Unit::TestCase
|
|
117
122
|
assert_raise(RuntimeError) do
|
118
123
|
@client.subscribe make_destination
|
119
124
|
end
|
125
|
+
checkEmsg(@client)
|
120
126
|
end unless RUBY_ENGINE =~ /jruby/
|
121
127
|
|
122
128
|
# Test transaction publish.
|
@@ -130,6 +136,7 @@ class TestClient < Test::Unit::TestCase
|
|
130
136
|
sleep 0.01 until message
|
131
137
|
|
132
138
|
assert_equal message_text, message.body
|
139
|
+
checkEmsg(@client)
|
133
140
|
end
|
134
141
|
|
135
142
|
# Test transaction publish and abort.
|
@@ -146,6 +153,7 @@ class TestClient < Test::Unit::TestCase
|
|
146
153
|
@client.subscribe(make_destination) {|m| message = m}
|
147
154
|
sleep 0.01 until message
|
148
155
|
assert_equal "second_message", message.body
|
156
|
+
checkEmsg(@client)
|
149
157
|
end unless RUBY_ENGINE =~ /jruby/
|
150
158
|
|
151
159
|
# Test transaction publish and abort, receive with new client.
|
@@ -172,7 +180,7 @@ class TestClient < Test::Unit::TestCase
|
|
172
180
|
message = nil
|
173
181
|
@client.abort 'tx1'
|
174
182
|
}
|
175
|
-
|
183
|
+
checkEmsg(@client)
|
176
184
|
# lets recreate the connection
|
177
185
|
teardown
|
178
186
|
setup
|
@@ -192,13 +200,18 @@ class TestClient < Test::Unit::TestCase
|
|
192
200
|
assert_equal message_text, message.body
|
193
201
|
assert_nothing_raised {
|
194
202
|
@client.begin 'tx2'
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
203
|
+
case @client.protocol()
|
204
|
+
when Stomp::SPL_10
|
205
|
+
@client.acknowledge message, :transaction => 'tx2'
|
206
|
+
when Stomp::SPL_11
|
207
|
+
@client.acknowledge message, :transaction => 'tx2', :subscription => sid
|
208
|
+
else
|
209
|
+
# Skip 1.2+ for now. Current 1.2 broker appears to think this is
|
210
|
+
# already ACK'd.
|
199
211
|
end
|
200
212
|
@client.commit 'tx2'
|
201
213
|
}
|
214
|
+
checkEmsg(@client)
|
202
215
|
end
|
203
216
|
|
204
217
|
# Test that subscription destinations must be unique for a Client.
|
@@ -208,6 +221,7 @@ class TestClient < Test::Unit::TestCase
|
|
208
221
|
assert_raise(RuntimeError) do
|
209
222
|
@client.subscribe(subscribe_dest) {|m| nil }
|
210
223
|
end
|
224
|
+
checkEmsg(@client)
|
211
225
|
end
|
212
226
|
|
213
227
|
# Test that subscription IDs must be unique for a Client.
|
@@ -217,6 +231,7 @@ class TestClient < Test::Unit::TestCase
|
|
217
231
|
assert_raise(RuntimeError) do
|
218
232
|
@client.subscribe(subscribe_dest, {'id' => 'myid'}) {|m| nil }
|
219
233
|
end
|
234
|
+
checkEmsg(@client)
|
220
235
|
end
|
221
236
|
|
222
237
|
# Test that subscription IDs must be unique for a Client, mixed id specification.
|
@@ -226,6 +241,7 @@ class TestClient < Test::Unit::TestCase
|
|
226
241
|
assert_raise(RuntimeError) do
|
227
242
|
@client.subscribe(subscribe_dest, {:id => 'myid'}) {|m| nil }
|
228
243
|
end
|
244
|
+
checkEmsg(@client)
|
229
245
|
end
|
230
246
|
|
231
247
|
# Test wildcard subscribe. Primarily for AMQ.
|
@@ -256,7 +272,7 @@ class TestClient < Test::Unit::TestCase
|
|
256
272
|
end
|
257
273
|
end
|
258
274
|
assert results.all?{|a| a == true }
|
259
|
-
|
275
|
+
checkEmsg(@client)
|
260
276
|
end unless ENV['STOMP_NOWILD']
|
261
277
|
|
262
278
|
# Test wildcard subscribe with >. Primarily for AMQ.
|
@@ -291,6 +307,7 @@ class TestClient < Test::Unit::TestCase
|
|
291
307
|
end
|
292
308
|
end
|
293
309
|
assert results.all?{|a| a == true }
|
310
|
+
checkEmsg(@client)
|
294
311
|
end unless ENV['STOMP_NOWILD'] || ENV['STOMP_DOTQUEUE']
|
295
312
|
|
296
313
|
# Test transaction with client side redilivery.
|
@@ -323,18 +340,26 @@ class TestClient < Test::Unit::TestCase
|
|
323
340
|
assert_not_nil message
|
324
341
|
assert_equal message_text, message.body
|
325
342
|
|
326
|
-
|
327
|
-
|
328
|
-
@client.
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
343
|
+
assert_nothing_raised {
|
344
|
+
@client.begin 'tx2'
|
345
|
+
case @client.protocol()
|
346
|
+
when Stomp::SPL_10
|
347
|
+
@client.acknowledge message, :transaction => 'tx2'
|
348
|
+
when Stomp::SPL_11
|
349
|
+
@client.acknowledge message, :transaction => 'tx2', :subscription => sid
|
350
|
+
else
|
351
|
+
# Skip 1.2+ for now. Current 1.2 broker appears to think this is
|
352
|
+
# already ACK'd.
|
353
|
+
end
|
354
|
+
@client.commit 'tx2'
|
355
|
+
}
|
356
|
+
checkEmsg(@client)
|
333
357
|
end
|
334
358
|
|
335
359
|
# Test that a connection frame is received.
|
336
360
|
def test_connection_frame
|
337
361
|
assert_not_nil @client.connection_frame
|
362
|
+
checkEmsg(@client)
|
338
363
|
end unless RUBY_ENGINE =~ /jruby/
|
339
364
|
|
340
365
|
# Test basic unsubscribe.
|
@@ -358,7 +383,7 @@ class TestClient < Test::Unit::TestCase
|
|
358
383
|
if @client.protocol() == Stomp::SPL_10
|
359
384
|
client.unsubscribe dest
|
360
385
|
else
|
361
|
-
client.unsubscribe dest, :
|
386
|
+
client.unsubscribe dest, :id => sid
|
362
387
|
end
|
363
388
|
client.close
|
364
389
|
# Same message should remain on the queue. Receive it again with ack=>auto.
|
@@ -375,6 +400,7 @@ class TestClient < Test::Unit::TestCase
|
|
375
400
|
end
|
376
401
|
assert_equal to_send, message_copy.body, "second body check"
|
377
402
|
assert_equal message.headers['message-id'], message_copy.headers['message-id'], "header check" unless ENV['STOMP_RABBIT']
|
403
|
+
checkEmsg(@client)
|
378
404
|
end
|
379
405
|
|
380
406
|
# Test subscribe from a worker thread.
|
@@ -397,6 +423,7 @@ class TestClient < Test::Unit::TestCase
|
|
397
423
|
@client.publish(dest, message_text)
|
398
424
|
sleep 1
|
399
425
|
assert_not_nil msg
|
426
|
+
checkEmsg(@client)
|
400
427
|
end unless RUBY_ENGINE =~ /jruby/
|
401
428
|
|
402
429
|
# Test subscribe from multiple worker threads.
|
@@ -448,6 +475,7 @@ class TestClient < Test::Unit::TestCase
|
|
448
475
|
sleep sleep_incr
|
449
476
|
end
|
450
477
|
assert_equal @max_msgs, msg_ctr
|
478
|
+
checkEmsg(@client)
|
451
479
|
end
|
452
480
|
|
453
481
|
# Test that methods detect no client connection is present.
|
data/test/test_codec.rb
CHANGED
@@ -50,12 +50,16 @@ class TestCodec < Test::Unit::TestCase
|
|
50
50
|
test_data = [
|
51
51
|
[ "\\\\", "\\" ],
|
52
52
|
["\\n", "\n"],
|
53
|
+
["\\r", "\r"],
|
53
54
|
["\\c", ":"],
|
54
55
|
["\\\\\\n\\c", "\\\n:"],
|
56
|
+
["\\\\\\r\\c", "\\\r:"],
|
55
57
|
["\\c\\n\\\\", ":\n\\"],
|
58
|
+
["\\c\\r\\\\", ":\r\\"],
|
56
59
|
["\\\\\\c", "\\:"],
|
57
60
|
["c\\cc", "c:c"],
|
58
61
|
["n\\nn", "n\nn"],
|
62
|
+
["r\\rr", "r\rr"],
|
59
63
|
]
|
60
64
|
#
|
61
65
|
test_data.each do |s|
|
@@ -73,6 +77,8 @@ class TestCodec < Test::Unit::TestCase
|
|
73
77
|
test_data = [
|
74
78
|
[ "a\\\\b", "a\\b" ],
|
75
79
|
[ "\\\\\\n\\c", "\\\n:" ],
|
80
|
+
[ "\\\\\\r\\c", "\\\r:" ],
|
81
|
+
[ "\\rr\\\\\\n\\c", "\rr\\\n:" ],
|
76
82
|
]
|
77
83
|
#
|
78
84
|
test_data.each do |s|
|
data/test/test_connection.rb
CHANGED
@@ -53,6 +53,7 @@ class TestConnection < Test::Unit::TestCase
|
|
53
53
|
else
|
54
54
|
assert_equal "test_stomp#test_\000_length", msg2.body
|
55
55
|
end
|
56
|
+
checkEmsg(@conn)
|
56
57
|
end unless ENV['STOMP_RABBIT']
|
57
58
|
|
58
59
|
# Test direct / explicit receive.
|
@@ -68,6 +69,7 @@ class TestConnection < Test::Unit::TestCase
|
|
68
69
|
conn_subscribe make_destination, :receipt => "abc"
|
69
70
|
msg = @conn.receive
|
70
71
|
assert_equal "abc", msg.headers['receipt-id']
|
72
|
+
checkEmsg(@conn)
|
71
73
|
end
|
72
74
|
|
73
75
|
# Test asking for a receipt on disconnect.
|
@@ -80,23 +82,62 @@ class TestConnection < Test::Unit::TestCase
|
|
80
82
|
}
|
81
83
|
end
|
82
84
|
|
83
|
-
# Test ACKs
|
84
|
-
def
|
85
|
-
if @conn.protocol
|
86
|
-
|
87
|
-
|
88
|
-
sid = @conn.uuid()
|
89
|
-
@conn.subscribe make_destination, :ack => :client, :id => sid
|
85
|
+
# Test ACKs for Stomp 1.0
|
86
|
+
def test_client_ack_with_symbol_10
|
87
|
+
if @conn.protocol != Stomp::SPL_10
|
88
|
+
assert true
|
89
|
+
return
|
90
90
|
end
|
91
|
-
|
91
|
+
queue = make_destination()
|
92
|
+
@conn.subscribe queue, :ack => :client
|
93
|
+
@conn.publish queue, "test_stomp#test_client_ack_with_symbol_10"
|
92
94
|
msg = @conn.receive
|
93
95
|
assert_nothing_raised {
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
96
|
+
# ACK has one required header, message-id, which must contain a value
|
97
|
+
# matching the message-id for the MESSAGE being acknowledged.
|
98
|
+
@conn.ack msg.headers['message-id']
|
99
|
+
}
|
100
|
+
checkEmsg(@conn)
|
101
|
+
end
|
102
|
+
|
103
|
+
# Test ACKs for Stomp 1.1
|
104
|
+
def test_client_ack_with_symbol_11
|
105
|
+
if @conn.protocol != Stomp::SPL_11
|
106
|
+
assert true
|
107
|
+
return
|
108
|
+
end
|
109
|
+
sid = @conn.uuid()
|
110
|
+
queue = make_destination()
|
111
|
+
@conn.subscribe queue, :ack => :client, :id => sid
|
112
|
+
@conn.publish queue, "test_stomp#test_client_ack_with_symbol_11"
|
113
|
+
msg = @conn.receive
|
114
|
+
assert_nothing_raised {
|
115
|
+
# ACK has two REQUIRED headers: message-id, which MUST contain a value
|
116
|
+
# matching the message-id for the MESSAGE being acknowledged and
|
117
|
+
# subscription, which MUST be set to match the value of the subscription's
|
118
|
+
# id header.
|
119
|
+
@conn.ack msg.headers['message-id'], :subscription => sid
|
99
120
|
}
|
121
|
+
checkEmsg(@conn)
|
122
|
+
end
|
123
|
+
|
124
|
+
# Test ACKs for Stomp 1.2
|
125
|
+
def test_client_ack_with_symbol_12
|
126
|
+
if @conn.protocol != Stomp::SPL_12
|
127
|
+
assert true
|
128
|
+
return
|
129
|
+
end
|
130
|
+
sid = @conn.uuid()
|
131
|
+
queue = make_destination()
|
132
|
+
@conn.subscribe queue, :ack => :client, :id => sid
|
133
|
+
@conn.publish queue, "test_stomp#test_client_ack_with_symbol_11"
|
134
|
+
msg = @conn.receive
|
135
|
+
assert_nothing_raised {
|
136
|
+
# The ACK frame MUST include an id header matching the ack header
|
137
|
+
# of the MESSAGE being acknowledged.
|
138
|
+
@conn.ack msg.headers['ack']
|
139
|
+
}
|
140
|
+
checkEmsg(@conn)
|
100
141
|
end
|
101
142
|
|
102
143
|
# Test a message with 0x00 embedded in the body.
|
@@ -105,6 +146,7 @@ class TestConnection < Test::Unit::TestCase
|
|
105
146
|
@conn.publish make_destination, "a\0"
|
106
147
|
msg = @conn.receive
|
107
148
|
assert_equal "a\0" , msg.body
|
149
|
+
checkEmsg(@conn)
|
108
150
|
end
|
109
151
|
|
110
152
|
# Test connection open checking.
|
@@ -176,6 +218,7 @@ class TestConnection < Test::Unit::TestCase
|
|
176
218
|
@conn.publish make_destination, "a\0"
|
177
219
|
msg = @conn.receive
|
178
220
|
assert_instance_of Stomp::Message , msg
|
221
|
+
checkEmsg(@conn)
|
179
222
|
end
|
180
223
|
|
181
224
|
# Test converting a Message to a string.
|
@@ -184,6 +227,7 @@ class TestConnection < Test::Unit::TestCase
|
|
184
227
|
@conn.publish make_destination, "a\0"
|
185
228
|
msg = @conn.receive
|
186
229
|
assert_match /^<Stomp::Message headers=/ , msg.to_s
|
230
|
+
checkEmsg(@conn)
|
187
231
|
end
|
188
232
|
|
189
233
|
# Test that a connection frame is present.
|
@@ -202,6 +246,7 @@ class TestConnection < Test::Unit::TestCase
|
|
202
246
|
|
203
247
|
assert_equal "a\n\n", msg_a.body
|
204
248
|
assert_equal "b\n\na\n\n", msg_b.body
|
249
|
+
checkEmsg(@conn)
|
205
250
|
end
|
206
251
|
|
207
252
|
# Test publishing multiple messages.
|
@@ -214,6 +259,7 @@ class TestConnection < Test::Unit::TestCase
|
|
214
259
|
|
215
260
|
assert_equal "a\0", msg_a.body
|
216
261
|
assert_equal "b\0", msg_b.body
|
262
|
+
checkEmsg(@conn)
|
217
263
|
end
|
218
264
|
|
219
265
|
def test_thread_hang_one
|
@@ -230,6 +276,7 @@ class TestConnection < Test::Unit::TestCase
|
|
230
276
|
sleep 1
|
231
277
|
assert_not_nil received
|
232
278
|
assert_equal message, received.body
|
279
|
+
checkEmsg(@conn)
|
233
280
|
end
|
234
281
|
|
235
282
|
# Test polling with a single thread.
|
@@ -251,6 +298,7 @@ class TestConnection < Test::Unit::TestCase
|
|
251
298
|
sleep max_sleep+1
|
252
299
|
assert_not_nil received
|
253
300
|
assert_equal message, received.body
|
301
|
+
checkEmsg(@conn)
|
254
302
|
end
|
255
303
|
|
256
304
|
# Test receiving with multiple threads.
|
@@ -289,6 +337,7 @@ class TestConnection < Test::Unit::TestCase
|
|
289
337
|
sleep sleep_incr
|
290
338
|
end
|
291
339
|
assert_equal @max_msgs, msg_ctr
|
340
|
+
checkEmsg(@conn)
|
292
341
|
end unless RUBY_ENGINE =~ /jruby/
|
293
342
|
|
294
343
|
# Test polling with multiple threads.
|
@@ -333,6 +382,7 @@ class TestConnection < Test::Unit::TestCase
|
|
333
382
|
sleep sleep_incr
|
334
383
|
end
|
335
384
|
assert_equal @max_msgs, msg_ctr
|
385
|
+
checkEmsg(@conn)
|
336
386
|
end unless RUBY_ENGINE =~ /jruby/
|
337
387
|
|
338
388
|
# Test using a nil body.
|
@@ -343,7 +393,8 @@ class TestConnection < Test::Unit::TestCase
|
|
343
393
|
}
|
344
394
|
conn_subscribe dest
|
345
395
|
msg = @conn.receive
|
346
|
-
assert_equal "", msg.body
|
396
|
+
assert_equal "", msg.body
|
397
|
+
checkEmsg(@conn)
|
347
398
|
end
|
348
399
|
|
349
400
|
# Test transaction message sequencing.
|
@@ -361,6 +412,7 @@ class TestConnection < Test::Unit::TestCase
|
|
361
412
|
@conn.commit "txA"
|
362
413
|
msg = @conn.receive
|
363
414
|
assert_equal "txn message", msg.body
|
415
|
+
checkEmsg(@conn)
|
364
416
|
end
|
365
417
|
|
366
418
|
# Test duplicate subscriptions.
|
@@ -373,6 +425,7 @@ class TestConnection < Test::Unit::TestCase
|
|
373
425
|
assert_raise Stomp::Error::DuplicateSubscription do
|
374
426
|
conn_subscribe dest
|
375
427
|
end
|
428
|
+
checkEmsg(@conn)
|
376
429
|
end
|
377
430
|
|
378
431
|
# Test nil 1.1 connection parameters.
|
@@ -382,6 +435,7 @@ class TestConnection < Test::Unit::TestCase
|
|
382
435
|
assert_nothing_raised do
|
383
436
|
@conn = Stomp::Connection.open(user, passcode, host, port, false, 5, nil)
|
384
437
|
end
|
438
|
+
checkEmsg(@conn)
|
385
439
|
end
|
386
440
|
|
387
441
|
# Basic NAK test.
|
@@ -391,18 +445,29 @@ class TestConnection < Test::Unit::TestCase
|
|
391
445
|
@conn.nack "dummy msg-id"
|
392
446
|
end
|
393
447
|
else
|
394
|
-
sid = @conn.uuid()
|
395
448
|
dest = make_destination
|
396
|
-
@conn.subscribe dest, :ack => :client, :id => sid
|
397
449
|
smsg = "test_stomp#test_nack01: #{Time.now.to_f}"
|
398
|
-
@conn.publish
|
450
|
+
@conn.publish dest, smsg
|
451
|
+
#
|
452
|
+
sid = @conn.uuid()
|
453
|
+
@conn.subscribe dest, :ack => :client, :id => sid
|
399
454
|
msg = @conn.receive
|
400
455
|
assert_equal smsg, msg.body
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
456
|
+
case @conn.protocol
|
457
|
+
when Stomp::SPL_12
|
458
|
+
assert_nothing_raised {
|
459
|
+
@conn.nack msg.headers["ack"]
|
460
|
+
sleep 0.05 # Give racy brokers a chance to handle the last nack before unsubscribe
|
461
|
+
@conn.unsubscribe dest, :id => sid
|
462
|
+
}
|
463
|
+
else # Stomp::SPL_11
|
464
|
+
assert_nothing_raised {
|
465
|
+
@conn.nack msg.headers["message-id"], :subscription => sid
|
466
|
+
sleep 0.05 # Give racy brokers a chance to handle the last nack before unsubscribe
|
467
|
+
@conn.unsubscribe dest, :id => sid
|
468
|
+
}
|
469
|
+
end
|
470
|
+
|
406
471
|
# phase 2
|
407
472
|
teardown()
|
408
473
|
setup()
|
@@ -410,6 +475,7 @@ class TestConnection < Test::Unit::TestCase
|
|
410
475
|
@conn.subscribe dest, :ack => :auto, :id => sid
|
411
476
|
msg2 = @conn.receive
|
412
477
|
assert_equal smsg, msg2.body
|
478
|
+
checkEmsg(@conn)
|
413
479
|
end
|
414
480
|
end unless ENV['STOMP_AMQ11'] # AMQ sends NACK'd messages to a DLQ
|
415
481
|
|
@@ -443,5 +509,6 @@ class TestConnection < Test::Unit::TestCase
|
|
443
509
|
}
|
444
510
|
c.disconnect if c
|
445
511
|
end
|
512
|
+
|
446
513
|
end
|
447
514
|
|
data/test/test_connection1p.rb
CHANGED
@@ -244,7 +244,7 @@ class TestConnection1P < Test::Unit::TestCase
|
|
244
244
|
# - RabbitMQ does not emit repeated headers under any circumstances
|
245
245
|
# - AMQ 5.6 does not emit repeated headers under any circumstances
|
246
246
|
# Pure luck that this runs against AMQ at present.
|
247
|
-
def
|
247
|
+
def test_conn_1p_0124
|
248
248
|
dest = make_destination
|
249
249
|
msg = "payload: #{Time.now.to_f}"
|
250
250
|
shdrs = { "key1" => "val1", "key2" => "val2",
|
@@ -259,7 +259,7 @@ class TestConnection1P < Test::Unit::TestCase
|
|
259
259
|
received = @conn.receive
|
260
260
|
assert_equal msg, received.body
|
261
261
|
if @conn.protocol != Stomp::SPL_10
|
262
|
-
assert_equal shdrs["key3"], received.headers["key3"] unless ENV['STOMP_RABBIT']
|
262
|
+
assert_equal shdrs["key3"], received.headers["key3"] unless ENV['STOMP_RABBIT'] || ENV['STOMP_AMQ11']
|
263
263
|
else
|
264
264
|
assert_equal "kv3", received.headers["key3"]
|
265
265
|
end
|
@@ -268,7 +268,7 @@ class TestConnection1P < Test::Unit::TestCase
|
|
268
268
|
end
|
269
269
|
|
270
270
|
# Test frozen headers.
|
271
|
-
def
|
271
|
+
def test_conn_1p_0127
|
272
272
|
dest = make_destination
|
273
273
|
sid = @conn.uuid()
|
274
274
|
sid.freeze
|
@@ -297,7 +297,7 @@ class TestConnection1P < Test::Unit::TestCase
|
|
297
297
|
end if ENV['STOMP_HB11LONG']
|
298
298
|
|
299
299
|
# Test heartbeats with send and receive.
|
300
|
-
def
|
300
|
+
def test_conn_1p_0135
|
301
301
|
#
|
302
302
|
cha = {:host => "localhost", "accept-version" => "1.1"}
|
303
303
|
cha[:host] = "/" if ENV['STOMP_RABBIT']
|
@@ -357,5 +357,5 @@ private
|
|
357
357
|
assert conn.hbrecv_count > 0
|
358
358
|
end
|
359
359
|
|
360
|
-
end if ENV['
|
360
|
+
end if ENV['STOMP_TEST11p']
|
361
361
|
|
data/test/test_helper.rb
CHANGED
@@ -64,7 +64,15 @@ module TestBase
|
|
64
64
|
# Get a Stomp Connection.
|
65
65
|
def get_connection()
|
66
66
|
ch = get_conn_headers()
|
67
|
-
|
67
|
+
hash = { :hosts => [
|
68
|
+
{:login => user, :passcode => passcode, :host => host, :port => port, :ssl => nil},
|
69
|
+
],
|
70
|
+
:reliable => false,
|
71
|
+
:connect_headers => ch,
|
72
|
+
:stompconn => get_stomp_conn(),
|
73
|
+
:usecrlf => get_crlf(),
|
74
|
+
}
|
75
|
+
conn = Stomp::Connection.open(hash)
|
68
76
|
conn
|
69
77
|
end
|
70
78
|
|
@@ -75,7 +83,9 @@ module TestBase
|
|
75
83
|
hash = { :hosts => [
|
76
84
|
{:login => user, :passcode => passcode, :host => host, :port => ssl_port, :ssl => ssl_params},
|
77
85
|
],
|
78
|
-
:connect_headers => ch
|
86
|
+
:connect_headers => ch,
|
87
|
+
:stompconn => get_stomp_conn(),
|
88
|
+
:usecrlf => get_crlf(),
|
79
89
|
}
|
80
90
|
conn = Stomp::Connection.new(hash)
|
81
91
|
conn
|
@@ -86,7 +96,9 @@ module TestBase
|
|
86
96
|
hash = { :hosts => [
|
87
97
|
{:login => user, :passcode => passcode, :host => host, :port => port},
|
88
98
|
],
|
89
|
-
:connect_headers => get_conn_headers()
|
99
|
+
:connect_headers => get_conn_headers(),
|
100
|
+
:stompconn => get_stomp_conn(),
|
101
|
+
:usecrlf => get_crlf(),
|
90
102
|
}
|
91
103
|
|
92
104
|
client = Stomp::Client.new(hash)
|
@@ -96,12 +108,14 @@ module TestBase
|
|
96
108
|
# Get a connection headers hash.
|
97
109
|
def get_conn_headers()
|
98
110
|
ch = {}
|
99
|
-
if ENV['
|
111
|
+
if ENV['STOMP_TEST11p']
|
100
112
|
#
|
101
|
-
if
|
102
|
-
|
113
|
+
raise "Invalid 1.1 plus test protocol" if ENV['STOMP_TEST11p'] == Stomp::SPL_10
|
114
|
+
#
|
115
|
+
if Stomp::SUPPORTED.index(ENV['STOMP_TEST11p'])
|
116
|
+
ch['accept-version'] = ENV['STOMP_TEST11p']
|
103
117
|
else
|
104
|
-
ch['accept-version'] = Stomp::SPL_11
|
118
|
+
ch['accept-version'] = Stomp::SPL_11 # Just use 1.1
|
105
119
|
end
|
106
120
|
#
|
107
121
|
ch['host'] = ENV['STOMP_RABBIT'] ? "/" : host
|
@@ -109,6 +123,20 @@ module TestBase
|
|
109
123
|
ch
|
110
124
|
end
|
111
125
|
|
126
|
+
# Determine if tests should use STOMP instead of CONNECT
|
127
|
+
def get_stomp_conn()
|
128
|
+
usc = false
|
129
|
+
usc = true if ENV['STOMP_TEST11p'] && Stomp::SUPPORTED.index(ENV['STOMP_TEST11p']) && ENV['STOMP_TEST11p'] >= Stomp::SPL_11 && ENV['STOMP_CONN']
|
130
|
+
usc
|
131
|
+
end
|
132
|
+
|
133
|
+
# Determine if tests should \r\n as line ends
|
134
|
+
def get_crlf()
|
135
|
+
ucr = false
|
136
|
+
ucr = true if ENV['STOMP_TEST11p'] && Stomp::SUPPORTED.index(ENV['STOMP_TEST11p']) && ENV['STOMP_TEST11p'] >= Stomp::SPL_12 && ENV['STOMP_CRLF']
|
137
|
+
ucr
|
138
|
+
end
|
139
|
+
|
112
140
|
# Subscribe to a destination.
|
113
141
|
def conn_subscribe(dest, headers = {})
|
114
142
|
if @conn.protocol >= Stomp::SPL_11
|
@@ -123,5 +151,13 @@ module TestBase
|
|
123
151
|
qname = ENV['STOMP_DOTQUEUE'] ? "/queue/test.ruby.stomp." + name : "/queue/test/ruby/stomp/" + name
|
124
152
|
end
|
125
153
|
|
154
|
+
#
|
155
|
+
def checkEmsg(cc)
|
156
|
+
m = cc.poll
|
157
|
+
if m
|
158
|
+
assert m.command != Stomp::CMD_ERROR
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
126
162
|
end
|
127
163
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stomp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 1.2.
|
9
|
+
- 7
|
10
|
+
version: 1.2.7
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Brian McCallister
|
@@ -18,7 +18,7 @@ autorequire:
|
|
18
18
|
bindir: bin
|
19
19
|
cert_chain: []
|
20
20
|
|
21
|
-
date: 2012-
|
21
|
+
date: 2012-11-02 00:00:00 -04:00
|
22
22
|
default_executable:
|
23
23
|
dependencies:
|
24
24
|
- !ruby/object:Gem::Dependency
|