From 47306a3147b7a2911a6775e3ef226d7e44265fb2 Mon Sep 17 00:00:00 2001 From: Warren James Date: Thu, 10 Jun 2021 17:58:28 -0400 Subject: [PATCH 1/8] started debugging --- lib/core/topologies/read_preference.js | 2 ++ test/functional/readpreference.test.js | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/lib/core/topologies/read_preference.js b/lib/core/topologies/read_preference.js index afd2362f762..e315c00d505 100644 --- a/lib/core/topologies/read_preference.js +++ b/lib/core/topologies/read_preference.js @@ -102,6 +102,7 @@ const VALID_MODES = [ * @return {ReadPreference} */ ReadPreference.fromOptions = function(options) { + debugger; if (!options) return null; const readPreference = options.readPreference; if (!readPreference) return null; @@ -133,6 +134,7 @@ ReadPreference.fromOptions = function(options) { * @returns {(ReadPreference|null)} The resolved read preference */ ReadPreference.resolve = function(parent, options) { + debugger; options = options || {}; const session = options.session; diff --git a/test/functional/readpreference.test.js b/test/functional/readpreference.test.js index c51e4c8efc9..14d8d2ab882 100644 --- a/test/functional/readpreference.test.js +++ b/test/functional/readpreference.test.js @@ -759,4 +759,25 @@ describe('ReadPreference', function() { }); }) }); + + it('should use session readPreference', function(done) { + const configuration = this.configuration; + const client = this.configuration.newClient(configuration.writeConcernMax(), { + useUnifiedTopology: true, + readPreference: 'primaryPreferred' + }); + + client.connect((err, client) => { + expect(err).to.not.exist; + this.defer(() => client.close()); + const session = client.startSession({ + readPreference: 'secondary', + causalConsistency: true + }); + + const result = ReadPreference.resolve(client, { session: session }); + expect(result.mode).to.equal('secondary'); + done(); + }); + }); }); From da34c8f73dc1a5ec006bb9e7ab4d221fefac01c2 Mon Sep 17 00:00:00 2001 From: Warren James Date: Mon, 14 Jun 2021 17:53:38 -0400 Subject: [PATCH 2/8] test: test for correct setting of readPreference for sessions --- test/functional/readpreference.test.js | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/test/functional/readpreference.test.js b/test/functional/readpreference.test.js index 14d8d2ab882..e90fd20e25b 100644 --- a/test/functional/readpreference.test.js +++ b/test/functional/readpreference.test.js @@ -760,7 +760,7 @@ describe('ReadPreference', function() { }) }); - it('should use session readPreference', function(done) { + it('should use session readPreference instead of client readPreference', function(done) { const configuration = this.configuration; const client = this.configuration.newClient(configuration.writeConcernMax(), { useUnifiedTopology: true, @@ -768,16 +768,27 @@ describe('ReadPreference', function() { }); client.connect((err, client) => { - expect(err).to.not.exist; - this.defer(() => client.close()); + this.defer(() => { + client.close(); + }); + expect(err).to.be.null; + expect(client).to.not.be.null; + const db = client.db(configuration.db); + const collection = db.collection('read_pref_1', { + readPreference: ReadPreference.SECONDARY_PREFERRED + }); const session = client.startSession({ - readPreference: 'secondary', + defaultTransactionOptions: { readPreference: 'secondary' }, causalConsistency: true }); + session.startTransaction(); const result = ReadPreference.resolve(client, { session: session }); - expect(result.mode).to.equal('secondary'); - done(); + expect(result).to.not.be.undefined; + expect(result.mode).to.deep.equal('secondary'); + session.abortTransaction(); + + session.endSession(undefined, done); }); }); }); From 1a551e3db6633dc8800bf73dcdf4d4c5feadf7e7 Mon Sep 17 00:00:00 2001 From: Warren James Date: Tue, 15 Jun 2021 14:12:01 -0400 Subject: [PATCH 3/8] test: removed unused variables --- test/functional/readpreference.test.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/test/functional/readpreference.test.js b/test/functional/readpreference.test.js index e90fd20e25b..1cfc1273a11 100644 --- a/test/functional/readpreference.test.js +++ b/test/functional/readpreference.test.js @@ -773,10 +773,6 @@ describe('ReadPreference', function() { }); expect(err).to.be.null; expect(client).to.not.be.null; - const db = client.db(configuration.db); - const collection = db.collection('read_pref_1', { - readPreference: ReadPreference.SECONDARY_PREFERRED - }); const session = client.startSession({ defaultTransactionOptions: { readPreference: 'secondary' }, causalConsistency: true From 68ce614704c39c9e2ec8b67d00bc29757fe3ccf9 Mon Sep 17 00:00:00 2001 From: Warren James Date: Tue, 15 Jun 2021 14:18:45 -0400 Subject: [PATCH 4/8] fix: removed debugger statements --- lib/core/topologies/read_preference.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/core/topologies/read_preference.js b/lib/core/topologies/read_preference.js index e315c00d505..afd2362f762 100644 --- a/lib/core/topologies/read_preference.js +++ b/lib/core/topologies/read_preference.js @@ -102,7 +102,6 @@ const VALID_MODES = [ * @return {ReadPreference} */ ReadPreference.fromOptions = function(options) { - debugger; if (!options) return null; const readPreference = options.readPreference; if (!readPreference) return null; @@ -134,7 +133,6 @@ ReadPreference.fromOptions = function(options) { * @returns {(ReadPreference|null)} The resolved read preference */ ReadPreference.resolve = function(parent, options) { - debugger; options = options || {}; const session = options.session; From 065c5965cc037a4fce9fd5fcfc6adced4b2c7619 Mon Sep 17 00:00:00 2001 From: Warren James Date: Tue, 15 Jun 2021 17:18:06 -0400 Subject: [PATCH 5/8] fix: Added metadata to test to skip running transaction against sharded clusters --- test/functional/readpreference.test.js | 49 ++++++++++++++------------ 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/test/functional/readpreference.test.js b/test/functional/readpreference.test.js index 1cfc1273a11..2d730722a1b 100644 --- a/test/functional/readpreference.test.js +++ b/test/functional/readpreference.test.js @@ -760,31 +760,34 @@ describe('ReadPreference', function() { }) }); - it('should use session readPreference instead of client readPreference', function(done) { - const configuration = this.configuration; - const client = this.configuration.newClient(configuration.writeConcernMax(), { - useUnifiedTopology: true, - readPreference: 'primaryPreferred' - }); - - client.connect((err, client) => { - this.defer(() => { - client.close(); - }); - expect(err).to.be.null; - expect(client).to.not.be.null; - const session = client.startSession({ - defaultTransactionOptions: { readPreference: 'secondary' }, - causalConsistency: true + it('should use session readPreference instead of client readPreference', { + metadata: { requires: { topology: ['single', 'replicaset'] } }, + test: function(done) { + const configuration = this.configuration; + const client = this.configuration.newClient(configuration.writeConcernMax(), { + useUnifiedTopology: true, + readPreference: 'primaryPreferred' }); - session.startTransaction(); - const result = ReadPreference.resolve(client, { session: session }); - expect(result).to.not.be.undefined; - expect(result.mode).to.deep.equal('secondary'); - session.abortTransaction(); + client.connect((err, client) => { + this.defer(() => { + client.close(); + }); + expect(err).to.be.null; + expect(client).to.not.be.null; + const session = client.startSession({ + defaultTransactionOptions: { readPreference: 'secondary' }, + causalConsistency: true + }); + + session.startTransaction(); + const result = ReadPreference.resolve(client, { session: session }); + expect(result).to.not.be.undefined; + expect(result.mode).to.deep.equal('secondary'); + session.abortTransaction(); - session.endSession(undefined, done); - }); + session.endSession(undefined, done); + }); + } }); }); From 89dda161abb7f33291f7a3eee05a18936baa3c20 Mon Sep 17 00:00:00 2001 From: Warren James Date: Wed, 16 Jun 2021 16:45:19 -0400 Subject: [PATCH 6/8] test: test cleanup --- test/functional/readpreference.test.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/test/functional/readpreference.test.js b/test/functional/readpreference.test.js index 2d730722a1b..1896a3f9269 100644 --- a/test/functional/readpreference.test.js +++ b/test/functional/readpreference.test.js @@ -761,11 +761,10 @@ describe('ReadPreference', function() { }); it('should use session readPreference instead of client readPreference', { - metadata: { requires: { topology: ['single', 'replicaset'] } }, + metadata: { requires: { unifiedTopology: true, topology: ['single', 'replicaset'] } }, test: function(done) { const configuration = this.configuration; const client = this.configuration.newClient(configuration.writeConcernMax(), { - useUnifiedTopology: true, readPreference: 'primaryPreferred' }); @@ -773,8 +772,8 @@ describe('ReadPreference', function() { this.defer(() => { client.close(); }); - expect(err).to.be.null; - expect(client).to.not.be.null; + expect(err).to.not.exist; + expect(client).to.exist; const session = client.startSession({ defaultTransactionOptions: { readPreference: 'secondary' }, causalConsistency: true @@ -782,7 +781,7 @@ describe('ReadPreference', function() { session.startTransaction(); const result = ReadPreference.resolve(client, { session: session }); - expect(result).to.not.be.undefined; + expect(result).to.exist; expect(result.mode).to.deep.equal('secondary'); session.abortTransaction(); From ba279f20922bf845864b4acd04becb8e6a4b6906 Mon Sep 17 00:00:00 2001 From: Warren James Date: Thu, 17 Jun 2021 17:11:03 -0400 Subject: [PATCH 7/8] fix: ensure that tests clean up after themselves even after failure --- test/functional/readpreference.test.js | 45 ++++++++++++++++---------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/test/functional/readpreference.test.js b/test/functional/readpreference.test.js index 1896a3f9269..e6006450580 100644 --- a/test/functional/readpreference.test.js +++ b/test/functional/readpreference.test.js @@ -760,33 +760,44 @@ describe('ReadPreference', function() { }) }); - it('should use session readPreference instead of client readPreference', { - metadata: { requires: { unifiedTopology: true, topology: ['single', 'replicaset'] } }, - test: function(done) { - const configuration = this.configuration; - const client = this.configuration.newClient(configuration.writeConcernMax(), { + describe('Session readPreference', function() { + let client; + let session; + + beforeEach(function(done) { + let configuration = this.configuration; + client = configuration.newClient(configuration.writeConcernMax(), { readPreference: 'primaryPreferred' }); + client.connect(err => { + done(err); + }); + }); - client.connect((err, client) => { - this.defer(() => { - client.close(); + afterEach(function(done) { + if (session) { + session.abortTransaction(() => { + session.endSession(() => { + client.close(() => done()); + }); }); - expect(err).to.not.exist; - expect(client).to.exist; - const session = client.startSession({ + } else { + client.close(() => done()); + } + }); + + it('should use session readPreference instead of client readPreference', { + metadata: { requires: { unifiedTopology: true, topology: ['single', 'replicaset'] } }, + test: function() { + session = client.startSession({ defaultTransactionOptions: { readPreference: 'secondary' }, causalConsistency: true }); - session.startTransaction(); const result = ReadPreference.resolve(client, { session: session }); expect(result).to.exist; expect(result.mode).to.deep.equal('secondary'); - session.abortTransaction(); - - session.endSession(undefined, done); - }); - } + } + }); }); }); From e179369659de73e0616bff13d348b6d4b4eea660 Mon Sep 17 00:00:00 2001 From: Warren James Date: Thu, 17 Jun 2021 18:03:21 -0400 Subject: [PATCH 8/8] test: Collapse related assertions into single assertion --- test/functional/readpreference.test.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/functional/readpreference.test.js b/test/functional/readpreference.test.js index e6006450580..2d5921e697f 100644 --- a/test/functional/readpreference.test.js +++ b/test/functional/readpreference.test.js @@ -795,8 +795,7 @@ describe('ReadPreference', function() { }); session.startTransaction(); const result = ReadPreference.resolve(client, { session: session }); - expect(result).to.exist; - expect(result.mode).to.deep.equal('secondary'); + expect(result).to.have.property('mode', 'secondary'); } }); });