Skip to content

Commit c9c34ea

Browse files
p-mongop
andauthored
RUBY-2281 Use local event subscribers in test suite (#1953)
Co-authored-by: Oleg Pudeyev <[email protected]>
1 parent a57ae98 commit c9c34ea

21 files changed

+293
-265
lines changed

spec/integration/cursor_reaping_spec.rb

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,23 @@
55
# in MRI, I don't currently know how to force GC to run in JRuby
66
only_mri
77

8-
let(:client) { subscribed_client }
8+
let(:subscriber) { EventSubscriber.new }
9+
10+
let(:client) do
11+
authorized_client.tap do |client|
12+
client.subscribe(Mongo::Monitoring::COMMAND, subscriber)
13+
end
14+
end
15+
916
let(:collection) { client['cursor_reaping_spec'] }
1017

11-
before(:all) do
18+
before do
1219
data = [{a: 1}] * 10
13-
ClientRegistry.instance.global_client('subscribed')['cursor_reaping_spec'].insert_many(data)
20+
authorized_client['cursor_reaping_spec'].delete_many
21+
authorized_client['cursor_reaping_spec'].insert_many(data)
1422
end
1523

1624
context 'a no-timeout cursor' do
17-
before do
18-
EventSubscriber.clear_events!
19-
end
20-
2125
it 'reaps nothing when we do not query' do
2226
# this is a base line test to ensure that the reaps in the other test
2327
# aren't done on some global cursor
@@ -26,7 +30,7 @@
2630
# just the scope, no query is happening
2731
collection.find.batch_size(2).no_cursor_timeout
2832

29-
events = EventSubscriber.started_events.select do |event|
33+
events = subscriber.started_events.select do |event|
3034
event.command['killCursors']
3135
end
3236

@@ -58,14 +62,14 @@
5862
# force periodic executor to run because its frequency is not configurable
5963
client.cluster.instance_variable_get('@periodic_executor').execute
6064

61-
started_event = EventSubscriber.started_events.detect do |event|
65+
started_event = subscriber.started_events.detect do |event|
6266
event.command['killCursors'] &&
6367
event.command['cursors'].map { |c| Utils.int64_value(c) }.include?(cursor_id)
6468
end
6569

6670
expect(started_event).not_to be_nil
6771

68-
succeeded_event = EventSubscriber.succeeded_events.detect do |event|
72+
succeeded_event = subscriber.succeeded_events.detect do |event|
6973
event.command_name == 'killCursors' && event.request_id == started_event.request_id
7074
end
7175

spec/integration/get_more_spec.rb

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,16 @@
44
# https://jira.mongodb.org/browse/RUBY-1987
55
min_server_fcv '3.2'
66

7+
let(:subscriber) { EventSubscriber.new }
8+
9+
let(:client) do
10+
authorized_client.tap do |client|
11+
client.subscribe(Mongo::Monitoring::COMMAND, subscriber)
12+
end
13+
end
14+
715
let(:collection) do
8-
subscribed_client['get_more_spec']
16+
client['get_more_spec']
917
end
1018

1119
let(:scope) do
@@ -16,11 +24,10 @@
1624
collection.delete_many
1725
collection.insert_one(a: 1)
1826
#collection.insert_one(a: 2)
19-
EventSubscriber.clear_events!
2027
end
2128

2229
let(:get_more_command) do
23-
event = EventSubscriber.single_command_started_event('getMore')
30+
event = subscriber.single_command_started_event('getMore')
2431
event.command['getMore']
2532
end
2633

spec/integration/retryable_errors_spec.rb

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,16 @@
44
# Requirement for fail point
55
min_server_fcv '4.0'
66

7+
let(:subscriber) { EventSubscriber.new }
8+
9+
let(:client_options) do
10+
{}
11+
end
12+
713
let(:client) do
8-
subscribed_client
14+
authorized_client.with(client_options).tap do |client|
15+
client.subscribe(Mongo::Monitoring::COMMAND, subscriber)
16+
end
917
end
1018

1119
let(:collection) do
@@ -83,7 +91,7 @@
8391
end
8492

8593
let(:events) do
86-
EventSubscriber.command_started_events('find')
94+
subscriber.command_started_events('find')
8795
end
8896
end
8997

@@ -128,7 +136,7 @@
128136
end
129137

130138
let(:events) do
131-
EventSubscriber.command_started_events('insert')
139+
subscriber.command_started_events('insert')
132140
end
133141
end
134142

@@ -141,6 +149,7 @@
141149
end
142150

143151
it 'publishes two events' do
152+
operation_exception
144153

145154
expect(events.length).to eq(2)
146155
end
@@ -155,6 +164,7 @@
155164
end
156165

157166
it 'publishes one event' do
167+
operation_exception
158168

159169
expect(events.length).to eq(1)
160170
end
@@ -217,17 +227,17 @@
217227
context 'modern read retries' do
218228
require_wired_tiger_on_36
219229

220-
let(:client) do
221-
subscribed_client.with(retry_reads: true)
230+
let(:client_options) do
231+
{retry_reads: true}
222232
end
223233

224234
it_behaves_like 'failing retry'
225235
it_behaves_like 'modern retry'
226236
end
227237

228238
context 'legacy read retries' do
229-
let(:client) do
230-
subscribed_client.with(retry_reads: false, read_retry_interval: 0)
239+
let(:client_options) do
240+
{retry_reads: false, read_retry_interval: 0}
231241
end
232242

233243
it_behaves_like 'failing retry'
@@ -236,8 +246,8 @@
236246
end
237247

238248
context 'when read retries are disabled' do
239-
let(:client) do
240-
subscribed_client.with(retry_reads: false, max_read_retries: 0)
249+
let(:client_options) do
250+
{retry_reads: false, max_read_retries: 0}
241251
end
242252

243253
include_context 'read operation'
@@ -252,17 +262,17 @@
252262
context 'modern write retries' do
253263
require_wired_tiger_on_36
254264

255-
let(:client) do
256-
subscribed_client.with(retry_writes: true)
265+
let(:client_options) do
266+
{retry_writes: true}
257267
end
258268

259269
it_behaves_like 'failing retry'
260270
it_behaves_like 'modern retry'
261271
end
262272

263273
context 'legacy write' do
264-
let(:client) do
265-
subscribed_client.with(retry_writes: false)
274+
let(:client_options) do
275+
{retry_writes: false}
266276
end
267277

268278
it_behaves_like 'failing retry'

spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
let(:check_collection) do
3333
# Verify data in the collection using another client instance to avoid
3434
# having the verification read trigger cluster scans on the writing client
35-
subscribed_client[TEST_COLL]
35+
root_authorized_client[TEST_COLL]
3636
end
3737

3838
let(:primary_connection) do

spec/integration/step_down_spec.rb

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@
2929
end
3030
end
3131

32-
let(:event_subscriber) { EventSubscriber.new }
32+
let(:subscriber) { EventSubscriber.new }
3333

3434
let(:test_client) do
3535
authorized_client_without_any_retries.with(server_selection_timeout: 20).tap do |client|
36-
client.subscribe(Mongo::Monitoring::CONNECTION_POOL, event_subscriber)
36+
client.subscribe(Mongo::Monitoring::CONNECTION_POOL, subscriber)
3737
end
3838
end
3939

@@ -48,8 +48,8 @@
4848

4949
let(:subscribed_client) do
5050
test_client.tap do |client|
51-
client.subscribe(Mongo::Monitoring::COMMAND, EventSubscriber)
52-
client.subscribe(Mongo::Monitoring::CONNECTION_POOL, EventSubscriber)
51+
client.subscribe(Mongo::Monitoring::COMMAND, subscriber)
52+
client.subscribe(Mongo::Monitoring::CONNECTION_POOL, subscriber)
5353
end
5454
end
5555

@@ -65,21 +65,21 @@
6565
it 'continues through step down' do
6666

6767
subscribed_client.cluster.next_primary.pool.clear
68-
event_subscriber.clear_events!
68+
subscriber.clear_events!
6969

7070
# get the first item
7171
item = enum.next
7272
expect(item['test']).to eq(1)
7373

74-
connection_created_events = EventSubscriber.published_events.select do |event|
74+
connection_created_events = subscriber.published_events.select do |event|
7575
event.is_a?(Mongo::Monitoring::Event::Cmap::ConnectionCreated)
7676
end
7777
expect(connection_created_events).not_to be_empty
7878

7979
current_primary = subscribed_client.cluster.next_primary
8080
ClusterTools.instance.change_primary
8181

82-
EventSubscriber.clear_events!
82+
subscriber.clear_events!
8383

8484
# exhaust the batch
8585
9.times do
@@ -90,14 +90,14 @@
9090
item = enum.next
9191
expect(item['test']).to eq(1)
9292

93-
get_more_events = EventSubscriber.started_events.select do |event|
93+
get_more_events = subscriber.started_events.select do |event|
9494
event.command['getMore']
9595
end
9696

9797
expect(get_more_events.length).to eq(1)
9898

9999
# getMore should have been sent on the same connection as find
100-
connection_created_events = EventSubscriber.published_events.select do |event|
100+
connection_created_events = subscriber.published_events.select do |event|
101101
event.is_a?(Mongo::Monitoring::Event::Cmap::ConnectionCreated)
102102
end
103103
expect(connection_created_events).to be_empty
@@ -155,13 +155,13 @@
155155
let(:fail_point_code) { 10107 }
156156

157157
it 'keeps connection open' do
158-
event_subscriber.clear_events!
158+
subscriber.clear_events!
159159

160160
expect do
161161
collection.insert_one(test: 1)
162162
end.to raise_error(Mongo::Error::OperationFailure, /10107/)
163163

164-
expect(event_subscriber.select_published_events(Mongo::Monitoring::Event::Cmap::PoolCleared).count).to eq(0)
164+
expect(subscriber.select_published_events(Mongo::Monitoring::Event::Cmap::PoolCleared).count).to eq(0)
165165
end
166166
end
167167

@@ -174,13 +174,13 @@
174174
let(:fail_point_code) { 10107 }
175175

176176
it 'closes the connection' do
177-
event_subscriber.clear_events!
177+
subscriber.clear_events!
178178

179179
expect do
180180
collection.insert_one(test: 1)
181181
end.to raise_error(Mongo::Error::OperationFailure, /10107/)
182182

183-
expect(event_subscriber.select_published_events(Mongo::Monitoring::Event::Cmap::PoolCleared).count).to eq(1)
183+
expect(subscriber.select_published_events(Mongo::Monitoring::Event::Cmap::PoolCleared).count).to eq(1)
184184
end
185185
end
186186

@@ -191,13 +191,13 @@
191191
let(:fail_point_code) { 11600 }
192192

193193
it 'closes the connection' do
194-
event_subscriber.clear_events!
194+
subscriber.clear_events!
195195

196196
expect do
197197
collection.insert_one(test: 1)
198198
end.to raise_error(Mongo::Error::OperationFailure, /11600/)
199199

200-
expect(event_subscriber.select_published_events(Mongo::Monitoring::Event::Cmap::PoolCleared).count).to eq(1)
200+
expect(subscriber.select_published_events(Mongo::Monitoring::Event::Cmap::PoolCleared).count).to eq(1)
201201
end
202202
end
203203
end

spec/lite_spec_helper.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,6 @@
136136
end
137137
end
138138

139-
EventSubscriber.initialize
140-
141139
if SpecConfig.instance.active_support?
142140
require "active_support/time"
143141
require 'mongo/active_support'

spec/mongo/client_construction_spec.rb

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
describe Mongo::Client do
44
clean_slate
55

6+
let(:subscriber) { EventSubscriber.new }
7+
68
describe '.new' do
79
context 'with scan: false' do
810
it 'does not perform i/o' do
@@ -1253,7 +1255,7 @@
12531255

12541256
it 'copies monitoring subscribers' do
12551257
monitoring.subscribers.clear
1256-
client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, EventSubscriber.new)
1258+
client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
12571259
expect(monitoring.present_subscribers.length).to eq(1)
12581260
expect(monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(1)
12591261

@@ -1264,12 +1266,12 @@
12641266

12651267
it 'does not change subscribers on original client' do
12661268
monitoring.subscribers.clear
1267-
client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, EventSubscriber.new)
1269+
client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
12681270
expect(monitoring.present_subscribers.length).to eq(1)
12691271
expect(monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(1)
12701272

1271-
new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, EventSubscriber.new)
1272-
new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, EventSubscriber.new)
1273+
new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
1274+
new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
12731275
expect(new_monitoring.present_subscribers.length).to eq(1)
12741276
expect(new_monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(3)
12751277
# original client should not have gotten any of the new subscribers
@@ -1297,7 +1299,7 @@
12971299

12981300
it 'resets monitoring subscribers' do
12991301
monitoring.subscribers.clear
1300-
client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, EventSubscriber.new)
1302+
client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
13011303
expect(monitoring.present_subscribers.length).to eq(1)
13021304
expect(monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(1)
13031305

@@ -1310,12 +1312,12 @@
13101312

13111313
it 'does not change subscribers on original client' do
13121314
monitoring.subscribers.clear
1313-
client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, EventSubscriber.new)
1315+
client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
13141316
expect(monitoring.present_subscribers.length).to eq(1)
13151317
expect(monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(1)
13161318

1317-
new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, EventSubscriber.new)
1318-
new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, EventSubscriber.new)
1319+
new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
1320+
new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
13191321
# 7 default subscribers + heartbeat
13201322
expect(new_monitoring.present_subscribers.length).to eq(8)
13211323
# the heartbeat subscriber on the original client is not inherited
@@ -1758,7 +1760,6 @@
17581760
# in #with, the consistent behavior is to never transfer sdam_proc to
17591761
# the new client.
17601762
context 'when sdam_proc is given on original client' do
1761-
let(:subscriber) { EventSubscriber.new }
17621763

17631764
let(:sdam_proc) do
17641765
Proc.new do |client|

0 commit comments

Comments
 (0)