From afdd15fb8967275c3aab1f2c9d6759490a43eb35 Mon Sep 17 00:00:00 2001 From: "Christiane (Tina) Heiligers" Date: Wed, 22 Jan 2025 14:36:34 -0700 Subject: [PATCH] Adds tests to ensure registered SO types aren't removed (#207142) fix https://github.com/elastic/kibana/issues/207128 We have an integration test to check that saved objects aren't removed and another that catches mappings changes. This PR adds another assertion to ensure that the message is clear: Removing a saved object type is not allowed after 8.8. --------- Co-authored-by: Elastic Machine --- .../migration-server-internal/src/core/unused_types.ts | 2 ++ src/core/packages/saved-objects/server-internal/index.ts | 1 + src/core/packages/saved-objects/server-internal/src/index.ts | 1 + .../saved-objects/server-internal/src/object_types/index.ts | 4 ++++ src/core/packages/saved-objects/server/src/type_registry.ts | 1 - .../ci_checks/saved_objects/check_registered_types.test.ts | 4 ++++ .../saved_objects/jest.integration.config.js | 1 + .../group3 => registration}/type_registrations.test.ts | 0 8 files changed, 13 insertions(+), 1 deletion(-) rename src/core/server/integration_tests/saved_objects/{migrations/group3 => registration}/type_registrations.test.ts (100%) diff --git a/src/core/packages/saved-objects/migration-server-internal/src/core/unused_types.ts b/src/core/packages/saved-objects/migration-server-internal/src/core/unused_types.ts index 48594416cbece..2d234c6f4d3d3 100644 --- a/src/core/packages/saved-objects/migration-server-internal/src/core/unused_types.ts +++ b/src/core/packages/saved-objects/migration-server-internal/src/core/unused_types.ts @@ -11,6 +11,8 @@ import type { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/type /** * Types that are no longer registered and need to be removed + * As of 8.8, no new types are allowed to be removed. + * Removing saved object types is not backward compatible */ export const REMOVED_TYPES: string[] = [ 'apm-services-telemetry', diff --git a/src/core/packages/saved-objects/server-internal/index.ts b/src/core/packages/saved-objects/server-internal/index.ts index 7b67bfa6861b4..3a9c80749c72e 100644 --- a/src/core/packages/saved-objects/server-internal/index.ts +++ b/src/core/packages/saved-objects/server-internal/index.ts @@ -11,6 +11,7 @@ export { MIGRATION_CLIENT_OPTIONS, SavedObjectsService, CoreSavedObjectsRouteHandlerContext, + SAVED_OBJECT_TYPES_COUNT, } from './src'; export type { InternalSavedObjectsServiceStart, diff --git a/src/core/packages/saved-objects/server-internal/src/index.ts b/src/core/packages/saved-objects/server-internal/src/index.ts index a964d30a0e66a..ae34f8f945462 100644 --- a/src/core/packages/saved-objects/server-internal/src/index.ts +++ b/src/core/packages/saved-objects/server-internal/src/index.ts @@ -18,3 +18,4 @@ export type { InternalSavedObjectsRequestHandlerContext, InternalSavedObjectRouter, } from './internal_types'; +export { SAVED_OBJECT_TYPES_COUNT } from './object_types'; diff --git a/src/core/packages/saved-objects/server-internal/src/object_types/index.ts b/src/core/packages/saved-objects/server-internal/src/object_types/index.ts index 74ba99cf95498..6246c59b8e943 100644 --- a/src/core/packages/saved-objects/server-internal/src/object_types/index.ts +++ b/src/core/packages/saved-objects/server-internal/src/object_types/index.ts @@ -8,3 +8,7 @@ */ export { registerCoreObjectTypes } from './registration'; + +// set minimum number of registered saved objects to ensure no object types are removed after 8.8 +// declared in internal implementation exclicilty to prevent unintended changes. +export const SAVED_OBJECT_TYPES_COUNT = 127 as const; diff --git a/src/core/packages/saved-objects/server/src/type_registry.ts b/src/core/packages/saved-objects/server/src/type_registry.ts index a1128b683166b..d64ca1917be0d 100644 --- a/src/core/packages/saved-objects/server/src/type_registry.ts +++ b/src/core/packages/saved-objects/server/src/type_registry.ts @@ -8,7 +8,6 @@ */ import type { SavedObjectsType } from './saved_objects_type'; - /** * Registry holding information about all the registered {@link SavedObjectsType | saved object types}. */ diff --git a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts index 43d5403245e64..427fcc06c3c30 100644 --- a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts +++ b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts @@ -15,6 +15,7 @@ import { createRootWithCorePlugins, type TestElasticsearchUtils, } from '@kbn/core-test-helpers-kbn-server'; +import { SAVED_OBJECT_TYPES_COUNT } from '@kbn/core-saved-objects-server-internal'; describe('checking migration metadata changes on all registered SO types', () => { let esServer: TestElasticsearchUtils; @@ -46,6 +47,8 @@ describe('checking migration metadata changes on all registered SO types', () => // This test is meant to fail when any change is made in registered types that could potentially impact the SO migration. // Just update the snapshot by running this test file via jest_integration with `-u` and push the update. // The intent is to trigger a code review from the Core team to review the SO type changes. + // The number of types in the hashMap should never be reduced, it can only increase. + // Removing saved object types is forbidden after 8.8. it('detecting migration related changes in registered types', () => { const allTypes = typeRegistry.getAllTypes(); @@ -185,5 +188,6 @@ describe('checking migration metadata changes on all registered SO types', () => "workplace_search_telemetry": "52b32b47ee576f554ac77cb1d5896dfbcfe9a1fb", } `); + expect(Object.keys(hashMap).length).toEqual(SAVED_OBJECT_TYPES_COUNT); }); }); diff --git a/src/core/server/integration_tests/saved_objects/jest.integration.config.js b/src/core/server/integration_tests/saved_objects/jest.integration.config.js index 842eeb6e9d19d..6f1903f5cf689 100644 --- a/src/core/server/integration_tests/saved_objects/jest.integration.config.js +++ b/src/core/server/integration_tests/saved_objects/jest.integration.config.js @@ -16,6 +16,7 @@ module.exports = { preset: '@kbn/test/jest_integration', rootDir: '../../../../..', roots: [ + '/src/core/server/integration_tests/saved_objects/registration', '/src/core/server/integration_tests/saved_objects/routes', '/src/core/server/integration_tests/saved_objects/service', '/src/core/server/integration_tests/saved_objects/validation', diff --git a/src/core/server/integration_tests/saved_objects/migrations/group3/type_registrations.test.ts b/src/core/server/integration_tests/saved_objects/registration/type_registrations.test.ts similarity index 100% rename from src/core/server/integration_tests/saved_objects/migrations/group3/type_registrations.test.ts rename to src/core/server/integration_tests/saved_objects/registration/type_registrations.test.ts