Skip to content

Commit 5e5276a

Browse files
authored
Fix bug with enableFreeMonitoring (#287)
* Fix bug with enableFreeMonitoring * update tests
1 parent 4431221 commit 5e5276a

File tree

2 files changed

+22
-12
lines changed

2 files changed

+22
-12
lines changed

packages/shell-api/src/database.spec.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1765,7 +1765,7 @@ describe('Database', () => {
17651765

17661766
it('calls serviceProvider.runCommand on the database', async() => {
17671767
serviceProvider.runCommand.onCall(0).resolves({ ismaster: true });
1768-
serviceProvider.runCommand.onCall(1).resolves({ ok: 1, state: 'enabled' });
1768+
serviceProvider.runCommand.onCall(1).resolves({ ok: 1 });
17691769
await database.enableFreeMonitoring();
17701770

17711771
expect(serviceProvider.runCommand).to.have.been.calledWith(
@@ -1778,23 +1778,27 @@ describe('Database', () => {
17781778
});
17791779

17801780
it('returns whatever serviceProvider.runCommand returns if enabled', async() => {
1781-
const expectedResult = { ok: 1, state: 'enabled' };
1781+
const expectedFMState = { ok: 1, state: 'enabled' };
1782+
17821783
serviceProvider.runCommand.onCall(0).resolves({ ismaster: true });
1783-
serviceProvider.runCommand.onCall(1).resolves(expectedResult);
1784+
serviceProvider.runCommand.onCall(1).resolves({ ok: 1 });
1785+
serviceProvider.runCommand.onCall(2).resolves(expectedFMState);
17841786
const result = await database.enableFreeMonitoring();
1785-
expect(result).to.deep.equal(expectedResult);
1787+
expect(result).to.deep.equal(expectedFMState);
17861788
});
17871789
it('returns warning if not enabled', async() => {
17881790
serviceProvider.runCommand.onCall(0).resolves({ ismaster: true });
1789-
serviceProvider.runCommand.onCall(1).resolves({ ok: 1, enabled: false });
1790-
serviceProvider.runCommand.onCall(2).resolves({ cloudFreeMonitoringEndpointURL: 'URL' });
1791+
serviceProvider.runCommand.onCall(1).resolves({ ok: 1 });
1792+
serviceProvider.runCommand.onCall(2).resolves({ ok: 1, enabled: false });
1793+
serviceProvider.runCommand.onCall(3).resolves({ cloudFreeMonitoringEndpointURL: 'URL' });
17911794
const result = await database.enableFreeMonitoring();
17921795
expect(result).to.include('URL');
17931796
});
17941797

17951798
it('returns warning if returns ok: 0 with auth error', async() => {
17961799
serviceProvider.runCommand.onCall(0).resolves({ ismaster: true });
1797-
serviceProvider.runCommand.onCall(1).resolves({ ok: 0, codeName: 'Unauthorized' });
1800+
serviceProvider.runCommand.onCall(1).resolves({ ok: 1 });
1801+
serviceProvider.runCommand.onCall(2).resolves({ ok: 0, codeName: 'Unauthorized' });
17981802
const result = await database.enableFreeMonitoring();
17991803
expect(result).to.be.a('string');
18001804
expect(result).to.include('privilege');
@@ -1803,7 +1807,8 @@ describe('Database', () => {
18031807
const expectedError = new Error();
18041808
(expectedError as any).codeName = 'Unauthorized';
18051809
serviceProvider.runCommand.onCall(0).resolves({ ismaster: true });
1806-
serviceProvider.runCommand.onCall(1).rejects(expectedError);
1810+
serviceProvider.runCommand.onCall(1).resolves({ ok: 1 });
1811+
serviceProvider.runCommand.onCall(2).rejects(expectedError);
18071812
const result = await database.enableFreeMonitoring();
18081813
expect(result).to.be.a('string');
18091814
expect(result).to.include('privilege');

packages/shell-api/src/database.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -807,15 +807,20 @@ export default class Database extends ShellApiClass {
807807
throw new MongoshInvalidInputError('db.enableFreeMonitoring() may only be run on a primary');
808808
}
809809

810+
// driver should check that ok: 1
811+
await this._mongo._serviceProvider.runCommand(
812+
ADMIN_DB,
813+
{
814+
setFreeMonitoring: 1,
815+
action: 'enable'
816+
}
817+
);
810818
let result;
811819
let error;
812820
try {
813821
result = await this._mongo._serviceProvider.runCommand(
814822
ADMIN_DB,
815-
{
816-
setFreeMonitoring: 1,
817-
action: 'enable'
818-
}
823+
{ getFreeMonitoringStatus: 1 }
819824
);
820825
} catch (err) {
821826
error = err;

0 commit comments

Comments
 (0)