From 383534dc940bb3fc162a7ad35421a66345690510 Mon Sep 17 00:00:00 2001 From: aherlihy Date: Fri, 14 Aug 2020 12:16:50 +0200 Subject: [PATCH 1/2] Fix bug with enableFreeMonitoring --- packages/shell-api/src/database.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/shell-api/src/database.ts b/packages/shell-api/src/database.ts index f5bfae2cdf..c51ec2b425 100644 --- a/packages/shell-api/src/database.ts +++ b/packages/shell-api/src/database.ts @@ -807,15 +807,20 @@ export default class Database extends ShellApiClass { throw new MongoshInvalidInputError('db.enableFreeMonitoring() may only be run on a primary'); } + // driver should check that ok: 1 + await this._mongo._serviceProvider.runCommand( + ADMIN_DB, + { + setFreeMonitoring: 1, + action: 'enable' + } + ); let result; let error; try { result = await this._mongo._serviceProvider.runCommand( ADMIN_DB, - { - setFreeMonitoring: 1, - action: 'enable' - } + { getFreeMonitoringStatus: 1 } ); } catch (err) { error = err; From 0650f4ead0e58a1dd309b866b5fea0f66525504a Mon Sep 17 00:00:00 2001 From: aherlihy Date: Fri, 14 Aug 2020 12:49:19 +0200 Subject: [PATCH 2/2] update tests --- packages/shell-api/src/database.spec.ts | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/packages/shell-api/src/database.spec.ts b/packages/shell-api/src/database.spec.ts index b281d86c42..8b30cf08c8 100644 --- a/packages/shell-api/src/database.spec.ts +++ b/packages/shell-api/src/database.spec.ts @@ -1765,7 +1765,7 @@ describe('Database', () => { it('calls serviceProvider.runCommand on the database', async() => { serviceProvider.runCommand.onCall(0).resolves({ ismaster: true }); - serviceProvider.runCommand.onCall(1).resolves({ ok: 1, state: 'enabled' }); + serviceProvider.runCommand.onCall(1).resolves({ ok: 1 }); await database.enableFreeMonitoring(); expect(serviceProvider.runCommand).to.have.been.calledWith( @@ -1778,23 +1778,27 @@ describe('Database', () => { }); it('returns whatever serviceProvider.runCommand returns if enabled', async() => { - const expectedResult = { ok: 1, state: 'enabled' }; + const expectedFMState = { ok: 1, state: 'enabled' }; + serviceProvider.runCommand.onCall(0).resolves({ ismaster: true }); - serviceProvider.runCommand.onCall(1).resolves(expectedResult); + serviceProvider.runCommand.onCall(1).resolves({ ok: 1 }); + serviceProvider.runCommand.onCall(2).resolves(expectedFMState); const result = await database.enableFreeMonitoring(); - expect(result).to.deep.equal(expectedResult); + expect(result).to.deep.equal(expectedFMState); }); it('returns warning if not enabled', async() => { serviceProvider.runCommand.onCall(0).resolves({ ismaster: true }); - serviceProvider.runCommand.onCall(1).resolves({ ok: 1, enabled: false }); - serviceProvider.runCommand.onCall(2).resolves({ cloudFreeMonitoringEndpointURL: 'URL' }); + serviceProvider.runCommand.onCall(1).resolves({ ok: 1 }); + serviceProvider.runCommand.onCall(2).resolves({ ok: 1, enabled: false }); + serviceProvider.runCommand.onCall(3).resolves({ cloudFreeMonitoringEndpointURL: 'URL' }); const result = await database.enableFreeMonitoring(); expect(result).to.include('URL'); }); it('returns warning if returns ok: 0 with auth error', async() => { serviceProvider.runCommand.onCall(0).resolves({ ismaster: true }); - serviceProvider.runCommand.onCall(1).resolves({ ok: 0, codeName: 'Unauthorized' }); + serviceProvider.runCommand.onCall(1).resolves({ ok: 1 }); + serviceProvider.runCommand.onCall(2).resolves({ ok: 0, codeName: 'Unauthorized' }); const result = await database.enableFreeMonitoring(); expect(result).to.be.a('string'); expect(result).to.include('privilege'); @@ -1803,7 +1807,8 @@ describe('Database', () => { const expectedError = new Error(); (expectedError as any).codeName = 'Unauthorized'; serviceProvider.runCommand.onCall(0).resolves({ ismaster: true }); - serviceProvider.runCommand.onCall(1).rejects(expectedError); + serviceProvider.runCommand.onCall(1).resolves({ ok: 1 }); + serviceProvider.runCommand.onCall(2).rejects(expectedError); const result = await database.enableFreeMonitoring(); expect(result).to.be.a('string'); expect(result).to.include('privilege');