stomper 2.0.3 → 2.0.4

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.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changes
2
2
 
3
+ ## 2.0.4 - 2011-03-08
4
+
5
+ * minor issue where extraneous on\_connection\_died events were triggered.
6
+
3
7
  ## 2.0.3 - 2011-03-08
4
8
 
5
9
  * checks that some event callbacks exist before trying to invoke, fixes #6
@@ -1,6 +1,9 @@
1
1
  After do |s|
2
2
  begin
3
3
  @connection && @connection.stop
4
+ rescue Exception => ex
5
+ end
6
+ begin
4
7
  @broker && @broker.force_stop
5
8
  rescue Exception => ex
6
9
  end
@@ -9,6 +9,7 @@ class TestStompServer
9
9
  begin
10
10
  @socket = TCPServer.new(@port)
11
11
  rescue Exception => ex
12
+ retry
12
13
  end
13
14
  @session = nil
14
15
  @version = version
@@ -59,7 +60,7 @@ class TestStompServer
59
60
  connect_to_client(headers)
60
61
  @serializer.extend_for_protocol('1.1') if version == '1.1'
61
62
  @receive_thread = Thread.new do
62
- while true
63
+ loop do
63
64
  begin
64
65
  read_frame
65
66
  rescue Exception => ex
@@ -88,30 +89,32 @@ class TestStompServer
88
89
 
89
90
  def read_frame
90
91
  @serializer.read_frame.tap do |f|
91
- @received_frames << f
92
- unless f[:receipt].nil? || f[:receipt].empty?
93
- send_frame 'RECEIPT', { :'receipt-id' => f[:receipt] }
94
- end
95
- case f.command
96
- when 'DISCONNECT'
97
- @running = false
98
- @client_socket.close
99
- when 'SEND'
100
- if @subscribed[f[:destination]]
101
- @subscribed[f[:destination]].each_with_index do |sub_id, idx|
102
- msg = f.dup
103
- msg[:subscription] = sub_id
104
- msg[:'message-id'] = "m-#{(Time.now.to_f * 1000).to_i}-#{idx}"
105
- msg.command = 'MESSAGE'
106
- send_frame msg
107
- end
92
+ if f
93
+ @received_frames << f
94
+ unless f[:receipt].nil? || f[:receipt].empty?
95
+ send_frame 'RECEIPT', { :'receipt-id' => f[:receipt] }
108
96
  end
109
- when 'SUBSCRIBE'
110
- @subscribed[f[:destination]] ||= []
111
- @subscribed[f[:destination]] << f[:id]
112
- when 'UNSUBSCRIBE'
113
- if @subscribed[f[:destination]]
114
- @subscribed[f[:destination]].delete f[:id]
97
+ case f.command
98
+ when 'DISCONNECT'
99
+ @running = false
100
+ @client_socket.close
101
+ when 'SEND'
102
+ if @subscribed[f[:destination]]
103
+ @subscribed[f[:destination]].each_with_index do |sub_id, idx|
104
+ msg = f.dup
105
+ msg[:subscription] = sub_id
106
+ msg[:'message-id'] = "m-#{(Time.now.to_f * 1000).to_i}-#{idx}"
107
+ msg.command = 'MESSAGE'
108
+ send_frame msg
109
+ end
110
+ end
111
+ when 'SUBSCRIBE'
112
+ @subscribed[f[:destination]] ||= []
113
+ @subscribed[f[:destination]] << f[:id]
114
+ when 'UNSUBSCRIBE'
115
+ if @subscribed[f[:destination]]
116
+ @subscribed[f[:destination]].delete f[:id]
117
+ end
115
118
  end
116
119
  end
117
120
  end
@@ -130,6 +133,7 @@ class TestStompServer
130
133
 
131
134
  class StompErrorOnConnectSession < StompSession
132
135
  def connect_to_client(headers)
136
+ rf = read_frame
133
137
  send_frame 'ERROR'
134
138
  end
135
139
  end
@@ -174,7 +174,7 @@ class Stomper::Connection
174
174
  @close_mutex = ::Mutex.new
175
175
 
176
176
  on_connected do |cf, con|
177
- unless connected?
177
+ unless @connected
178
178
  @version = (cf[:version].nil?||cf[:version].empty?) ? '1.0' : cf[:version]
179
179
  unless @versions.include?(@version)
180
180
  close
@@ -312,10 +312,11 @@ class Stomper::Connection
312
312
  alias :open :connect
313
313
  end
314
314
 
315
- # True if a connection with the broker has been established, false otherwise.
315
+ # True if a connection with the broker has been established or is in the
316
+ # process of being established, false otherwise.
316
317
  # @return [true,false]
317
318
  def connected?
318
- @connected && !@socket.closed?
319
+ (@connecting || @connected) && !@socket.closed?
319
320
  end
320
321
 
321
322
  # Creates an instance of the class given by {#receiver_class} and starts it.
@@ -371,7 +372,7 @@ class Stomper::Connection
371
372
  # {Stomper::Extensions::Events#on_connection_terminated}
372
373
  def close
373
374
  @close_mutex.synchronize do
374
- if @connected
375
+ if connected?
375
376
  begin
376
377
  trigger_event(:on_connection_terminated, self) unless @disconnected
377
378
  ensure
@@ -379,7 +380,7 @@ class Stomper::Connection
379
380
  @socket.shutdown(2) rescue nil
380
381
  @socket.close rescue nil
381
382
  end
382
- @connected = false
383
+ @connecting = @connected = false
383
384
  end
384
385
  trigger_event(:on_connection_closed, self)
385
386
  subscription_manager.clear
@@ -410,8 +411,7 @@ class Stomper::Connection
410
411
  # Receives a frame from the broker.
411
412
  # @return [Stomper::Frame]
412
413
  def receive
413
- trigger_event(:on_connection_died, self) if dead?
414
- if alive? || @connecting
414
+ if alive?
415
415
  trigger_event(:before_receiving, nil, self)
416
416
  begin
417
417
  @serializer.read_frame.tap do |f|
@@ -427,6 +427,8 @@ class Stomper::Connection
427
427
  close
428
428
  raise
429
429
  end
430
+ else
431
+ trigger_event(:on_connection_died, self)
430
432
  end
431
433
  end
432
434
 
@@ -17,7 +17,7 @@ module Stomper::Extensions::Heartbeat
17
17
  # {Stomper::Protocols::V1_1::Heartbeating#beat}.
18
18
  def beat; end
19
19
 
20
- # By default, a connection is alive if it is connected.
20
+ # By default, a connection is alive if it is {Stomper::Connection#connected?}.
21
21
  # If the established connection utilizes the Stomp 1.1 protocol, this
22
22
  # method will be overridden by {Stomper::Protocols::V1_1::Heartbeating#alive?}.
23
23
  # @return [true,false]
@@ -41,7 +41,7 @@ module Stomper::Extensions::Heartbeat
41
41
  end
42
42
 
43
43
  # Stomp 1.1 {Stomper::Connection connections} are alive if they are
44
- # +connected?+ and are meeting their negotiated heart-beating obligations.
44
+ # {Stomper::Connection#connected?} and are meeting their negotiated heart-beating obligations.
45
45
  # @return [true, false]
46
46
  # @see #dead?
47
47
  def alive?
@@ -3,5 +3,5 @@
3
3
  # Primary namespace of the stomper gem.
4
4
  module Stomper
5
5
  # The current version of the stomper gem.
6
- VERSION = '2.0.3'
6
+ VERSION = '2.0.4'
7
7
  end
@@ -343,7 +343,7 @@ module Stomper
343
343
  triggered.should be_true
344
344
  end
345
345
 
346
- it "should trigger on_connection_died before receiving non-blocking (even if not ready) if the connection is dead" do
346
+ it "should not trigger on_connection_died before receiving non-blocking if socket is not ready" do
347
347
  triggered = false
348
348
  @connection.on_connection_died { triggered = true }
349
349
  @connection.connect
@@ -351,6 +351,17 @@ module Stomper
351
351
  @serializer.stub!(:read_frame).and_return(::Stomper::Frame.new('MESSAGE'))
352
352
  @socket.stub!(:ready?).and_return(false)
353
353
  @connection.receive_nonblock
354
+ triggered.should be_false
355
+ end
356
+
357
+ it "should trigger on_connection_died before receiving non-blocking if socket is ready" do
358
+ triggered = false
359
+ @connection.on_connection_died { triggered = true }
360
+ @connection.connect
361
+ @connection.stub!(:alive?).and_return(false)
362
+ @serializer.stub!(:read_frame).and_return(::Stomper::Frame.new('MESSAGE'))
363
+ @socket.stub!(:ready?).and_return(true)
364
+ @connection.receive_nonblock
354
365
  triggered.should be_true
355
366
  end
356
367
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: stomper
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 2.0.3
5
+ version: 2.0.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ian D. Eccles