1- import { type Document } from 'bson' ;
21import { expect } from 'chai' ;
32
43import { MongoCredentials } from '../../../src/cmap/auth/mongo_credentials' ;
54import { connect , prepareHandshakeDocument } from '../../../src/cmap/connect' ;
65import { type Connection , type ConnectionOptions } from '../../../src/cmap/connection' ;
7- import { type ClientMetadata } from '../../../src/cmap/handshake/client_metadata' ;
6+ import {
7+ type ClientMetadata ,
8+ makeClientMetadata
9+ } from '../../../src/cmap/handshake/client_metadata' ;
810import { LEGACY_HELLO_COMMAND } from '../../../src/constants' ;
911import { MongoNetworkError } from '../../../src/error' ;
1012import { MongoClientAuthProviders } from '../../../src/mongo_client_auth_providers' ;
@@ -22,6 +24,18 @@ const CONNECT_DEFAULTS = {
2224 loadBalanced : false
2325} ;
2426
27+ function configureMockEnvHooks ( env : NodeJS . ProcessEnv ) {
28+ const cachedEnv = process . env ;
29+
30+ beforeEach ( function ( ) {
31+ process . env = env ;
32+ } ) ;
33+
34+ afterEach ( function ( ) {
35+ process . env = cachedEnv ;
36+ } ) ;
37+ }
38+
2539describe ( 'Connect Tests' , function ( ) {
2640 context ( 'when PLAIN auth enabled' , ( ) => {
2741 const test : {
@@ -183,28 +197,24 @@ describe('Connect Tests', function () {
183197
184198 describe ( 'prepareHandshakeDocument' , ( ) => {
185199 describe ( 'client environment (containers and FAAS)' , ( ) => {
186- const cachedEnv = process . env ;
187-
188200 context ( 'when only kubernetes is present' , ( ) => {
189201 let authContext ;
190202
203+ configureMockEnvHooks ( {
204+ KUBERNETES_SERVICE_HOST : 'I exist'
205+ } ) ;
206+
191207 beforeEach ( ( ) => {
192- process . env . KUBERNETES_SERVICE_HOST = 'I exist' ;
193208 authContext = {
194209 connection : { } ,
195210 options : {
196211 ...CONNECT_DEFAULTS ,
197- extendedMetadata : addContainerMetadata ( { } as ClientMetadata )
212+ metadata : makeClientMetadata ( [ ] , { } )
198213 }
199214 } ;
200215 } ) ;
201216
202217 afterEach ( ( ) => {
203- if ( cachedEnv . KUBERNETES_SERVICE_HOST != null ) {
204- process . env . KUBERNETES_SERVICE_HOST = cachedEnv . KUBERNETES_SERVICE_HOST ;
205- } else {
206- delete process . env . KUBERNETES_SERVICE_HOST ;
207- }
208218 authContext = { } ;
209219 } ) ;
210220
@@ -220,13 +230,21 @@ describe('Connect Tests', function () {
220230
221231 context ( 'when 512 byte size limit is exceeded' , ( ) => {
222232 it ( `should not 'env' property in client` , async ( ) => {
223- // make metadata = 507 bytes, so it takes up entire LimitedSizeDocument
233+ // make a metadata object that, with just the name and appName, is already at capacity.
224234 const longAppName = 's' . repeat ( 493 ) ;
235+ const metadata = makeClientMetadata (
236+ [
237+ {
238+ name : 's' . repeat ( 128 )
239+ }
240+ ] ,
241+ { appName : longAppName }
242+ ) ;
225243 const longAuthContext = {
226244 connection : { } ,
227245 options : {
228246 ...CONNECT_DEFAULTS ,
229- extendedMetadata : addContainerMetadata ( { appName : longAppName } )
247+ metadata
230248 }
231249 } ;
232250 const handshakeDocument = await prepareHandshakeDocument ( longAuthContext ) ;
@@ -238,23 +256,22 @@ describe('Connect Tests', function () {
238256 context ( 'when kubernetes and FAAS are both present' , ( ) => {
239257 let authContext ;
240258
259+ configureMockEnvHooks ( {
260+ KUBERNETES_SERVICE_HOST : 'I exist' ,
261+ AWS_EXECUTION_ENV : 'AWS_Lambda_function'
262+ } ) ;
263+
241264 beforeEach ( ( ) => {
242- process . env . KUBERNETES_SERVICE_HOST = 'I exist' ;
243265 authContext = {
244266 connection : { } ,
245267 options : {
246268 ...CONNECT_DEFAULTS ,
247- extendedMetadata : addContainerMetadata ( { env : { name : 'aws.lambda' } } )
269+ metadata : makeClientMetadata ( [ ] , { } )
248270 }
249271 } ;
250272 } ) ;
251273
252274 afterEach ( ( ) => {
253- if ( cachedEnv . KUBERNETES_SERVICE_HOST != null ) {
254- process . env . KUBERNETES_SERVICE_HOST = cachedEnv . KUBERNETES_SERVICE_HOST ;
255- } else {
256- delete process . env . KUBERNETES_SERVICE_HOST ;
257- }
258275 authContext = { } ;
259276 } ) ;
260277
@@ -270,16 +287,21 @@ describe('Connect Tests', function () {
270287
271288 context ( 'when 512 byte size limit is exceeded' , ( ) => {
272289 it ( `should not have 'container' property in client.env` , async ( ) => {
273- // make metadata = 507 bytes, so it takes up entire LimitedSizeDocument
274290 const longAppName = 's' . repeat ( 447 ) ;
291+ // make a metadata object that, with just the name and appName, is already at capacity.
292+ const metadata = makeClientMetadata (
293+ [
294+ {
295+ name : 's' . repeat ( 128 )
296+ }
297+ ] ,
298+ { appName : longAppName }
299+ ) ;
275300 const longAuthContext = {
276301 connection : { } ,
277302 options : {
278303 ...CONNECT_DEFAULTS ,
279- extendedMetadata : {
280- appName : longAppName ,
281- env : { name : 'aws.lambda' }
282- } as unknown as Promise < Document >
304+ metadata
283305 }
284306 } ;
285307 const handshakeDocument = await prepareHandshakeDocument ( longAuthContext ) ;
@@ -296,19 +318,7 @@ describe('Connect Tests', function () {
296318 } ;
297319
298320 context ( 'when process.env.KUBERNETES_SERVICE_HOST = undefined' , ( ) => {
299- beforeEach ( ( ) => {
300- delete process . env . KUBERNETES_SERVICE_HOST ;
301- } ) ;
302-
303- afterEach ( ( ) => {
304- afterEach ( ( ) => {
305- if ( cachedEnv . KUBERNETES_SERVICE_HOST != null ) {
306- process . env . KUBERNETES_SERVICE_HOST = cachedEnv . KUBERNETES_SERVICE_HOST ;
307- } else {
308- delete process . env . KUBERNETES_SERVICE_HOST ;
309- }
310- } ) ;
311- } ) ;
321+ configureMockEnvHooks ( { KUBERNETES_SERVICE_HOST : undefined } ) ;
312322
313323 it ( `should not have 'env' property in client` , async ( ) => {
314324 const handshakeDocument = await prepareHandshakeDocument ( authContext ) ;
@@ -317,16 +327,8 @@ describe('Connect Tests', function () {
317327 } ) ;
318328
319329 context ( 'when process.env.KUBERNETES_SERVICE_HOST is an empty string' , ( ) => {
320- beforeEach ( ( ) => {
321- process . env . KUBERNETES_SERVICE_HOST = '' ;
322- } ) ;
323-
324- afterEach ( ( ) => {
325- if ( cachedEnv . KUBERNETES_SERVICE_HOST != null ) {
326- process . env . KUBERNETES_SERVICE_HOST = cachedEnv . KUBERNETES_SERVICE_HOST ;
327- } else {
328- delete process . env . KUBERNETES_SERVICE_HOST ;
329- }
330+ configureMockEnvHooks ( {
331+ KUBERNETES_SERVICE_HOST : ''
330332 } ) ;
331333
332334 it ( `should not have 'env' property in client` , async ( ) => {
0 commit comments