22import { type TestConfiguration } from '../../tools/runner/config' ;
33import { runScriptAndGetProcessInfo } from './resource_tracking_script_builder' ;
44
5- describe . only ( 'MongoClient.close() Integration' , ( ) => {
5+ describe . skip ( 'MongoClient.close() Integration' , ( ) => {
66 // note: these tests are set-up in accordance of the resource ownership tree
77
88 let config : TestConfiguration ;
@@ -120,13 +120,19 @@ describe.only('MongoClient.close() Integration', () => {
120120 'monitor interval timer is cleaned up by client.close()' ,
121121 metadata ,
122122 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+ } ) {
124130 const heartbeatFrequencyMS = 2000 ;
125131 const client = new MongoClient ( uri , { heartbeatFrequencyMS } ) ;
126- const { heartbeatPromise , resolve } = mongodb . promiseWithResolvers ( ) ;
132+ const { promise , resolve } = promiseWithResolvers ( ) ;
127133 client . once ( 'serverHeartbeatSucceeded' , ( ) => resolve ( ) ) ;
128134 await client . connect ( ) ;
129- await heartbeatPromise ;
135+ await promise ;
130136
131137 function monitorTimersExist ( servers ) {
132138 for ( const [ , server ] of servers ) {
@@ -153,12 +159,18 @@ describe.only('MongoClient.close() Integration', () => {
153159 'the new monitor interval timer is cleaned up by client.close()' ,
154160 metadata ,
155161 async ( ) => {
156- const run = async function ( { MongoClient, expect, getTimerCount } ) {
162+ const run = async function ( {
163+ MongoClient,
164+ expect,
165+ getTimerCount,
166+ promiseWithResolvers
167+ } ) {
157168 const heartbeatFrequencyMS = 2000 ;
158169 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 ( ) ) ;
160172 client . connect ( ) ;
161- await heartbeatPromise ;
173+ await promise ;
162174
163175 function getMonitorTimer ( servers ) {
164176 for ( const [ , server ] of servers ) {
@@ -213,16 +225,22 @@ describe.only('MongoClient.close() Integration', () => {
213225 'the rtt pinger timer is cleaned up by client.close()' ,
214226 metadata ,
215227 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+ } ) {
217235 const heartbeatFrequencyMS = 2000 ;
218236 const client = new MongoClient ( uri , {
219237 serverMonitoringMode : 'stream' ,
220238 heartbeatFrequencyMS
221239 } ) ;
222240 await client . connect ( ) ;
223- const { heartbeatPromise , resolve } = mongodb . promiseWithResolvers ( ) ;
241+ const { promise , resolve } = promiseWithResolvers ( ) ;
224242 client . once ( 'serverHeartbeatSucceeded' , ( ) => resolve ( ) ) ;
225- await heartbeatPromise ;
243+ await promise ;
226244
227245 function getRttTimer ( servers ) {
228246 for ( const [ , server ] of servers ) {
@@ -248,8 +266,14 @@ describe.only('MongoClient.close() Integration', () => {
248266 describe ( 'Node.js resource: Socket' , ( ) => {
249267 describe ( 'when rtt monitoring is turned on' , ( ) => {
250268 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 ;
253277 const client = new MongoClient ( uri , {
254278 serverMonitoringMode : 'stream' ,
255279 heartbeatFrequencyMS
@@ -258,27 +282,28 @@ describe.only('MongoClient.close() Integration', () => {
258282
259283 const socketsAddressesBeforeHeartbeat = getSockets ( ) . map ( r => r . address ) ;
260284
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
267286 const heartbeatOccurredSet = new Set ( ) ;
268287
269288 const servers = client . topology . s . servers ;
289+
270290 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 => {
273293 heartbeatOccurredSet . add ( ev . connectionId ) ;
274294 resolve ( ) ;
275295 } ) ;
276- await heartbeatPromise ;
296+ await promise ;
277297 }
278298
299+ const activeSocketsAfterHeartbeat = ( ) =>
300+ getSockets ( )
301+ . filter ( r => ! socketsAddressesBeforeHeartbeat . includes ( r . address ) )
302+ . map ( r => r . remoteEndpoint ?. host + ':' + r . remoteEndpoint ?. port ) ;
279303 // 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 ) ;
282307 }
283308
284309 // close the client
0 commit comments