Skip to content

Commit d46fc15

Browse files
committed
test cleanup
1 parent 0bcf2e8 commit d46fc15

File tree

1 file changed

+40
-38
lines changed

1 file changed

+40
-38
lines changed

test/unit/sdam/monitor.test.ts

Lines changed: 40 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1+
import { once } from 'node:events';
12
import * as net from 'node:net';
23

34
import { expect } from 'chai';
45
import { coerce } from 'semver';
56
import * as sinon from 'sinon';
67
import { setTimeout } from 'timers';
8+
import { setTimeout as setTimeoutPromise } from 'timers/promises';
79

8-
import { MongoClient } from '../../mongodb';
10+
import { MongoClient, ServerHeartbeatSucceededEvent } from '../../mongodb';
911
import {
1012
isHello,
1113
LEGACY_HELLO_COMMAND,
@@ -141,7 +143,7 @@ describe('monitoring', function () {
141143
}).skipReason = 'TODO(NODE-3600): Unskip flaky tests';
142144

143145
describe('Monitor', function () {
144-
let monitor;
146+
let monitor: Monitor | null;
145147

146148
beforeEach(() => {
147149
monitor = null;
@@ -153,7 +155,7 @@ describe('monitoring', function () {
153155
}
154156
});
155157

156-
it('should connect and issue an initial server check', function (done) {
158+
it('should connect and issue an initial server check', async function () {
157159
mockServer.setMessageHandler(request => {
158160
const doc = request.document;
159161
if (isHello(doc)) {
@@ -164,15 +166,17 @@ describe('monitoring', function () {
164166
const server = new MockServer(mockServer.address());
165167
monitor = new Monitor(server as any, {} as any);
166168

167-
monitor.on('serverHeartbeatFailed', () => done(new Error('unexpected heartbeat failure')));
168-
monitor.on('serverHeartbeatSucceeded', () => {
169-
expect(monitor.connection).to.have.property('id', '<monitor>');
170-
done();
171-
});
169+
const heartbeatFailed = once(monitor, 'serverHeartbeatFailed');
170+
const heartbeatSucceeded = once(monitor, 'serverHeartbeatSucceeded');
172171
monitor.connect();
172+
173+
const res = await Promise.race([heartbeatFailed, heartbeatSucceeded]);
174+
175+
expect(res[0]).to.be.instanceOf(ServerHeartbeatSucceededEvent);
176+
expect(monitor.connection).to.have.property('id', '<monitor>');
173177
});
174178

175-
it('should ignore attempts to connect when not already closed', function (done) {
179+
it('should ignore attempts to connect when not already closed', async function () {
176180
mockServer.setMessageHandler(request => {
177181
const doc = request.document;
178182
if (isHello(doc)) {
@@ -183,13 +187,17 @@ describe('monitoring', function () {
183187
const server = new MockServer(mockServer.address());
184188
monitor = new Monitor(server as any, {} as any);
185189

186-
monitor.on('serverHeartbeatFailed', () => done(new Error('unexpected heartbeat failure')));
187-
monitor.on('serverHeartbeatSucceeded', () => done());
190+
const heartbeatFailed = once(monitor, 'serverHeartbeatFailed');
191+
const heartbeatSucceeded = once(monitor, 'serverHeartbeatSucceeded');
188192
monitor.connect();
193+
194+
const res = await Promise.race([heartbeatFailed, heartbeatSucceeded]);
195+
196+
expect(res[0]).to.be.instanceOf(ServerHeartbeatSucceededEvent);
189197
monitor.connect();
190198
});
191199

192-
it('should not initiate another check if one is in progress', function (done) {
200+
it('should not initiate another check if one is in progress', async function () {
193201
mockServer.setMessageHandler(request => {
194202
const doc = request.document;
195203
if (isHello(doc)) {
@@ -202,32 +210,27 @@ describe('monitoring', function () {
202210

203211
const startedEvents: ServerHeartbeatStartedEvent[] = [];
204212
monitor.on('serverHeartbeatStarted', event => startedEvents.push(event));
205-
monitor.on('close', () => {
206-
expect(startedEvents).to.have.length(2);
207-
done();
208-
});
213+
const monitorClose = once(monitor, 'close');
209214

210215
monitor.connect();
211-
monitor.once('serverHeartbeatSucceeded', () => {
212-
monitor.requestCheck();
213-
monitor.requestCheck();
214-
monitor.requestCheck();
215-
monitor.requestCheck();
216-
monitor.requestCheck();
216+
await once(monitor, 'serverHeartbeatSucceeded');
217+
monitor.requestCheck();
218+
monitor.requestCheck();
219+
monitor.requestCheck();
220+
monitor.requestCheck();
221+
monitor.requestCheck();
217222

218-
const minHeartbeatFrequencyMS = 500;
219-
setTimeout(() => {
220-
// wait for minHeartbeatFrequencyMS, then request a check and verify another check occurred
221-
monitor.once('serverHeartbeatSucceeded', () => {
222-
monitor.close();
223-
});
223+
const minHeartbeatFrequencyMS = 500;
224+
await setTimeoutPromise(minHeartbeatFrequencyMS);
224225

225-
monitor.requestCheck();
226-
}, minHeartbeatFrequencyMS);
227-
});
226+
await once(monitor, 'serverHeartbeatSucceeded');
227+
monitor.close();
228+
229+
await monitorClose;
230+
expect(startedEvents).to.have.length(2);
228231
});
229232

230-
it('should not close the monitor on a failed heartbeat', function (done) {
233+
it('should not close the monitor on a failed heartbeat', async function () {
231234
let helloCount = 0;
232235
mockServer.setMessageHandler(request => {
233236
const doc = request.document;
@@ -263,16 +266,13 @@ describe('monitoring', function () {
263266
let successCount = 0;
264267
monitor.on('serverHeartbeatSucceeded', () => {
265268
if (successCount++ === 2) {
266-
monitor.close();
269+
monitor?.close();
267270
}
268271
});
269272

270-
monitor.on('close', () => {
271-
expect(events).to.have.length(2);
272-
done();
273-
});
274-
275273
monitor.connect();
274+
await once(monitor, 'close');
275+
expect(events).to.have.length(2);
276276
});
277277

278278
it('should upgrade to hello from legacy hello when initial handshake contains helloOk', function (done) {
@@ -306,6 +306,8 @@ describe('monitoring', function () {
306306
}, minHeartbeatFrequencyMS);
307307
});
308308
});
309+
310+
describe('');
309311
});
310312

311313
describe('class MonitorInterval', function () {

0 commit comments

Comments
 (0)