Skip to content

Commit 0d008cf

Browse files
committed
fixed tests
1 parent 6f1e137 commit 0d008cf

15 files changed

Lines changed: 367 additions & 628 deletions

lib/splitclient-rb/split_factory.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,13 +174,13 @@ def build_synchronizer
174174
@synchronizer = Engine::Synchronizer.new(repositories, @api_key, @config, params)
175175
end
176176

177-
def build_streaming_components
177+
def build_streaming_components
178+
@push_status_queue = Queue.new
178179
splits_worker = SSE::Workers::SplitsWorker.new(@synchronizer, @config, @splits_repository)
179180
segments_worker = SSE::Workers::SegmentsWorker.new(@synchronizer, @config, @segments_repository)
180-
notification_manager_keeper = SSE::NotificationManagerKeeper.new(@config, @runtime_producer)
181+
notification_manager_keeper = SSE::NotificationManagerKeeper.new(@config, @runtime_producer, @push_status_queue)
181182
notification_processor = SSE::NotificationProcessor.new(@config, splits_worker, segments_worker)
182-
event_parser = SSE::EventSource::EventParser.new(config)
183-
@push_status_queue = Queue.new
183+
event_parser = SSE::EventSource::EventParser.new(config)
184184
sse_client = SSE::EventSource::Client.new(@config, @api_key, @runtime_producer, event_parser, notification_manager_keeper, notification_processor, @push_status_queue)
185185
@sse_handler = SSE::SSEHandler.new(@config, splits_worker, segments_worker, sse_client)
186186
@push_manager = Engine::PushManager.new(@config, @sse_handler, @api_key, @runtime_producer)

lib/splitclient-rb/sse/notification_manager_keeper.rb

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@ class NotificationManagerKeeper
99
ENABLED = 1
1010
PAUSED = 2
1111

12-
def initialize(config, telemetry_runtime_producer)
12+
def initialize(config, telemetry_runtime_producer, status_queue)
1313
@config = config
14+
@telemetry_runtime_producer = telemetry_runtime_producer
15+
@status_queue = status_queue
1416
@publisher_available = Concurrent::AtomicBoolean.new(true)
1517
@publishers_pri = Concurrent::AtomicFixnum.new
1618
@publishers_sec = Concurrent::AtomicFixnum.new
17-
@telemetry_runtime_producer = telemetry_runtime_producer
1819
end
1920

2021
def handle_incoming_occupancy_event(event)
@@ -33,13 +34,13 @@ def process_event_control(type)
3334
case type
3435
when 'STREAMING_PAUSED'
3536
@telemetry_runtime_producer.record_streaming_event(Telemetry::Domain::Constants::STREAMING_STATUS, PAUSED)
36-
dispatch_action(Constants::PUSH_SUBSYSTEM_DOWN)
37+
push_status(Constants::PUSH_SUBSYSTEM_DOWN)
3738
when 'STREAMING_RESUMED'
3839
@telemetry_runtime_producer.record_streaming_event(Telemetry::Domain::Constants::STREAMING_STATUS, ENABLED)
39-
dispatch_action(Constants::PUSH_SUBSYSTEM_READY) if @publisher_available.value
40+
push_status(Constants::PUSH_SUBSYSTEM_READY) if @publisher_available.value
4041
when 'STREAMING_DISABLED'
4142
@telemetry_runtime_producer.record_streaming_event(Telemetry::Domain::Constants::STREAMING_STATUS, DISABLED)
42-
dispatch_action(Constants::PUSH_SUBSYSTEM_OFF)
43+
push_status(Constants::PUSH_SUBSYSTEM_OFF)
4344
else
4445
@config.logger.error("Incorrect event type: #{incoming_notification}")
4546
end
@@ -52,10 +53,10 @@ def process_event_occupancy(channel, publishers)
5253

5354
if !are_publishers_available? && @publisher_available.value
5455
@publisher_available.make_false
55-
dispatch_action(Constants::PUSH_SUBSYSTEM_DOWN)
56+
push_status(Constants::PUSH_SUBSYSTEM_DOWN)
5657
elsif are_publishers_available? && !@publisher_available.value
5758
@publisher_available.make_true
58-
dispatch_action(Constants::PUSH_SUBSYSTEM_READY)
59+
push_status(Constants::PUSH_SUBSYSTEM_READY)
5960
end
6061
end
6162

@@ -73,9 +74,9 @@ def are_publishers_available?
7374
@publishers_pri.value.positive? || @publishers_sec.value.positive?
7475
end
7576

76-
def dispatch_action(action)
77-
@config.logger.debug("Dispatching action: #{action}")
78-
# TODO: will use status queue here.
77+
def push_status(status)
78+
@config.logger.debug("Pushing occupancy status: #{status}")
79+
@status_queue.push(status)
7980
end
8081
end
8182
end

lib/splitclient-rb/sse/sse_handler.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ def initialize(config,
1616
end
1717

1818
def start(token_jwt, channels)
19-
url = "#{@config.streaming_service_url}?channels=#{channels}&v=1.1&accessToken=#{token_jwt}"
20-
@sse_client.start(url)
19+
@sse_client.start("#{@config.streaming_service_url}?channels=#{channels}&v=1.1&accessToken=#{token_jwt}")
2120
end
2221

2322
def stop

lib/splitclient-rb/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module SplitIoClient
2-
VERSION = '7.3.3'
2+
VERSION = '7.3.4.pre.rc1'
33
end

spec/engine/auth_api_client_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
File.read(File.join(SplitIoClient.root, 'spec/test_data/integrations/auth_body_response.json'))
1010
end
1111

12-
let(:api_key) { 'api-key-test' }
12+
let(:api_key) { 'AuthApiClient-key' }
1313
let(:log) { StringIO.new }
1414
let(:config) { SplitIoClient::SplitConfig.new(logger: Logger.new(log)) }
1515
let(:telemetry_runtime_producer) { SplitIoClient::Telemetry::RuntimeProducer.new(config) }

spec/engine/push_manager_spec.rb

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
subject { SplitIoClient::Engine::PushManager }
88

99
let(:body_response) { File.read(File.join(SplitIoClient.root, 'spec/test_data/integrations/auth_body_response.json')) }
10-
let(:api_key) { 'api-key-test' }
10+
let(:api_key) { 'PushManager-key' }
1111
let(:log) { StringIO.new }
1212
let(:config) { SplitIoClient::SplitConfig.new(logger: Logger.new(log)) }
1313
let(:splits_repository) { SplitIoClient::Cache::Repositories::SplitsRepository.new(config) }
@@ -17,7 +17,8 @@
1717
let(:segment_fetcher) { SplitIoClient::Cache::Fetchers::SegmentFetcher.new(segments_repository, api_key, config, runtime_producer) }
1818
let(:splits_worker) { SplitIoClient::SSE::Workers::SplitsWorker.new(split_fetcher, config, splits_repository) }
1919
let(:segments_worker) { SplitIoClient::SSE::Workers::SegmentsWorker.new(segment_fetcher, config, segments_repository) }
20-
let(:notification_manager_keeper) { SplitIoClient::SSE::NotificationManagerKeeper.new(config, runtime_producer) }
20+
let(:push_status_queue) { Queue.new }
21+
let(:notification_manager_keeper) { SplitIoClient::SSE::NotificationManagerKeeper.new(config, runtime_producer, push_status_queue) }
2122
let(:repositories) { { splits: splits_repository, segments: segments_repository } }
2223
let(:impression_counter) { SplitIoClient::Engine::Common::ImpressionCounter.new }
2324
let(:params) do
@@ -30,8 +31,8 @@
3031
end
3132
let(:synchronizer) { SplitIoClient::Engine::Synchronizer.new(repositories, api_key, config, params) }
3233
let(:event_parser) { SplitIoClient::SSE::EventSource::EventParser.new(config) }
33-
let(:push_status_queue) { Queue.new }
34-
let(:sse_client) { SplitIoClient::SSE::EventSource::Client.new(config, api_key, telemetry_runtime_producer, event_parser, notification_manager_keeper, notification_processor, push_status_queue) }
34+
let(:notification_processor) { SplitIoClient::SSE::NotificationProcessor.new(config, splits_worker, segments_worker) }
35+
let(:sse_client) { SplitIoClient::SSE::EventSource::Client.new(config, api_key, runtime_producer, event_parser, notification_manager_keeper, notification_processor, push_status_queue) }
3536

3637
context 'start_sse' do
3738
it 'must connect to server' do
@@ -43,7 +44,6 @@
4344
stub_request(:get, config.auth_service_url).to_return(status: 200, body: body_response)
4445
config.streaming_service_url = server.base_uri
4546

46-
action_event = nil
4747
sse_handler = SplitIoClient::SSE::SSEHandler.new(config, splits_worker, segments_worker, sse_client)
4848

4949
push_manager = subject.new(config, sse_handler, api_key, runtime_producer)
@@ -54,7 +54,7 @@
5454
sleep(1.5)
5555
expect(connected).to eq(true)
5656
expect(sse_handler.connected?).to eq(true)
57-
expect(action_event).to eq(SplitIoClient::Constants::PUSH_CONNECTED)
57+
expect(push_status_queue.pop(true)).to eq(SplitIoClient::Constants::PUSH_CONNECTED)
5858
end
5959
end
6060

@@ -101,9 +101,7 @@
101101
stub_request(:get, config.auth_service_url).to_return(status: 200, body: body_response)
102102
config.streaming_service_url = server.base_uri
103103

104-
action_event = nil
105104
sse_handler = SplitIoClient::SSE::SSEHandler.new(config, splits_worker, segments_worker, sse_client)
106-
107105
push_manager = subject.new(config, sse_handler, api_key, runtime_producer)
108106
connected = push_manager.start_sse
109107

@@ -113,7 +111,7 @@
113111

114112
expect(connected).to eq(true)
115113
expect(sse_handler.connected?).to eq(true)
116-
expect(action_event).to eq(SplitIoClient::Constants::PUSH_CONNECTED)
114+
expect(push_status_queue.pop(true)).to eq(SplitIoClient::Constants::PUSH_CONNECTED)
117115

118116
push_manager.stop_sse
119117

spec/engine/sync_manager_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
let(:segment2) { File.read(File.join(SplitIoClient.root, 'spec/test_data/integrations/segment2.json')) }
1414
let(:segment3) { File.read(File.join(SplitIoClient.root, 'spec/test_data/integrations/segment3.json')) }
1515
let(:body_response) { File.read(File.join(SplitIoClient.root, 'spec/test_data/integrations/auth_body_response.json')) }
16-
let(:api_key) { 'api-key-test' }
16+
let(:api_key) { 'SyncManager-key' }
1717
let(:log) { StringIO.new }
1818
let(:config) { SplitIoClient::SplitConfig.new(logger: Logger.new(log), streaming_enabled: true) }
1919
let(:splits_repository) { SplitIoClient::Cache::Repositories::SplitsRepository.new(config) }
@@ -52,10 +52,10 @@
5252
let(:notification_processor) { SplitIoClient::SSE::NotificationProcessor.new(config, splits_worker, segments_worker) }
5353
let(:event_parser) { SplitIoClient::SSE::EventSource::EventParser.new(config) }
5454
let(:push_status_queue) { Queue.new }
55+
let(:notification_manager_keeper) { SplitIoClient::SSE::NotificationManagerKeeper.new(config, telemetry_runtime_producer, push_status_queue) }
5556
let(:sse_client) { SplitIoClient::SSE::EventSource::Client.new(config, api_key, telemetry_runtime_producer, event_parser, notification_manager_keeper, notification_processor, push_status_queue) }
5657
let(:sse_handler) { SplitIoClient::SSE::SSEHandler.new(config, splits_worker, segments_worker, sse_client) }
5758
let(:push_manager) { SplitIoClient::Engine::PushManager.new(config, sse_handler, api_key, telemetry_runtime_producer) }
58-
let(:push_status_queue) { Queue.new }
5959

6060
before do
6161
mock_split_changes_with_since(splits, '-1')

spec/engine/synchronizer_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
let(:segment1) { File.read(File.join(SplitIoClient.root, 'spec/test_data/integrations/segment1.json')) }
1010
let(:segment2) { File.read(File.join(SplitIoClient.root, 'spec/test_data/integrations/segment2.json')) }
1111
let(:segment3) { File.read(File.join(SplitIoClient.root, 'spec/test_data/integrations/segment3.json')) }
12-
let(:api_key) { 'api-key-test' }
12+
let(:api_key) { 'Synchronizer-key' }
1313
let(:log) { StringIO.new }
1414
let(:config) { SplitIoClient::SplitConfig.new(logger: Logger.new(log)) }
1515
let(:splits_repository) { SplitIoClient::Cache::Repositories::SplitsRepository.new(config) }

spec/engine_spec.rb

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
describe SplitIoClient, type: :client do
88
RSpec.shared_examples 'SplitIoClient' do |cache_adapter|
99
subject do
10-
SplitIoClient::SplitFactory.new('test_api_key',
10+
SplitIoClient::SplitFactory.new('engine-spec-key',
1111
logger: Logger.new(log),
1212
cache_adapter: cache_adapter,
1313
redis_namespace: 'test',
@@ -83,6 +83,15 @@
8383

8484
context '#equal_to_set_matcher and get_treatment validation attributes' do
8585
before do
86+
stub_request(:post, 'https://events.split.io/api/testImpressions/bulk')
87+
.to_return(status: 200, body: '')
88+
89+
stub_request(:get, 'https://sdk.split.io/api/splitChanges?since')
90+
.to_return(status: 200, body: '')
91+
92+
stub_request(:post, 'https://telemetry.split.io/api/v1/metrics/config')
93+
.to_return(status: 200, body: '')
94+
8695
load_splits(equal_to_set_matcher_json)
8796
subject.block_until_ready
8897
end
@@ -123,6 +132,10 @@
123132

124133
context '#get_treatment' do
125134
before do
135+
stub_request(:post, 'https://telemetry.split.io/api/v1/metrics/config').to_return(status: 200, body: '')
136+
stub_request(:get, 'https://sdk.split.io/api/splitChanges?since').to_return(status: 200, body: '')
137+
stub_request(:post, 'https://events.split.io/api/testImpressions/bulk').to_return(status: 200, body: '')
138+
126139
load_splits(all_keys_matcher_json)
127140
subject.block_until_ready
128141
end
@@ -176,7 +189,7 @@
176189
value = 123
177190
expect(subject.get_treatment({ bucketing_key: 'random_user_id', matching_key: value }, 'test_feature'))
178191
.to eq 'on'
179-
expect(log.string).to include "get_treatment: matching_key \"#{value}\" is not of type String, converting"
192+
expect(log.string).to include "get_treatment: matching_key \"#{value}\" is not of type String, converting"
180193
end
181194

182195
it 'returns control on nil bucketing_key' do
@@ -957,7 +970,7 @@
957970

958971
context 'standalone mode' do
959972
subject do
960-
SplitIoClient::SplitFactory.new('test_api_key',
973+
SplitIoClient::SplitFactory.new('engine-standalone-key',
961974
logger: Logger.new('/dev/null'),
962975
cache_adapter: :memory,
963976
mode: :standalone,
@@ -983,7 +996,7 @@
983996
end
984997

985998
subject do
986-
SplitIoClient::SplitFactory.new('test_api_key',
999+
SplitIoClient::SplitFactory.new('engine-spec-redis-key',
9871000
logger: Logger.new('/dev/null'),
9881001
cache_adapter: :redis,
9891002
redis_namespace: 'test',

0 commit comments

Comments
 (0)