[UA] Handle privilege error during node precheck (#33176) (#33201)

* [UA] Handle privilege error during node precheck

* Fix tests
This commit is contained in:
Josh Dover 2019-03-15 13:28:19 -05:00 committed by GitHub
parent 8b11d0235d
commit c7d06cc30b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 65 additions and 2 deletions

View file

@ -6,7 +6,11 @@
import { SemVer } from 'semver';
import { CURRENT_VERSION } from '../../common/version';
import { getAllNodeVersions, verifyAllMatchKibanaVersion } from './es_version_precheck';
import {
EsVersionPrecheck,
getAllNodeVersions,
verifyAllMatchKibanaVersion,
} from './es_version_precheck';
describe('getAllNodeVersions', () => {
it('returns a list of unique node versions', async () => {
@ -52,3 +56,51 @@ describe('verifyAllMatchKibanaVersion', () => {
expect(() => verifyAllMatchKibanaVersion(versions)).not.toThrow();
});
});
describe('EsVersionPrecheck', () => {
it('throws a 403 when callCluster fails with a 403', async () => {
const fakeCallWithRequest = jest.fn().mockRejectedValue({ status: 403 });
const fakeGetCluster = jest.fn(() => ({ callWithRequest: fakeCallWithRequest }));
const fakeRequest = {
server: { plugins: { elasticsearch: { getCluster: fakeGetCluster } } },
} as any;
await expect(EsVersionPrecheck.method(fakeRequest, {} as any)).rejects.toHaveProperty(
'output.statusCode',
403
);
});
it('throws a 426 message when nodes are not on same version', async () => {
const fakeCallWithRequest = jest.fn().mockResolvedValue({
nodes: {
node1: { version: CURRENT_VERSION.raw },
node2: { version: CURRENT_VERSION.inc('major').raw },
},
});
const fakeGetCluster = jest.fn(() => ({ callWithRequest: fakeCallWithRequest }));
const fakeRequest = {
server: { plugins: { elasticsearch: { getCluster: fakeGetCluster } } },
} as any;
await expect(EsVersionPrecheck.method(fakeRequest, {} as any)).rejects.toHaveProperty(
'output.statusCode',
426
);
});
it('returns true when nodes are on same version', async () => {
const fakeCallWithRequest = jest.fn().mockResolvedValue({
nodes: {
node1: { version: CURRENT_VERSION.raw },
node2: { version: CURRENT_VERSION.raw },
},
});
const fakeGetCluster = jest.fn(() => ({ callWithRequest: fakeCallWithRequest }));
const fakeRequest = {
server: { plugins: { elasticsearch: { getCluster: fakeGetCluster } } },
} as any;
await expect(EsVersionPrecheck.method(fakeRequest, {} as any)).resolves.toBe(true);
});
});

View file

@ -49,7 +49,18 @@ export const EsVersionPrecheck = {
const { callWithRequest } = request.server.plugins.elasticsearch.getCluster('admin');
const callCluster = callWithRequest.bind(callWithRequest, request) as CallCluster;
const allNodeVersions = await getAllNodeVersions(callCluster);
let allNodeVersions: SemVer[];
try {
allNodeVersions = await getAllNodeVersions(callCluster);
} catch (e) {
if (e.status === 403) {
throw Boom.forbidden(e.message);
}
throw e;
}
// This will throw if there is an issue
verifyAllMatchKibanaVersion(allNodeVersions);