@@ -142,7 +142,7 @@ test_topology_scanner_discovery ()
142
142
mongoc_client_t * client ;
143
143
mongoc_topology_scanner_t * scanner ;
144
144
char * uri_str ;
145
- mongoc_read_prefs_t * primary_pref ;
145
+ mongoc_read_prefs_t * secondary_pref ;
146
146
bson_error_t error ;
147
147
future_t * future ;
148
148
request_t * request ;
@@ -174,32 +174,41 @@ test_topology_scanner_discovery ()
174
174
mock_server_get_host_and_port (primary ));
175
175
client = mongoc_client_new (uri_str );
176
176
scanner = client -> topology -> scanner ;
177
- primary_pref = mongoc_read_prefs_new (MONGOC_READ_PRIMARY );
177
+ secondary_pref = mongoc_read_prefs_new (MONGOC_READ_SECONDARY_PREFERRED );
178
178
179
179
future = future_topology_select (client -> topology , MONGOC_SS_READ ,
180
- primary_pref , 15 , & error );
180
+ secondary_pref , 15 , & error );
181
181
182
182
/* a single scan discovers *and* checks the secondary */
183
+ AWAIT (scanner -> async -> ncmds == 1 );
184
+ ASSERT_CMPINT (1 , = = , (int ) mongoc_host_list_count (scanner -> seen ));
183
185
request = mock_server_receives_ismaster (primary );
184
186
mock_server_replies_simple (request , primary_response );
185
187
request_destroy (request );
186
188
187
189
/* let client process that response */
188
190
_mongoc_usleep (250 * 1000 );
191
+ ASSERT_CMPINT (2 , = = , (int ) mongoc_host_list_count (scanner -> seen ));
189
192
190
193
/* a check of the secondary is scheduled in this scan */
191
- AWAIT (scanner -> async -> ncmds );
194
+ AWAIT (scanner -> async -> ncmds == 1 );
192
195
193
196
request = mock_server_receives_ismaster (secondary );
194
197
mock_server_replies_simple (request , secondary_response );
195
198
/* scan completes */
196
- AWAIT (! scanner -> async -> ncmds );
199
+ AWAIT (scanner -> async -> ncmds == 0 );
197
200
ASSERT_OR_PRINT ((sd = future_get_mongoc_server_description_ptr (future )),
198
201
error );
199
202
203
+ ASSERT_CMPSTR (sd -> host .host_and_port ,
204
+ mock_server_get_host_and_port (secondary ));
205
+
206
+ /* "seen" is reset */
207
+ ASSERT_CMPINT (0 , = = , (int ) mongoc_host_list_count (scanner -> seen ));
208
+
200
209
mongoc_server_description_destroy (sd );
201
210
request_destroy (request );
202
- mongoc_read_prefs_destroy (primary_pref );
211
+ mongoc_read_prefs_destroy (secondary_pref );
203
212
bson_free (secondary_response );
204
213
bson_free (primary_response );
205
214
bson_free (uri_str );
@@ -209,9 +218,7 @@ test_topology_scanner_discovery ()
209
218
}
210
219
211
220
212
- /*
213
- * Check that scanner doesn't spinlock if two primaries point at each other.
214
- */
221
+ /* scanner shouldn't spin if two primaries point at each other */
215
222
void
216
223
test_topology_scanner_oscillate ()
217
224
{
@@ -266,13 +273,21 @@ test_topology_scanner_oscillate ()
266
273
267
274
/* let client process that response */
268
275
_mongoc_usleep (250 * 1000 );
269
- AWAIT (scanner -> async -> ncmds );
276
+ AWAIT (scanner -> async -> ncmds == 1 );
270
277
271
278
request = mock_server_receives_ismaster (server1 );
272
279
mock_server_replies_simple (request , server1_response );
273
- AWAIT (!scanner -> async -> ncmds );
280
+
281
+ /* we don't schedule another check of server0 */
282
+ _mongoc_usleep (250 * 1000 );
283
+ AWAIT (scanner -> async -> ncmds == 0 );
274
284
275
285
assert (!future_get_mongoc_server_description_ptr (future ));
286
+ assert (scanner -> async -> ncmds == 0 );
287
+
288
+ /* "seen" is reset */
289
+ ASSERT_CMPINT (0 , = = , (int ) mongoc_host_list_count (scanner -> seen ));
290
+
276
291
request_destroy (request );
277
292
mongoc_read_prefs_destroy (primary_pref );
278
293
bson_free (server1_response );
@@ -293,8 +308,6 @@ test_topology_scanner_install (TestSuite *suite)
293
308
#endif
294
309
TestSuite_Add (suite , "/TOPOLOGY/scanner_discovery" ,
295
310
test_topology_scanner_discovery );
296
- /*
297
311
TestSuite_Add (suite , "/TOPOLOGY/scanner_oscillate" ,
298
312
test_topology_scanner_oscillate );
299
- */
300
313
}
0 commit comments