Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ML] Add api integration test for analytics map endpoint #105531

Merged
merged 3 commits into from
Jul 14, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,19 @@ export default ({ getService }: FtrProviderContext) => {
return body;
}

async function runMapRequest(space: string, expectedStatusCode: number, jobId: string) {
const { body } = await supertest
.get(`/s/${space}/api/ml/data_frame/analytics/map/${jobId}`)
.auth(
USER.ML_VIEWER_ALL_SPACES,
ml.securityCommon.getPasswordForUser(USER.ML_VIEWER_ALL_SPACES)
)
.set(COMMON_REQUEST_HEADERS)
.expect(expectedStatusCode);

return body;
}

describe('GET data_frame/analytics with spaces', function () {
before(async () => {
await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/ihp_outlier');
Expand Down Expand Up @@ -140,5 +153,62 @@ export default ({ getService }: FtrProviderContext) => {
it('should fail to list jobs stats by job ids if one of them is in a different space', async () => {
await runRequest(idSpace1, 404, true, `${jobIdSpace1},${jobIdSpace2}`);
});

describe('GetDataFrameAnalyticsIdMap with spaces', () => {
it(`should return a map of objects from ${idSpace1} leading up to analytics job id created in ${idSpace1}`, async () => {
const body = await runMapRequest(idSpace1, 200, jobIdSpace1);

expect(body).to.have.keys('elements', 'details', 'error');
pheyos marked this conversation as resolved.
Show resolved Hide resolved
// Index node, 2 job nodes (with same source index), and 2 edge nodes to connect them
expect(body.elements.length).to.eql(
5,
`Expected 5 map elements, got ${body.elements.length}`
);
expect(body.error).to.be(null);
// No space2 related job ids should be returned
for (const detailsId in body.details) {
if (detailsId.includes('analytics')) {
expect(body.details[detailsId].id.includes(idSpace2)).to.eql(
false,
`No space2 related job ids should be returned, got ${body.details[detailsId].id}`
);
}
}
});

it(`should return a map of objects from ${idSpace2} leading up to analytics job id created in ${idSpace2}`, async () => {
const body = await runMapRequest(idSpace2, 200, jobIdSpace2);

expect(body).to.have.keys('elements', 'details', 'error');
// Index node, 1 job node and 2 edge nodes to connect them
expect(body.elements.length).to.eql(
3,
`Expected 3 map elements, got ${body.elements.length}`
);
expect(body.error).to.be(null);
// No space1 related job ids should be returned
for (const detailsId in body.details) {
if (detailsId.includes('analytics')) {
expect(body.details[detailsId].id.includes(idSpace1)).to.eql(
false,
`No space1 related job ids should be returned, got ${body.details[detailsId].id}`
);
}
}
});

it(`should fail to return a map of objects from one space when requesting with analytics job id created in a different space`, async () => {
const body = await runMapRequest(idSpace2, 200, jobIdSpace1);

expect(body).to.have.keys('elements', 'details', 'error');

expect(body.elements.length).to.eql(
0,
`Expected 0 map elements, got ${body.elements.length}`
);
expect(body.details).to.eql({});
expect(body.error).to.eql(`No known job with id '${jobIdSpace1}'`);
});
});
});
};