From db0b2006bb2888fdecc486889943a24f8fa85ae3 Mon Sep 17 00:00:00 2001 From: nnamdifrankie Date: Tue, 8 Sep 2020 12:50:08 -0400 Subject: [PATCH] EMT-661: Only delete when there are previous installation has a transform, clean up tests --- .../epm/elasticsearch/transform/install.ts | 27 ++-- .../elasticsearch/transform/transform.test.ts | 125 ++++++++++++------ 2 files changed, 96 insertions(+), 56 deletions(-) diff --git a/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/install.ts b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/install.ts index 5461c95a2fb7fc..1e58319183c7d9 100644 --- a/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/install.ts +++ b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/install.ts @@ -100,20 +100,21 @@ export const installTransformForDataset = async ( installedTransforms = await Promise.all(installationPromises).then((results) => results.flat()); } - const currentInstallation = await getInstallation({ - savedObjectsClient, - pkgName: registryPackage.name, - }); - - // remove the saved object reference - await deleteTransformRefs( - savedObjectsClient, - currentInstallation?.installed_es || [], - registryPackage.name, - previousInstalledTransformEsAssets.map((asset) => asset.id), - installedTransforms.map((installed) => installed.id) - ); + if (previousInstalledTransformEsAssets.length > 0) { + const currentInstallation = await getInstallation({ + savedObjectsClient, + pkgName: registryPackage.name, + }); + // remove the saved object reference + await deleteTransformRefs( + savedObjectsClient, + currentInstallation?.installed_es || [], + registryPackage.name, + previousInstalledTransformEsAssets.map((asset) => asset.id), + installedTransforms.map((installed) => installed.id) + ); + } return installedTransforms; }; diff --git a/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/transform.test.ts b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/transform.test.ts index b481e15419eefa..0b66077b8699a0 100644 --- a/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/transform.test.ts +++ b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/transform.test.ts @@ -5,11 +5,7 @@ */ jest.mock('../../packages/get', () => { - return { getInstallation: jest.fn() }; -}); - -jest.mock('../../packages/install', () => { - return { saveInstalledEsRefs: jest.fn() }; + return { getInstallation: jest.fn(), getInstallationObject: jest.fn() }; }); jest.mock('./common', () => { @@ -19,10 +15,9 @@ jest.mock('./common', () => { }); import { installTransformForDataset } from './install'; -import { ILegacyScopedClusterClient, SavedObjectsClientContract } from 'kibana/server'; +import { ILegacyScopedClusterClient, SavedObject, SavedObjectsClientContract } from 'kibana/server'; import { ElasticsearchAssetType, Installation, RegistryPackage } from '../../../../types'; -import { getInstallation } from '../../packages'; -import { saveInstalledEsRefs } from '../../packages/install'; +import { getInstallation, getInstallationObject } from '../../packages'; import { getAsset } from './common'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { savedObjectsClientMock } from '../../../../../../../../src/core/server/saved_objects/service/saved_objects_client.mock'; @@ -30,30 +25,29 @@ import { savedObjectsClientMock } from '../../../../../../../../src/core/server/ describe('test transform install', () => { let legacyScopedClusterClient: jest.Mocked; let savedObjectsClient: jest.Mocked; - let saveInstalledEsRefsMock: jest.MockedFunction; beforeEach(() => { legacyScopedClusterClient = { callAsInternalUser: jest.fn(), callAsCurrentUser: jest.fn(), }; + (getInstallation as jest.MockedFunction).mockReset(); + (getInstallationObject as jest.MockedFunction).mockReset(); savedObjectsClient = savedObjectsClientMock.create(); - saveInstalledEsRefsMock = saveInstalledEsRefs as jest.MockedFunction< - typeof saveInstalledEsRefs - >; - saveInstalledEsRefsMock.mockClear(); }); - afterEach(() => {}); + afterEach(() => { + jest.clearAllMocks(); + }); test('can install new versions and removes older version', async () => { const previousInstallation: Installation = ({ installed_es: [ { id: 'metrics-endpoint.policy-0.16.0-dev.0', - type: 'ingest_pipeline', + type: ElasticsearchAssetType.ingestPipeline, }, { - id: 'metrics-endpoint.metadata-current-default-0.15.0-dev.0', + id: 'metrics-endpoint.metadata_current-default-0.15.0-dev.0', type: ElasticsearchAssetType.transform, }, ], @@ -63,14 +57,18 @@ describe('test transform install', () => { installed_es: [ { id: 'metrics-endpoint.policy-0.16.0-dev.0', - type: 'ingest_pipeline', + type: ElasticsearchAssetType.ingestPipeline, }, { - id: 'metrics-endpoint.metadata-current-default-0.15.0-dev.0', + id: 'metrics-endpoint.metadata_current-default-0.15.0-dev.0', type: ElasticsearchAssetType.transform, }, { - id: 'metrics-endpoint.metadata-current-default-0.16.0-dev.0', + id: 'metrics-endpoint.metadata_current-default-0.16.0-dev.0', + type: ElasticsearchAssetType.transform, + }, + { + id: 'metrics-endpoint.metadata-default-0.16.0-dev.0', type: ElasticsearchAssetType.transform, }, ], @@ -83,6 +81,16 @@ describe('test transform install', () => { .mockReturnValueOnce(Promise.resolve(previousInstallation)) .mockReturnValueOnce(Promise.resolve(currentInstallation)); + (getInstallationObject as jest.MockedFunction< + typeof getInstallationObject + >).mockReturnValueOnce( + Promise.resolve(({ + attributes: { + installed_es: previousInstallation.installed_es, + }, + } as unknown) as SavedObject) + ); + await installTransformForDataset( ({ name: 'endpoint', @@ -132,7 +140,7 @@ describe('test transform install', () => { 'transport.request', { method: 'POST', - path: '_transform/metrics-endpoint.metadata-current-default-0.15.0-dev.0/_stop', + path: '_transform/metrics-endpoint.metadata_current-default-0.15.0-dev.0/_stop', query: 'force=true', ignore: [404], }, @@ -142,7 +150,7 @@ describe('test transform install', () => { { method: 'DELETE', query: 'force=true', - path: '_transform/metrics-endpoint.metadata-current-default-0.15.0-dev.0', + path: '_transform/metrics-endpoint.metadata_current-default-0.15.0-dev.0', ignore: [404], }, ], @@ -180,24 +188,48 @@ describe('test transform install', () => { ], ]); - expect(saveInstalledEsRefsMock.mock.calls[0][2]).toEqual([ - { - id: 'metrics-endpoint.metadata-default-0.16.0-dev.0', - type: 'transform', - }, - { - id: 'metrics-endpoint.metadata_current-default-0.16.0-dev.0', - type: 'transform', - }, - ]); expect(savedObjectsClient.update.mock.calls).toEqual([ [ 'epm-packages', 'endpoint', { installed_es: [ - { id: 'metrics-endpoint.policy-0.16.0-dev.0', type: 'ingest_pipeline' }, - { id: 'metrics-endpoint.metadata-current-default-0.16.0-dev.0', type: 'transform' }, + { + id: 'metrics-endpoint.policy-0.16.0-dev.0', + type: 'ingest_pipeline', + }, + { + id: 'metrics-endpoint.metadata_current-default-0.15.0-dev.0', + type: 'transform', + }, + { + id: 'metrics-endpoint.metadata-default-0.16.0-dev.0', + type: 'transform', + }, + { + id: 'metrics-endpoint.metadata_current-default-0.16.0-dev.0', + type: 'transform', + }, + ], + }, + ], + [ + 'epm-packages', + 'endpoint', + { + installed_es: [ + { + id: 'metrics-endpoint.policy-0.16.0-dev.0', + type: 'ingest_pipeline', + }, + { + id: 'metrics-endpoint.metadata_current-default-0.16.0-dev.0', + type: 'transform', + }, + { + id: 'metrics-endpoint.metadata-default-0.16.0-dev.0', + type: 'transform', + }, ], }, ], @@ -224,6 +256,14 @@ describe('test transform install', () => { .mockReturnValueOnce(Promise.resolve(previousInstallation)) .mockReturnValueOnce(Promise.resolve(currentInstallation)); + (getInstallationObject as jest.MockedFunction< + typeof getInstallationObject + >).mockReturnValueOnce( + Promise.resolve(({ attributes: { installed_es: [] } } as unknown) as SavedObject< + Installation + >) + ); + legacyScopedClusterClient.callAsCurrentUser = jest.fn(); await installTransformForDataset( ({ name: 'endpoint', @@ -268,21 +308,13 @@ describe('test transform install', () => { }, ], ]); - - expect(saveInstalledEsRefsMock.mock.calls[0][2]).toEqual([ - { - id: 'metrics-endpoint.metadata_current-default-0.16.0-dev.0', - type: 'transform', - }, - ]); - expect(savedObjectsClient.update.mock.calls).toEqual([ [ 'epm-packages', 'endpoint', { installed_es: [ - { id: 'metrics-endpoint.metadata-current-default-0.16.0-dev.0', type: 'transform' }, + { id: 'metrics-endpoint.metadata_current-default-0.16.0-dev.0', type: 'transform' }, ], }, ], @@ -307,6 +339,14 @@ describe('test transform install', () => { .mockReturnValueOnce(Promise.resolve(previousInstallation)) .mockReturnValueOnce(Promise.resolve(currentInstallation)); + (getInstallationObject as jest.MockedFunction< + typeof getInstallationObject + >).mockReturnValueOnce( + Promise.resolve(({ + attributes: { installed_es: currentInstallation.installed_es }, + } as unknown) as SavedObject) + ); + await installTransformForDataset( ({ name: 'endpoint', @@ -367,7 +407,6 @@ describe('test transform install', () => { }, ], ]); - expect(saveInstalledEsRefsMock.mock.calls).toEqual([]); expect(savedObjectsClient.update.mock.calls).toEqual([ [ 'epm-packages',