Skip to content

Commit

Permalink
Make ingest node pipelines api tests more robust (elastic#73289) (ela…
Browse files Browse the repository at this point in the history
  • Loading branch information
alisonelizabeth authored Jul 28, 2020
1 parent 9c4b3e0 commit 43425f9
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,26 @@ const API_BASE_PATH = '/api/ingest_pipelines';
export default function ({ getService }: FtrProviderContext) {
const supertest = getService('supertest');

const { createPipeline, deletePipeline } = registerEsHelpers(getService);
const { createPipeline, deletePipeline, cleanupPipelines } = registerEsHelpers(getService);

describe('Pipelines', function () {
after(async () => {
await cleanupPipelines();
});

describe.skip('Pipelines', function () {
describe('Create', () => {
const PIPELINE_ID = 'test_create_pipeline';
const REQUIRED_FIELDS_PIPELINE_ID = 'test_create_required_fields_pipeline';

after(() => {
deletePipeline(PIPELINE_ID);
deletePipeline(REQUIRED_FIELDS_PIPELINE_ID);
after(async () => {
// Clean up any pipelines created in test cases
await Promise.all([PIPELINE_ID, REQUIRED_FIELDS_PIPELINE_ID].map(deletePipeline)).catch(
(err) => {
// eslint-disable-next-line no-console
console.log(`[Cleanup error] Error deleting pipelines: ${err.message}`);
throw err;
}
);
});

it('should create a pipeline', async () => {
Expand Down Expand Up @@ -127,8 +137,16 @@ export default function ({ getService }: FtrProviderContext) {
],
};

before(() => createPipeline({ body: PIPELINE, id: PIPELINE_ID }));
after(() => deletePipeline(PIPELINE_ID));
before(async () => {
// Create pipeline that can be used to test PUT request
try {
await createPipeline({ body: PIPELINE, id: PIPELINE_ID }, true);
} catch (err) {
// eslint-disable-next-line no-console
console.log('[Setup error] Error creating ingest node pipeline');
throw err;
}
});

it('should allow an existing pipeline to be updated', async () => {
const uri = `${API_BASE_PATH}/${PIPELINE_ID}`;
Expand Down Expand Up @@ -185,7 +203,7 @@ export default function ({ getService }: FtrProviderContext) {
});

describe('Get', () => {
const PIPELINE_ID = 'test_pipeline';
const PIPELINE_ID = 'test_get_pipeline';
const PIPELINE = {
description: 'test pipeline description',
processors: [
Expand All @@ -198,8 +216,16 @@ export default function ({ getService }: FtrProviderContext) {
version: 1,
};

before(() => createPipeline({ body: PIPELINE, id: PIPELINE_ID }));
after(() => deletePipeline(PIPELINE_ID));
before(async () => {
// Create pipeline that can be used to test GET request
try {
await createPipeline({ body: PIPELINE, id: PIPELINE_ID }, true);
} catch (err) {
// eslint-disable-next-line no-console
console.log('[Setup error] Error creating ingest node pipeline');
throw err;
}
});

describe('all pipelines', () => {
it('should return an array of pipelines', async () => {
Expand Down Expand Up @@ -245,29 +271,40 @@ export default function ({ getService }: FtrProviderContext) {
version: 1,
};

const pipelineA = { body: PIPELINE, id: 'test_delete_pipeline_a' };
const pipelineB = { body: PIPELINE, id: 'test_delete_pipeline_b' };
const pipelineC = { body: PIPELINE, id: 'test_delete_pipeline_c' };
const pipelineD = { body: PIPELINE, id: 'test_delete_pipeline_d' };

before(async () => {
// Create several pipelines that can be used to test deletion
await Promise.all(
[pipelineA, pipelineB, pipelineC, pipelineD].map((pipeline) => createPipeline(pipeline))
).catch((err) => {
// eslint-disable-next-line no-console
console.log(`[Setup error] Error creating pipelines: ${err.message}`);
throw err;
});
});

it('should delete a pipeline', async () => {
// Create pipeline to be deleted
const PIPELINE_ID = 'test_delete_pipeline';
createPipeline({ body: PIPELINE, id: PIPELINE_ID });
const { id } = pipelineA;

const uri = `${API_BASE_PATH}/${PIPELINE_ID}`;
const uri = `${API_BASE_PATH}/${id}`;

const { body } = await supertest.delete(uri).set('kbn-xsrf', 'xxx').expect(200);

expect(body).to.eql({
itemsDeleted: [PIPELINE_ID],
itemsDeleted: [id],
errors: [],
});
});

it('should delete multiple pipelines', async () => {
// Create pipelines to be deleted
const PIPELINE_ONE_ID = 'test_delete_pipeline_1';
const PIPELINE_TWO_ID = 'test_delete_pipeline_2';
createPipeline({ body: PIPELINE, id: PIPELINE_ONE_ID });
createPipeline({ body: PIPELINE, id: PIPELINE_TWO_ID });
const { id: pipelineBId } = pipelineB;
const { id: pipelineCId } = pipelineC;

const uri = `${API_BASE_PATH}/${PIPELINE_ONE_ID},${PIPELINE_TWO_ID}`;
const uri = `${API_BASE_PATH}/${pipelineBId},${pipelineCId}`;

const {
body: { itemsDeleted, errors },
Expand All @@ -276,24 +313,21 @@ export default function ({ getService }: FtrProviderContext) {
expect(errors).to.eql([]);

// The itemsDeleted array order isn't guaranteed, so we assert against each pipeline name instead
[PIPELINE_ONE_ID, PIPELINE_TWO_ID].forEach((pipelineName) => {
[pipelineBId, pipelineCId].forEach((pipelineName) => {
expect(itemsDeleted.includes(pipelineName)).to.be(true);
});
});

it('should return an error for any pipelines not sucessfully deleted', async () => {
const PIPELINE_DOES_NOT_EXIST = 'pipeline_does_not_exist';
const { id: existingPipelineId } = pipelineD;

// Create pipeline to be deleted
const PIPELINE_ONE_ID = 'test_delete_pipeline_1';
createPipeline({ body: PIPELINE, id: PIPELINE_ONE_ID });

const uri = `${API_BASE_PATH}/${PIPELINE_ONE_ID},${PIPELINE_DOES_NOT_EXIST}`;
const uri = `${API_BASE_PATH}/${existingPipelineId},${PIPELINE_DOES_NOT_EXIST}`;

const { body } = await supertest.delete(uri).set('kbn-xsrf', 'xxx').expect(200);

expect(body).to.eql({
itemsDeleted: [PIPELINE_ONE_ID],
itemsDeleted: [existingPipelineId],
errors: [
{
name: PIPELINE_DOES_NOT_EXIST,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,33 @@ interface Pipeline {
* @param {ElasticsearchClient} es The Elasticsearch client instance
*/
export const registerEsHelpers = (getService: FtrProviderContext['getService']) => {
let pipelinesCreated: string[] = [];

const es = getService('legacyEs');

const createPipeline = (pipeline: Pipeline) => es.ingest.putPipeline(pipeline);
const createPipeline = (pipeline: Pipeline, cachePipeline?: boolean) => {
if (cachePipeline) {
pipelinesCreated.push(pipeline.id);
}

return es.ingest.putPipeline(pipeline);
};

const deletePipeline = (pipelineId: string) => es.ingest.deletePipeline({ id: pipelineId });

const cleanupPipelines = () =>
Promise.all(pipelinesCreated.map(deletePipeline))
.then(() => {
pipelinesCreated = [];
})
.catch((err) => {
// eslint-disable-next-line no-console
console.log(`[Cleanup error] Error deleting ES resources: ${err.message}`);
});

return {
createPipeline,
deletePipeline,
cleanupPipelines,
};
};

0 comments on commit 43425f9

Please sign in to comment.