klomp 0.0.8 → 1.0.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.
@@ -1,35 +0,0 @@
1
- desc "Start an infinite publish/subscribe loop to test STOMP client failover"
2
- task :test_failover do
3
- require 'klomp'
4
-
5
- # Set the delay between publish events. If this is too small, the consumer
6
- # will never be able to catch up to the producer, giving the false impression
7
- # of lost messages.
8
- publish_interval = 0.01
9
-
10
- client = Klomp::Client.new([
11
- 'stomp://admin:password@localhost:61613',
12
- 'stomp://admin:password@127.0.0.1:62613'
13
- ]).connect
14
-
15
- last_i = nil
16
- client.subscribe("/queue/test") do |msg|
17
- print "-"
18
- last_i = msg.body.to_i
19
- end
20
-
21
- begin
22
- i = 0
23
- loop do
24
- i += 1
25
- client.send("/queue/test", i.to_s) do |r|
26
- print "+"
27
- end
28
- sleep publish_interval
29
- end
30
- rescue SignalException
31
- client.disconnect
32
- puts
33
- puts "Sent #{i}; Received #{last_i}; Lost #{i - last_i}"
34
- end
35
- end
@@ -1,245 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'minitest/pride'
3
-
4
- require 'klomp'
5
- require File.expand_path('../test_helper', __FILE__)
6
-
7
- describe Klomp::Client do
8
-
9
- include KlompTestHelpers
10
-
11
- before do
12
- @uris = [
13
- 'stomp://admin:password@localhost:61613',
14
- 'stomp://admin:password@127.0.0.1:62613'
15
- ]
16
- @destination = '/queue/test_component.test_event'
17
- end
18
-
19
- it 'accepts a single uri and establishes separate failover connections for writes and reads' do
20
- client = Klomp::Client.new(@uris.first).connect
21
-
22
- assert_equal [client.write_conn], client.read_conn
23
- assert client.write_conn.connected?
24
-
25
- client.disconnect
26
- end
27
-
28
- it 'accepts an array of uris and establishes separate failover connections for writes and reads' do
29
- client = Klomp::Client.new(@uris).connect
30
-
31
- assert client.write_conn.connected?
32
- refute_empty client.read_conn
33
- client.read_conn.each do |obj|
34
- assert obj.connected?
35
- end
36
-
37
- client.disconnect
38
- end
39
-
40
- it 'allows the virtual host to be set' do
41
- vhost = "klomp-test"
42
-
43
- client = Klomp::Client.new(@uris, :vhost => vhost)
44
- assert_equal vhost, client.vhost
45
-
46
- client.all_conn.each do |failover_client|
47
- failover_client.client_pool.each do |conn|
48
- assert_equal vhost, conn.host
49
- end
50
- end
51
- end
52
-
53
- it 'raises an error if authentication fails' do
54
- assert_raises OnStomp::ConnectFailedError do
55
- Klomp::Client.new(@uris.first.sub('password', 'psswrd')).connect
56
- end
57
- end
58
-
59
- it 'disconnnects' do
60
- client = Klomp::Client.new(@uris.first).connect
61
- assert client.write_conn.connected?
62
- client.disconnect
63
- refute client.write_conn.connected?
64
- end
65
-
66
- it 'has a logger' do
67
- logger = Logger.new(STDOUT)
68
- client = Klomp::Client.new(@uris, :logger=>logger)
69
- assert_equal client.log, logger
70
- end
71
-
72
- it 'sends heartbeat' do
73
- client = Klomp::Client.new(@uris).connect
74
- client.beat
75
- client.disconnect
76
- end
77
-
78
- it 'sends requests and gets responses' do
79
- client = Klomp::Client.new(@uris).connect
80
- body = { 'body' => rand(36**128).to_s(36) }
81
-
82
- client.send(@destination, body, :ack=>'client')
83
-
84
- got_message = false
85
- client.subscribe(@destination) do |msg|
86
- got_message = true if msg.body == body
87
- client.ack(msg)
88
- end
89
- let_background_processor_run
90
- assert got_message
91
-
92
- client.disconnect
93
- end
94
-
95
- it 'automatically publishes responses to the reply-to destination' do
96
- client = Klomp::Client.new(@uris).connect
97
- reply_to_body = { 'reply_to_body' => rand(36**128).to_s(36) }
98
-
99
- client.send(@destination, nil, { 'reply-to' => @destination })
100
-
101
- got_message = false
102
- client.subscribe(@destination) do |msg|
103
- got_message = true if msg.body == reply_to_body
104
- reply_to_body
105
- end
106
- let_background_processor_run
107
- assert got_message
108
-
109
- client.disconnect
110
- end
111
-
112
- it 'unsubscribes' do
113
- client = Klomp::Client.new(@uris).connect
114
-
115
- subscribe_frames = client.subscribe(@destination) { |msg| }
116
- unsub_frames = client.unsubscribe(subscribe_frames)
117
- assert_equal subscribe_frames.length, unsub_frames.length
118
- let_background_processor_run
119
-
120
- assert client.subscriptions.flatten.empty?, "expected connection to have no subscriptions"
121
-
122
- client.disconnect
123
- end
124
-
125
- it 'sends all unknown options through to OnStomp' do
126
- client = Klomp::Client.new(@uris.first, :haz_cheezburgers => true, :retry_attempts => 42).connect
127
- assert client.write_conn.connected?
128
- assert_equal 42, client.write_conn.retry_attempts
129
- client.disconnect
130
- end
131
-
132
- it 'uses a fibonacci back-off approach to reconnect' do
133
- good_client = Object.new
134
- def good_client.connect; true; end
135
- def good_client.connected?; true; end
136
- def good_client.connection; true; end
137
-
138
- bad_client = Object.new
139
- def bad_client.connect; raise "could not connect"; end
140
- def bad_client.connected?; false; end
141
-
142
- test_context = self
143
- attempts = 0
144
- conn = nil
145
- fib = lambda {|n| (1..n).inject([0, 1]) {|fib,_| [fib[1], fib[0]+fib[1]]}.first}
146
-
147
- pool_class = Class.new do
148
- def initialize(*) end
149
- def each(&blk) end
150
- define_method :next_client do
151
- attempts += 1
152
- test_context.assert_equal fib[attempts], conn.retry_delay
153
- if attempts == 6
154
- good_client
155
- else
156
- bad_client
157
- end
158
- end
159
- end
160
-
161
- client = Klomp::Client.new(@uris.first, :pool => pool_class)
162
- conn = client.write_conn
163
- def conn.sleep_for_retry(*) end # skip sleep between retries for test
164
-
165
- client.reconnect
166
- assert_equal 6, attempts
167
- end
168
-
169
- it 'sends messages with uuids in the :id header' do
170
- client = Klomp::Client.new(@uris, :translate_json => false).connect
171
- client.send(@destination, '')
172
-
173
- received_message = false
174
- client.subscribe(@destination) do |msg|
175
- received_message = msg
176
- end
177
- let_background_processor_run
178
- assert received_message
179
- assert received_message[:id], "message did not have an id"
180
- assert received_message[:id] =~ /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/
181
- "message id did not look like a uuid"
182
-
183
- client.disconnect
184
- end
185
-
186
- it 'allows customization of the uuid generator' do
187
- generator = Object.new
188
- def generator.generate; "42"; end
189
-
190
- client = Klomp::Client.new(@uris, :translate_json => false, :uuid => generator).connect
191
- client.send(@destination, '')
192
-
193
- received_message = false
194
- client.subscribe(@destination) do |msg|
195
- received_message = msg
196
- end
197
- let_background_processor_run
198
- assert received_message
199
- assert received_message[:id], "message did not have an id"
200
- assert_equal "42", received_message[:id]
201
-
202
- client.disconnect
203
- end
204
-
205
- it 'allows disabling generated message ids' do
206
- client = Klomp::Client.new(@uris, :translate_json => false, :uuid => false).connect
207
- client.send(@destination, '')
208
-
209
- received_message = false
210
- client.subscribe(@destination) do |msg|
211
- received_message = msg
212
- end
213
- let_background_processor_run
214
- assert received_message
215
- refute received_message[:id], "message had an id"
216
-
217
- client.disconnect
218
- end
219
-
220
- it 'logs message ids' do
221
- logger = Object.new
222
- def logger.msgs; @msgs; end
223
- def logger.debug(msg) (@msgs ||= []) << msg end
224
-
225
- client = Klomp::Client.new(@uris, :translate_json => false, :logger => logger).connect
226
- client.send(@destination, '')
227
-
228
- received_message = false
229
- client.subscribe(@destination) do |msg|
230
- received_message = msg
231
- end
232
- let_background_processor_run
233
- assert received_message
234
- assert received_message[:id], "message did not have an id"
235
-
236
- assert_equal 2, logger.msgs.length
237
- assert logger.msgs[0] =~ /\[Sending\] ID=([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/
238
- sent_id = $1
239
- assert logger.msgs[1] =~ /\[Received\] ID=([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/
240
- received_id = $1
241
- assert_equal sent_id, received_id
242
-
243
- client.disconnect
244
- end
245
- end
@@ -1,14 +0,0 @@
1
- trap("QUIT") do
2
- $stderr.puts "\n\nThread dump:\n"
3
- Thread.list.each do |t|
4
- $stderr.puts t.inspect
5
- $stderr.puts *t.backtrace
6
- $stderr.puts
7
- end
8
- end
9
-
10
- module KlompTestHelpers
11
- def let_background_processor_run
12
- sleep 1
13
- end
14
- end