From 818d71e524fa9965d8f4d3a30f7cef6f9e060c2a Mon Sep 17 00:00:00 2001 From: Durran Jordan Date: Sat, 30 Aug 2025 00:55:56 +0200 Subject: [PATCH 1/2] fix(NODE-7073): dont add duplicate metadata --- src/mongo_client.ts | 5 +++++ .../mongodb-handshake/mongodb-handshake.prose.test.ts | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/src/mongo_client.ts b/src/mongo_client.ts index 1ff310822db..880b199a5dd 100644 --- a/src/mongo_client.ts +++ b/src/mongo_client.ts @@ -492,6 +492,11 @@ export class MongoClient extends TypedEventEmitter implements * @param driverInfo - Information about the application or library. */ appendMetadata(driverInfo: DriverInfo) { + for (const info of this.options.additionalDriverInfo) { + if (info.name === driverInfo.name) { + return; + } + } this.options.additionalDriverInfo.push(driverInfo); this.options.metadata = makeClientMetadata(this.options); this.options.extendedMetadata = addContainerMetadata(this.options.metadata) diff --git a/test/integration/mongodb-handshake/mongodb-handshake.prose.test.ts b/test/integration/mongodb-handshake/mongodb-handshake.prose.test.ts index da5b98227be..c4f1cfdf4b4 100644 --- a/test/integration/mongodb-handshake/mongodb-handshake.prose.test.ts +++ b/test/integration/mongodb-handshake/mongodb-handshake.prose.test.ts @@ -355,6 +355,13 @@ describe('Client Metadata Update Prose Tests', function () { // (Note os is the only one getting set in these tests) expect(updatedClientMetadata.os).to.deep.equal(initialClientMetadata.os); }); + + it('does not append duplicate metadata for the same name', async function () { + client.appendMetadata({ name, version, platform }); + client.appendMetadata({ name, version, platform }); + await client.db('test').command({ ping: 1 }); + expect(updatedClientMetadata.driver.name).to.not.contain('|framework|framework'); + }); }); } }); From 5206d9cdf49ce7c28d8d25a517cb7eb3050cf882 Mon Sep 17 00:00:00 2001 From: Durran Jordan Date: Thu, 4 Sep 2025 19:53:04 +0200 Subject: [PATCH 2/2] chore: comments --- src/mongo_client.ts | 2 +- .../mongodb-handshake/mongodb-handshake.prose.test.ts | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/mongo_client.ts b/src/mongo_client.ts index 880b199a5dd..3f883429f13 100644 --- a/src/mongo_client.ts +++ b/src/mongo_client.ts @@ -493,7 +493,7 @@ export class MongoClient extends TypedEventEmitter implements */ appendMetadata(driverInfo: DriverInfo) { for (const info of this.options.additionalDriverInfo) { - if (info.name === driverInfo.name) { + if (info.name === driverInfo.name && info.version === driverInfo.version) { return; } } diff --git a/test/integration/mongodb-handshake/mongodb-handshake.prose.test.ts b/test/integration/mongodb-handshake/mongodb-handshake.prose.test.ts index c4f1cfdf4b4..8cf9115ddcc 100644 --- a/test/integration/mongodb-handshake/mongodb-handshake.prose.test.ts +++ b/test/integration/mongodb-handshake/mongodb-handshake.prose.test.ts @@ -356,12 +356,18 @@ describe('Client Metadata Update Prose Tests', function () { expect(updatedClientMetadata.os).to.deep.equal(initialClientMetadata.os); }); - it('does not append duplicate metadata for the same name', async function () { + it('does not append duplicate metadata for the same name and version', async function () { client.appendMetadata({ name, version, platform }); client.appendMetadata({ name, version, platform }); await client.db('test').command({ ping: 1 }); expect(updatedClientMetadata.driver.name).to.not.contain('|framework|framework'); }); + + it('appends metadata when the version differs', async function () { + client.appendMetadata({ name, version: '0.0', platform }); + await client.db('test').command({ ping: 1 }); + expect(updatedClientMetadata.driver.name).to.not.contain('0.0'); + }); }); } });