2
2
import { type TestConfiguration } from '../../tools/runner/config' ;
3
3
import { runScriptAndGetProcessInfo } from './resource_tracking_script_builder' ;
4
4
5
- describe . only ( 'MongoClient.close() Integration' , ( ) => {
5
+ describe . skip ( 'MongoClient.close() Integration' , ( ) => {
6
6
// note: these tests are set-up in accordance of the resource ownership tree
7
7
8
8
let config : TestConfiguration ;
@@ -120,13 +120,19 @@ describe.only('MongoClient.close() Integration', () => {
120
120
'monitor interval timer is cleaned up by client.close()' ,
121
121
metadata ,
122
122
async function ( ) {
123
- const run = async function ( { MongoClient, uri, expect, getTimerCount, mongodb } ) {
123
+ const run = async function ( {
124
+ MongoClient,
125
+ uri,
126
+ expect,
127
+ getTimerCount,
128
+ promiseWithResolvers
129
+ } ) {
124
130
const heartbeatFrequencyMS = 2000 ;
125
131
const client = new MongoClient ( uri , { heartbeatFrequencyMS } ) ;
126
- const { heartbeatPromise , resolve } = mongodb . promiseWithResolvers ( ) ;
132
+ const { promise , resolve } = promiseWithResolvers ( ) ;
127
133
client . once ( 'serverHeartbeatSucceeded' , ( ) => resolve ( ) ) ;
128
134
await client . connect ( ) ;
129
- await heartbeatPromise ;
135
+ await promise ;
130
136
131
137
function monitorTimersExist ( servers ) {
132
138
for ( const [ , server ] of servers ) {
@@ -153,12 +159,18 @@ describe.only('MongoClient.close() Integration', () => {
153
159
'the new monitor interval timer is cleaned up by client.close()' ,
154
160
metadata ,
155
161
async ( ) => {
156
- const run = async function ( { MongoClient, expect, getTimerCount } ) {
162
+ const run = async function ( {
163
+ MongoClient,
164
+ expect,
165
+ getTimerCount,
166
+ promiseWithResolvers
167
+ } ) {
157
168
const heartbeatFrequencyMS = 2000 ;
158
169
const client = new MongoClient ( 'mongodb://fakeUri' , { heartbeatFrequencyMS } ) ;
159
- const heartbeatPromise = client . once ( 'serverHeartbeatFailed' , v => v ) ;
170
+ const { promise, resolve } = promiseWithResolvers ( ) ;
171
+ client . once ( 'serverHeartbeatFailed' , ( ) => resolve ( ) ) ;
160
172
client . connect ( ) ;
161
- await heartbeatPromise ;
173
+ await promise ;
162
174
163
175
function getMonitorTimer ( servers ) {
164
176
for ( const [ , server ] of servers ) {
@@ -213,16 +225,22 @@ describe.only('MongoClient.close() Integration', () => {
213
225
'the rtt pinger timer is cleaned up by client.close()' ,
214
226
metadata ,
215
227
async function ( ) {
216
- const run = async function ( { MongoClient, uri, expect, getTimerCount, mongodb } ) {
228
+ const run = async function ( {
229
+ MongoClient,
230
+ uri,
231
+ expect,
232
+ getTimerCount,
233
+ promiseWithResolvers
234
+ } ) {
217
235
const heartbeatFrequencyMS = 2000 ;
218
236
const client = new MongoClient ( uri , {
219
237
serverMonitoringMode : 'stream' ,
220
238
heartbeatFrequencyMS
221
239
} ) ;
222
240
await client . connect ( ) ;
223
- const { heartbeatPromise , resolve } = mongodb . promiseWithResolvers ( ) ;
241
+ const { promise , resolve } = promiseWithResolvers ( ) ;
224
242
client . once ( 'serverHeartbeatSucceeded' , ( ) => resolve ( ) ) ;
225
- await heartbeatPromise ;
243
+ await promise ;
226
244
227
245
function getRttTimer ( servers ) {
228
246
for ( const [ , server ] of servers ) {
@@ -248,8 +266,14 @@ describe.only('MongoClient.close() Integration', () => {
248
266
describe ( 'Node.js resource: Socket' , ( ) => {
249
267
describe ( 'when rtt monitoring is turned on' , ( ) => {
250
268
it ( 'no sockets remain after client.close()' , metadata , async ( ) => {
251
- const run = async ( { MongoClient, uri, expect, getSockets, mongodb } ) => {
252
- const heartbeatFrequencyMS = 100 ;
269
+ const run = async ( {
270
+ MongoClient,
271
+ uri,
272
+ expect,
273
+ getSockets,
274
+ promiseWithResolvers
275
+ } ) => {
276
+ const heartbeatFrequencyMS = 500 ;
253
277
const client = new MongoClient ( uri , {
254
278
serverMonitoringMode : 'stream' ,
255
279
heartbeatFrequencyMS
@@ -258,27 +282,28 @@ describe.only('MongoClient.close() Integration', () => {
258
282
259
283
const socketsAddressesBeforeHeartbeat = getSockets ( ) . map ( r => r . address ) ;
260
284
261
- const activeSocketsAfterHeartbeat = ( ) =>
262
- getSockets ( )
263
- . filter ( r => ! socketsAddressesBeforeHeartbeat . includes ( r . address ) )
264
- . map ( r => r . remoteEndpoint ?. host + ':' + r . remoteEndpoint ?. port ) ;
265
-
266
- // set of servers whose hearbeats have occurred
285
+ // set of servers whose heartbeats have occurred
267
286
const heartbeatOccurredSet = new Set ( ) ;
268
287
269
288
const servers = client . topology . s . servers ;
289
+
270
290
while ( heartbeatOccurredSet . size < servers . size ) {
271
- const { heartbeatPromise , resolve } = mongodb . promiseWithResolvers ( ) ;
272
- client . once ( 'serverHeartbeatSucceeded' , ( ev ) => {
291
+ const { promise , resolve } = promiseWithResolvers ( ) ;
292
+ client . once ( 'serverHeartbeatSucceeded' , ev => {
273
293
heartbeatOccurredSet . add ( ev . connectionId ) ;
274
294
resolve ( ) ;
275
295
} ) ;
276
- await heartbeatPromise ;
296
+ await promise ;
277
297
}
278
298
299
+ const activeSocketsAfterHeartbeat = ( ) =>
300
+ getSockets ( )
301
+ . filter ( r => ! socketsAddressesBeforeHeartbeat . includes ( r . address ) )
302
+ . map ( r => r . remoteEndpoint ?. host + ':' + r . remoteEndpoint ?. port ) ;
279
303
// all servers should have had a heartbeat event and had a new socket created for rtt pinger
280
- for ( const [ server , ] of servers ) {
281
- expect ( activeSocketsAfterHeartbeat ( ) ) . to . deep . contain ( server [ 0 ] ) ;
304
+ const activeSocketsBeforeClose = activeSocketsAfterHeartbeat ( ) ;
305
+ for ( const [ server ] of servers ) {
306
+ expect ( activeSocketsBeforeClose ) . to . deep . contain ( server ) ;
282
307
}
283
308
284
309
// close the client
0 commit comments