From 650455690d0641bb03e5755e0b0db859ac56b4e6 Mon Sep 17 00:00:00 2001 From: Melissa Alvarez Date: Tue, 2 Mar 2021 09:55:42 -0800 Subject: [PATCH] ensure jobs are created/started before stopping attempt --- .../apis/ml/data_frame_analytics/start.ts | 1 + .../ml/data_frame_analytics/start_spaces.ts | 2 ++ .../apis/ml/data_frame_analytics/stop.ts | 1 + .../ml/data_frame_analytics/stop_spaces.ts | 9 +++++++++ x-pack/test/functional/services/ml/api.ts | 18 ++++++++++++++---- 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/x-pack/test/api_integration/apis/ml/data_frame_analytics/start.ts b/x-pack/test/api_integration/apis/ml/data_frame_analytics/start.ts index c4a32150410acb..6960dc37bf0f8f 100644 --- a/x-pack/test/api_integration/apis/ml/data_frame_analytics/start.ts +++ b/x-pack/test/api_integration/apis/ml/data_frame_analytics/start.ts @@ -69,6 +69,7 @@ export default ({ getService }: FtrProviderContext) => { }); after(async () => { + await ml.api.deleteDataFrameAnalyticsJobES(`${jobId}_0`); await ml.api.cleanMlIndices(); await ml.api.deleteIndices(destinationIndex); }); diff --git a/x-pack/test/api_integration/apis/ml/data_frame_analytics/start_spaces.ts b/x-pack/test/api_integration/apis/ml/data_frame_analytics/start_spaces.ts index 5873f5092f00aa..de8cc7ffb1c413 100644 --- a/x-pack/test/api_integration/apis/ml/data_frame_analytics/start_spaces.ts +++ b/x-pack/test/api_integration/apis/ml/data_frame_analytics/start_spaces.ts @@ -66,6 +66,8 @@ export default ({ getService }: FtrProviderContext) => { }); after(async () => { + await ml.api.deleteDataFrameAnalyticsJobES(jobIdSpace1); + await ml.api.deleteDataFrameAnalyticsJobES(jobIdSpace2); await spacesService.delete(idSpace1); await spacesService.delete(idSpace2); await ml.api.cleanMlIndices(); diff --git a/x-pack/test/api_integration/apis/ml/data_frame_analytics/stop.ts b/x-pack/test/api_integration/apis/ml/data_frame_analytics/stop.ts index 219b1e85d00f48..e1f479b0d2fc7f 100644 --- a/x-pack/test/api_integration/apis/ml/data_frame_analytics/stop.ts +++ b/x-pack/test/api_integration/apis/ml/data_frame_analytics/stop.ts @@ -33,6 +33,7 @@ export default ({ getService }: FtrProviderContext) => { }); after(async () => { + await ml.api.deleteDataFrameAnalyticsJobES(analyticsId); await ml.api.cleanMlIndices(); await ml.api.deleteIndices(destinationIndex); }); diff --git a/x-pack/test/api_integration/apis/ml/data_frame_analytics/stop_spaces.ts b/x-pack/test/api_integration/apis/ml/data_frame_analytics/stop_spaces.ts index c816a1f9be50e1..136fef63f09fbb 100644 --- a/x-pack/test/api_integration/apis/ml/data_frame_analytics/stop_spaces.ts +++ b/x-pack/test/api_integration/apis/ml/data_frame_analytics/stop_spaces.ts @@ -10,6 +10,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; import { COMMON_REQUEST_HEADERS } from '../../../../functional/services/ml/common_api'; import { USER } from '../../../../functional/services/ml/security_common'; +import { DATA_FRAME_TASK_STATE } from '../../../../../plugins/ml/common/constants/data_frame_analytics'; export default ({ getService }: FtrProviderContext) => { const esArchiver = getService('esArchiver'); @@ -59,12 +60,18 @@ export default ({ getService }: FtrProviderContext) => { await ml.api.createDataFrameAnalyticsJob(jobConfigSpace4, idSpace4); // start jobs await runRequest(jobIdSpace3, idSpace3, '_start', 200); + await ml.api.waitForAnalyticsState(jobIdSpace3, DATA_FRAME_TASK_STATE.STARTED); + await ml.api.assertIndicesExist(`user-${jobIdSpace3}`); await runRequest(jobIdSpace4, idSpace4, '_start', 200); + await ml.api.waitForAnalyticsState(jobIdSpace4, DATA_FRAME_TASK_STATE.STARTED); + await ml.api.assertIndicesExist(`user-${jobIdSpace4}`); await ml.testResources.setKibanaTimeZoneToUTC(); }); after(async () => { + await ml.api.deleteDataFrameAnalyticsJobES(jobIdSpace3); + await ml.api.deleteDataFrameAnalyticsJobES(jobIdSpace4); await spacesService.delete(idSpace3); await spacesService.delete(idSpace4); await ml.api.deleteIndices(`user-${jobIdSpace3}`); @@ -76,11 +83,13 @@ export default ({ getService }: FtrProviderContext) => { it('should stop job from same space', async () => { const body = await runRequest(jobIdSpace3, idSpace3, '_stop', 200); expect(body).to.have.property('stopped', true); + await ml.api.waitForAnalyticsState(jobIdSpace3, DATA_FRAME_TASK_STATE.STOPPED, 5000); }); it('should fail to stop job from different space', async () => { const body = await runRequest(jobIdSpace4, idSpace3, '_stop', 404); expect(body.error).to.eql('Not Found'); + await ml.api.waitForAnalyticsState(jobIdSpace4, DATA_FRAME_TASK_STATE.STARTED, 5000); }); }); }; diff --git a/x-pack/test/functional/services/ml/api.ts b/x-pack/test/functional/services/ml/api.ts index da15d301285860..c9cfe1fee4ef9a 100644 --- a/x-pack/test/functional/services/ml/api.ts +++ b/x-pack/test/functional/services/ml/api.ts @@ -296,13 +296,11 @@ export function MachineLearningAPIProvider({ getService }: FtrProviderContext) { async waitForAnalyticsState( analyticsId: string, expectedAnalyticsState: DataFrameTaskStateType, - timeoutInMs?: number + timeoutInMs: number = 2 * 60 * 1000 ) { - const defaultTimeout = 2 * 60 * 1000; - await retry.waitForWithTimeout( `analytics state to be ${expectedAnalyticsState}`, - timeoutInMs ? timeoutInMs : defaultTimeout, + timeoutInMs, async () => { const state = await this.getAnalyticsState(analyticsId); if (state === expectedAnalyticsState) { @@ -723,6 +721,18 @@ export function MachineLearningAPIProvider({ getService }: FtrProviderContext) { log.debug('> DFA job created.'); }, + async deleteDataFrameAnalyticsJobES(analyticsId: string) { + log.debug(`Deleting data frame analytics job with id '${analyticsId}' ...`); + + await esSupertest + .delete(`/_ml/data_frame/analytics/${analyticsId}`) + .query({ force: true }) + .expect(200); + + await this.waitForDataFrameAnalyticsJobNotToExist(analyticsId); + log.debug('> DFA job deleted.'); + }, + async getADJobRecordCount(jobId: string): Promise { const jobStats = await this.getADJobStats(jobId);