Skip to content

Commit 11aa73c

Browse files
TLS test cases
1 parent e77405f commit 11aa73c

File tree

5 files changed

+22
-296
lines changed

5 files changed

+22
-296
lines changed

logs.txt

Lines changed: 0 additions & 4 deletions
This file was deleted.

socket-connection-monitoring.cjs

Lines changed: 0 additions & 84 deletions
This file was deleted.

test/integration/node-specific/client_close.test.ts

Lines changed: 14 additions & 201 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
import { expect } from 'chai';
1+
/* eslint-disable @typescript-eslint/no-empty-function */
2+
23
import { type TestConfiguration } from '../../tools/runner/config';
34
import { runScriptAndGetProcessInfo } from './resource_tracking_script_builder';
45

5-
describe('MongoClient.close() Integration', () => {
6+
describe.skip('MongoClient.close() Integration', () => {
67
// note: these tests are set-up in accordance of the resource ownership tree
78

89
let config: TestConfiguration;
@@ -32,23 +33,9 @@ describe('MongoClient.close() Integration', () => {
3233
});
3334

3435
describe('Node.js resource: .dockerenv file access', () => {
35-
describe('when client is connecting and reads an infinite .dockerenv file', () => {
36-
it('the file read is not interrupted by client.close()', async function () {
37-
await runScriptAndGetProcessInfo(
38-
'docker-file-access',
39-
config,
40-
async function run({ MongoClient, uri, log, chai }) {
41-
// TODO: unsure how to make a /.dockerenv fs access read hang
42-
const client = this.configuration.newClient();
43-
client.connect();
44-
// assert resource exists
45-
chai.expect(process.getActiveResourcesInfo()).to.contain('FSReqPromise');
46-
await client.close();
47-
// assert resource still exists
48-
chai.expect(process.getActiveResourcesInfo()).to.contain('FSReqPromise');
49-
}
50-
);
51-
});
36+
describe('when client is connecting and fs.access stalls while accessing .dockerenv file', () => {
37+
it('the file access is not interrupted by client.close()', async function () {}).skipReason =
38+
'TODO(NODE-6624): Align Client.Close Test Cases with Finalized Design';
5239
});
5340
});
5441

@@ -63,7 +50,7 @@ describe('MongoClient.close() Integration', () => {
6350
const infiniteFile = '/dev/zero';
6451
log({ ActiveResources: process.getActiveResourcesInfo() });
6552

66-
// speculative authentication call to getToken() during initial handshake
53+
// speculative authentication call to getToken() is during initial handshake
6754
const client = new MongoClient(uri, {
6855
authMechanismProperties: { TOKEN_RESOURCE: infiniteFile }
6956
});
@@ -85,17 +72,7 @@ describe('MongoClient.close() Integration', () => {
8572
describe('Topology', () => {
8673
describe('Node.js resource: Server Selection Timer', () => {
8774
describe('after a Topology is created through client.connect()', () => {
88-
it('server selection timers are cleaned up by client.close()', async () => {
89-
await runScriptAndGetProcessInfo(
90-
'server-selection-timers',
91-
config,
92-
async function run({ MongoClient, uri }) {
93-
const client = new MongoClient(uri);
94-
client.connect();
95-
await client.close();
96-
}
97-
);
98-
});
75+
it('server selection timers are cleaned up by client.close()', async () => {});
9976
});
10077
});
10178

@@ -122,43 +99,11 @@ describe('MongoClient.close() Integration', () => {
12299

123100
describe('Connection Monitoring', () => {
124101
describe('Node.js resource: Socket', () => {
125-
it.only('no sockets remain after client.close()', metadata, async function () {
126-
await runScriptAndGetProcessInfo(
127-
'socket-connection-monitoring',
128-
config,
129-
async function run({ MongoClient, uri, log, chai }) {
130-
const client = new MongoClient(uri, { serverMonitoringMode: 'auto' });
131-
await client.connect();
132-
133-
// returns all active tcp endpoints
134-
const connectionMonitoringReport = () => process.report.getReport().libuv.filter(r => r.type === 'tcp' && r.is_active).map(r => r.remoteEndpoint);
135-
136-
log({report: connectionMonitoringReport() });
137-
// assert socket creation
138-
const servers = client.topology?.s.servers;
139-
for (const server of servers) {
140-
let { host, port } = server[1].s.description.hostAddress;
141-
// regardless of if its active the socket should be gone from the libuv report
142-
143-
chai.expect(connectionMonitoringReport()).to.deep.include({ host, port });
144-
}
145-
146-
await client.close();
147-
148-
// assert socket destruction
149-
for (const server of servers) {
150-
let { host, port } = server[1].s.description.hostAddress;
151-
chai.expect(connectionMonitoringReport()).to.not.deep.include({ host, port });
152-
}
153-
}
154-
);
155-
});
102+
it('no sockets remain after client.close()', metadata, async function () {});
156103
});
157104

158105
describe('Server resource: connection thread', () => {
159-
it('no connection threads remain after client.close()', metadata, async () => {
160-
// TODO: skip for LB mode
161-
});
106+
it('no connection threads remain after client.close()', metadata, async () => {});
162107
});
163108
});
164109

@@ -174,35 +119,7 @@ describe('MongoClient.close() Integration', () => {
174119
describe('Connection', () => {
175120
describe('Node.js resource: Socket', () => {
176121
describe('when rtt monitoring is turned on', () => {
177-
it('no sockets remain after client.close()', async () => {
178-
await runScriptAndGetProcessInfo(
179-
'socket-rtt-monitoring',
180-
config,
181-
async function run({ MongoClient, uri, log, chai }) {
182-
const client = new MongoClient(uri);
183-
await client.connect();
184-
185-
// returns all active tcp endpoints
186-
const connectionMonitoringReport = () => process.report.getReport().libuv.filter(r => r.type === 'tcp' && r.is_active).map(r => r.remoteEndpoint);
187-
188-
// assert socket creation
189-
const servers = client.topology?.s.servers;
190-
for (const server of servers) {
191-
let { host, port } = server[1].s.description.hostAddress;
192-
// regardless of if its active the socket should be gone from the libuv report
193-
chai.expect(connectionMonitoringReport()).to.deep.include({ host, port });
194-
}
195-
196-
await client.close();
197-
198-
// assert socket destruction
199-
for (const server of servers) {
200-
let { host, port } = server[1].s.description.hostAddress;
201-
chai.expect(connectionMonitoringReport()).to.not.deep.include({ host, port });
202-
}
203-
}
204-
);
205-
});
122+
it('no sockets remain after client.close()', async () => {});
206123
});
207124
});
208125

@@ -256,17 +173,7 @@ describe('MongoClient.close() Integration', () => {
256173
describe('SrvPoller', () => {
257174
describe('Node.js resource: Timer', () => {
258175
describe('after SRVPoller is created', () => {
259-
it('timers are cleaned up by client.close()', async () => {
260-
await runScriptAndGetProcessInfo(
261-
'srv-poller',
262-
config,
263-
async function run({ MongoClient, uri }) {
264-
const client = new MongoClient(uri);
265-
await client.connect();
266-
await client.close();
267-
}
268-
);
269-
});
176+
it('timers are cleaned up by client.close()', async () => {});
270177
});
271178
});
272179
});
@@ -398,54 +305,7 @@ describe('MongoClient.close() Integration', () => {
398305
});
399306

400307
describe('Node.js resource: Socket', () => {
401-
it('no sockets remain after client.close()', metadata, async () => {
402-
await runScriptAndGetProcessInfo(
403-
'tls-file-read',
404-
config,
405-
async function run({ MongoClient, uri, log, chai, ClientEncryption, BSON }) {
406-
const kmsProviders = BSON.EJSON.parse(process.env.CSFLE_KMS_PROVIDERS);
407-
const masterKey = {
408-
region: 'us-east-1',
409-
key: 'arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0'
410-
};
411-
const provider = 'aws';
412-
413-
const keyVaultClient = new MongoClient(uri);
414-
await keyVaultClient.connect();
415-
416-
await keyVaultClient.db('keyvault').collection('datakeys');
417-
const clientEncryption = new ClientEncryption(keyVaultClient, {
418-
keyVaultNamespace: 'keyvault.datakeys',
419-
kmsProviders
420-
});
421-
422-
const socketIdCache = process.report
423-
.getReport()
424-
.libuv.filter(r => r.type === 'tcp')
425-
.map(r => r.address);
426-
log({ socketIdCache });
427-
428-
// runs KMS request
429-
const dataKey = await clientEncryption
430-
.createDataKey(provider, { masterKey })
431-
.catch(e => e);
432-
433-
const newSocketsBeforeClose = process.report
434-
.getReport()
435-
.libuv.filter(r => !socketIdCache.includes(r.address) && r.type === 'tcp');
436-
log({ newSocketsBeforeClose });
437-
chai.expect(newSocketsBeforeClose).to.have.length.gte(1);
438-
439-
await keyVaultClient.close();
440-
441-
const newSocketsAfterClose = process.report
442-
.getReport()
443-
.libuv.filter(r => !socketIdCache.includes(r.address) && r.type === 'tcp');
444-
log({ newSocketsAfterClose });
445-
chai.expect(newSocketsAfterClose).to.be.empty;
446-
}
447-
);
448-
});
308+
it('no sockets remain after client.close()', metadata, async () => {});
449309
});
450310
});
451311
});
@@ -499,54 +359,7 @@ describe('MongoClient.close() Integration', () => {
499359
});
500360

501361
describe('Node.js resource: Socket', () => {
502-
it('no sockets remain after client.close()', async () => {
503-
await runScriptAndGetProcessInfo(
504-
'tls-file-read',
505-
config,
506-
async function run({ MongoClient, uri, log, chai, ClientEncryption, BSON }) {
507-
const kmsProviders = BSON.EJSON.parse(process.env.CSFLE_KMS_PROVIDERS);
508-
const masterKey = {
509-
region: 'us-east-1',
510-
key: 'arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0'
511-
};
512-
const provider = 'aws';
513-
514-
const keyVaultClient = new MongoClient(uri);
515-
await keyVaultClient.connect();
516-
517-
await keyVaultClient.db('keyvault').collection('datakeys');
518-
const clientEncryption = new ClientEncryption(keyVaultClient, {
519-
keyVaultNamespace: 'keyvault.datakeys',
520-
kmsProviders
521-
});
522-
523-
const socketIdCache = process.report
524-
.getReport()
525-
.libuv.filter(r => r.type === 'tcp')
526-
.map(r => r.address);
527-
log({ socketIdCache });
528-
529-
// runs KMS request
530-
const dataKey = await clientEncryption
531-
.createDataKey(provider, { masterKey })
532-
.catch(e => e);
533-
534-
const newSocketsBeforeClose = process.report
535-
.getReport()
536-
.libuv.filter(r => !socketIdCache.includes(r.address) && r.type === 'tcp');
537-
log({ newSocketsBeforeClose });
538-
chai.expect(newSocketsBeforeClose).to.have.length.gte(1);
539-
540-
await keyVaultClient.close();
541-
542-
const newSocketsAfterClose = process.report
543-
.getReport()
544-
.libuv.filter(r => !socketIdCache.includes(r.address) && r.type === 'tcp');
545-
log({ newSocketsAfterClose });
546-
chai.expect(newSocketsAfterClose).to.be.empty;
547-
}
548-
);
549-
});
362+
it('no sockets remain after client.close()', async () => {});
550363
});
551364
});
552365
});

test/integration/node-specific/resource_tracking_script_builder.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,8 @@ export async function runScriptAndGetProcessInfo(
188188
const messages = JSON.parse(formattedLogRead);
189189

190190
// delete temporary files
191-
// await unlink(scriptName);
192-
// await unlink(logFile);
191+
await unlink(scriptName);
192+
await unlink(logFile);
193193

194194
// assertions about exit status
195195
expect(exitCode, 'process should have exited with zero').to.equal(0);

test/tools/fixtures/process_resource_script.in.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,12 @@ const serverType = ['tcp', 'udp'];
2525
function getNewLibuvResourceArray() {
2626
let currReport = process.report.getReport().libuv;
2727
const originalReportAddresses = originalReport.map(resource => resource.address);
28-
currReport = currReport.filter(resource =>
29-
!originalReportAddresses.includes(resource.address) &&
30-
resource.is_referenced && // if a resource is unreferenced, it's not keeping the event loop open
31-
(!serverType.includes(resource.type) || resource.is_active)
32-
);
28+
currReport = currReport.filter(
29+
resource =>
30+
!originalReportAddresses.includes(resource.address) &&
31+
resource.is_referenced && // if a resource is unreferenced, it's not keeping the event loop open
32+
(!serverType.includes(resource.type) || resource.is_active)
33+
);
3334
return currReport;
3435
}
3536

0 commit comments

Comments
 (0)