Skip to content

Commit 0d0ccdf

Browse files
committed
added test
1 parent b41d641 commit 0d0ccdf

2 files changed

Lines changed: 33 additions & 6 deletions

File tree

lib/splitclient-rb/sse/event_source/client.rb

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ def connect_thread(latch)
8686
def connect_stream(latch)
8787
return Constants::PUSH_NONRETRYABLE_ERROR unless socket_write(latch)
8888
while connected? || @first_event.value
89-
log_if_debug("Inside coonnect_stream while loop.", 3)
9089
if IO.select([@socket], nil, nil, @read_timeout)
9190
begin
9291
partial_data = @socket.readpartial(10_000)
@@ -118,14 +117,13 @@ def connect_stream(latch)
118117
return Constants::PUSH_RETRYABLE_ERROR
119118
end
120119
else
121-
# Timeout occurred, no data available
122-
log_if_debug("SSE read operation timed out, no data available.", 3)
120+
@config.logger.debug("SSE read operation timed out, no data available.")
123121
return Constants::PUSH_RETRYABLE_ERROR
124122
end
125123

126124
process_data(partial_data)
127125
end
128-
log_if_debug("SSE read operation exited: #{connected?}", 3)
126+
log_if_debug("SSE read operation exited: #{connected?}", 1)
129127

130128
nil
131129
end
@@ -179,9 +177,8 @@ def socket_connect
179177
IO.select(nil, [ssl_socket])
180178
retry
181179
end
182-
183180
return ssl_socket
184-
# return ssl_socket.connect
181+
185182
rescue Exception => e
186183
@config.logger.error("socket connect error: #{e.inspect}")
187184
return nil

spec/sse/event_source/client_spec.rb

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,36 @@
221221
end
222222
end
223223

224+
it 'client timeout and reconnect' do
225+
stub_request(:get, 'https://sdk.split.io/api/splitChanges?s=1.3&since=-1&rbSince=-1')
226+
.with(headers: { 'Authorization' => 'Bearer client-spec-key' })
227+
.to_return(status: 200, body: '{"ff":{"d":[],"s":-1,"t":5564531221}, "rbs":{"d":[],"s":-1,"t":-1}}')
228+
stub_request(:get, 'https://sdk.split.io/api/splitChanges?s=1.3&since=5564531221&rbSince=-1')
229+
.with(headers: { 'Authorization' => 'Bearer client-spec-key' })
230+
.to_return(status: 200, body: '{"ff":{"d":[],"s":5564531221,"t":5564531221}, "rbs":{"d":[],"s":-1,"t":-1}}')
231+
232+
mock_server do |server|
233+
start_workers
234+
server.setup_response('/') do |_, res|
235+
send_stream_content(res, event_split_update)
236+
end
237+
238+
sse_client = subject.new(config, api_token, telemetry_runtime_producer, event_parser, notification_manager_keeper, notification_processor, push_status_queue, read_timeout: 0.1)
239+
connected = sse_client.start(server.base_uri)
240+
sleep 1
241+
expect(connected).to eq(true)
242+
expect(sse_client.connected?).to eq(true)
243+
expect(push_status_queue.pop(true)).to eq(SplitIoClient::Constants::PUSH_CONNECTED)
244+
sleep 3
245+
expect(log.string).to include 'SSE read operation timed out, no data available'
246+
expect(sse_client.connected?).to eq(true)
247+
sse_client.close
248+
expect(sse_client.connected?).to eq(false)
249+
250+
stop_workers
251+
end
252+
end
253+
224254
it 'first event - when server return 400' do
225255
mock_server do |server|
226256
server.setup_response('/') do |_, res|

0 commit comments

Comments
 (0)