From c17884549333848e9b0e2392c5dc324319b69292 Mon Sep 17 00:00:00 2001 From: mohamedhamed-ahmed Date: Thu, 22 Jan 2026 13:45:24 +0100 Subject: [PATCH 1/2] [Dataset quality] configuring dockerized package registry in tests --- .../packages/shared/kbn-test/index.ts | 11 +++--- .../lib/docker_servers/index.ts | 1 + .../docker_servers/package_registry/index.ts | 38 +++++++++++++++++++ .../package_registry_config.yml | 2 + .../plugins/shared/dataset_quality/README.md | 2 +- .../feature_flag.serverless.config.base.ts | 24 +----------- .../feature_flag.stateful.config.base.ts | 24 ++---------- .../fixtures/package_registry_config.yml | 2 - .../default_configs/serverless.config.base.ts | 25 +----------- .../default_configs/stateful.config.base.ts | 25 ++---------- .../dataset_quality_details.ts | 24 ++++++------ .../test/functional/config.base.ts | 13 ++++++- .../dataset_quality_details.ts | 25 ++++++------ 13 files changed, 92 insertions(+), 124 deletions(-) create mode 100644 src/platform/packages/shared/kbn-test/src/functional_test_runner/lib/docker_servers/package_registry/index.ts create mode 100644 src/platform/packages/shared/kbn-test/src/functional_test_runner/lib/docker_servers/package_registry/package_registry_config.yml delete mode 100644 x-pack/platform/test/api_integration_deployment_agnostic/default_configs/fixtures/package_registry_config.yml diff --git a/src/platform/packages/shared/kbn-test/index.ts b/src/platform/packages/shared/kbn-test/index.ts index 97785c7ced4e1..75b7d30b7f31f 100644 --- a/src/platform/packages/shared/kbn-test/index.ts +++ b/src/platform/packages/shared/kbn-test/index.ts @@ -82,9 +82,8 @@ export * from './src/find_test_plugin_paths'; export { getDockerFileMountPath } from '@kbn/es'; -// Docker image to use for Fleet API integration tests. -// This image comes from the latest successful build of https://buildkite.com/elastic/kibana-package-registry-promote -// which is promoted after acceptance tests succeed against docker.elastic.co/package-registry/distribution:lite -export const fleetPackageRegistryDockerImage = - process.env.FLEET_PACKAGE_REGISTRY_DOCKER_IMAGE || - 'docker.elastic.co/kibana-ci/package-registry-distribution:lite'; +export { + fleetPackageRegistryDockerImage, + packageRegistryDocker, + dockerRegistryPort, +} from './src/functional_test_runner'; diff --git a/src/platform/packages/shared/kbn-test/src/functional_test_runner/lib/docker_servers/index.ts b/src/platform/packages/shared/kbn-test/src/functional_test_runner/lib/docker_servers/index.ts index 87469dea1fefc..43da3f1dc618c 100644 --- a/src/platform/packages/shared/kbn-test/src/functional_test_runner/lib/docker_servers/index.ts +++ b/src/platform/packages/shared/kbn-test/src/functional_test_runner/lib/docker_servers/index.ts @@ -9,3 +9,4 @@ export * from './docker_servers_service'; export * from './define_docker_servers_config'; +export * from './package_registry'; diff --git a/src/platform/packages/shared/kbn-test/src/functional_test_runner/lib/docker_servers/package_registry/index.ts b/src/platform/packages/shared/kbn-test/src/functional_test_runner/lib/docker_servers/package_registry/index.ts new file mode 100644 index 0000000000000..2672be7a51836 --- /dev/null +++ b/src/platform/packages/shared/kbn-test/src/functional_test_runner/lib/docker_servers/package_registry/index.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { join } from 'path'; + +// Docker image to use for Fleet API integration tests. +// This image comes from the latest successful build of https://buildkite.com/elastic/kibana-package-registry-promote +// which is promoted after acceptance tests succeed against docker.elastic.co/package-registry/distribution:lite +export const fleetPackageRegistryDockerImage = + process.env.FLEET_PACKAGE_REGISTRY_DOCKER_IMAGE || + 'docker.elastic.co/kibana-ci/package-registry-distribution:lite'; + +const packageRegistryConfig = join(__dirname, './package_registry_config.yml'); +const dockerArgs: string[] = ['-v', `${packageRegistryConfig}:/package-registry/config.yml`]; + +/** + * This is used by CI to set the docker registry port + * you can also define this environment variable locally when running tests which + * will spin up a local docker package registry locally for you + * if this is defined it takes precedence over the `packageRegistryOverride` variable + */ +export const dockerRegistryPort: string | undefined = process.env.FLEET_PACKAGE_REGISTRY_PORT; + +export const packageRegistryDocker = { + enabled: !!dockerRegistryPort, + image: fleetPackageRegistryDockerImage, + portInContainer: 8080, + port: dockerRegistryPort, + args: dockerArgs, + waitForLogLine: 'package manifests loaded', + waitForLogLineTimeoutMs: 60 * 4 * 1000, // 4 minutes +}; diff --git a/src/platform/packages/shared/kbn-test/src/functional_test_runner/lib/docker_servers/package_registry/package_registry_config.yml b/src/platform/packages/shared/kbn-test/src/functional_test_runner/lib/docker_servers/package_registry/package_registry_config.yml new file mode 100644 index 0000000000000..a6c51976af986 --- /dev/null +++ b/src/platform/packages/shared/kbn-test/src/functional_test_runner/lib/docker_servers/package_registry/package_registry_config.yml @@ -0,0 +1,2 @@ +package_paths: + - /packages/package-storage \ No newline at end of file diff --git a/x-pack/platform/plugins/shared/dataset_quality/README.md b/x-pack/platform/plugins/shared/dataset_quality/README.md index 18351597a3064..6b61fa64ae74c 100755 --- a/x-pack/platform/plugins/shared/dataset_quality/README.md +++ b/x-pack/platform/plugins/shared/dataset_quality/README.md @@ -78,7 +78,7 @@ node x-pack/platform/plugins/shared/dataset_quality/scripts/api --runner --grep- For tests using package registry we have enabled a configuration that uses a dockerized lite version to execute the tests in the CI, this will reduce the flakyness of them when calling the real endpoint. -To be able to run this version locally you must have a docker daemon running in your systema and set `FLEET_PACKAGE_REGISTRY_PORT` env var. In order to set this variable execute +To be able to run this version locally you must have a docker daemon running in your system and set `FLEET_PACKAGE_REGISTRY_PORT` env var. In order to set this variable execute ``` export set FLEET_PACKAGE_REGISTRY_PORT=12345 diff --git a/x-pack/platform/test/api_integration_deployment_agnostic/default_configs/feature_flag.serverless.config.base.ts b/x-pack/platform/test/api_integration_deployment_agnostic/default_configs/feature_flag.serverless.config.base.ts index d9b89d58aee08..c9d98f8710686 100644 --- a/x-pack/platform/test/api_integration_deployment_agnostic/default_configs/feature_flag.serverless.config.base.ts +++ b/x-pack/platform/test/api_integration_deployment_agnostic/default_configs/feature_flag.serverless.config.base.ts @@ -5,11 +5,10 @@ * 2.0. */ import type { FtrConfigProviderContext, Config } from '@kbn/test'; -import { fleetPackageRegistryDockerImage, defineDockerServersConfig } from '@kbn/test'; +import { defineDockerServersConfig, packageRegistryDocker, dockerRegistryPort } from '@kbn/test'; import { ScoutTestRunConfigCategory } from '@kbn/scout-info'; import type { ServerlessProjectType } from '@kbn/es'; -import path from 'path'; import type { DeploymentAgnosticCommonServices } from '../services'; import { services } from '../services'; import { LOCAL_PRODUCT_DOC_PATH } from './common_paths'; @@ -58,22 +57,12 @@ export function createServerlessFeatureFlagTestConfig ) { return async ({ readConfigFile }: FtrConfigProviderContext): Promise => { - const packageRegistryConfig = path.join(__dirname, './fixtures/package_registry_config.yml'); - const dockerArgs: string[] = ['-v', `${packageRegistryConfig}:/package-registry/config.yml`]; let kbnServerArgs: string[] = []; if (options.kbnServerArgs) { kbnServerArgs = await updateKbnServerArguments(options.kbnServerArgs); } - /** - * This is used by CI to set the docker registry port - * you can also define this environment variable locally when running tests which - * will spin up a local docker package registry locally for you - * if this is defined it takes precedence over the `packageRegistryOverride` variable - */ - const dockerRegistryPort: string | undefined = process.env.FLEET_PACKAGE_REGISTRY_PORT; - const svlSharedConfig = await readConfigFile( require.resolve('../../serverless/shared/config.base.ts') ); @@ -87,16 +76,7 @@ export function createServerlessFeatureFlagTestConfig { await PageObjects.observabilityLogsExplorer.uninstallPackage(apachePkg); - await PageObjects.observabilityLogsExplorer.uninstallPackage(bitbucketPkg); + await PageObjects.observabilityLogsExplorer.uninstallPackage(fleetServerPkg); await synthtrace.clean(); await synthtrace.deleteIndexTemplate(IndexTemplateName.Synht2); await synthtrace.deleteComponentTemplate('synth.2@custom'); @@ -374,7 +374,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid it('should hide integration dashboard for integrations without dashboards', async () => { await PageObjects.datasetQuality.navigateToDetails({ - dataStream: bitbucketAuditDataStreamName, + dataStream: fleetServerOutputHealthDataStreamName, }); await PageObjects.datasetQuality.openIntegrationActionsMenu(); @@ -388,7 +388,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid it('should navigate to integration overview page on clicking integration overview action', async () => { await PageObjects.datasetQuality.navigateToDetails({ - dataStream: bitbucketAuditDataStreamName, + dataStream: fleetServerOutputHealthDataStreamName, }); await PageObjects.datasetQuality.openIntegrationActionsMenu(); @@ -402,7 +402,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid const currentUrl = await browser.getCurrentUrl(); const parsedUrl = new URL(currentUrl); - expect(parsedUrl.pathname).to.contain('/app/integrations/detail/atlassian_bitbucket'); + expect(parsedUrl.pathname).to.contain('/app/integrations/detail/fleet_server'); }); }); diff --git a/x-pack/solutions/observability/test/functional/config.base.ts b/x-pack/solutions/observability/test/functional/config.base.ts index b7b0615acd4ef..262d4725a7c30 100644 --- a/x-pack/solutions/observability/test/functional/config.base.ts +++ b/x-pack/solutions/observability/test/functional/config.base.ts @@ -7,8 +7,9 @@ import { ScoutTestRunConfigCategory } from '@kbn/scout-info'; import type { FtrConfigProviderContext } from '@kbn/test'; -import { services } from './services'; +import { defineDockerServersConfig, dockerRegistryPort, packageRegistryDocker } from '@kbn/test'; import { pageObjects } from './page_objects'; +import { services } from './services'; export async function getFunctionalConfig({ readConfigFile }: FtrConfigProviderContext) { const xPackPlatformFunctionalTestsConfig = await readConfigFile( @@ -21,13 +22,21 @@ export async function getFunctionalConfig({ readConfigFile }: FtrConfigProviderC pageObjects, testConfigCategory: ScoutTestRunConfigCategory.UI_TEST, servers: xPackPlatformFunctionalTestsConfig.get('servers'), + dockerServers: defineDockerServersConfig({ + registry: packageRegistryDocker, + }), security: xPackPlatformFunctionalTestsConfig.get('security'), junit: { reportName: 'X-Pack Observability Functional UI Tests', }, kbnTestServer: { ...xPackPlatformFunctionalTestsConfig.get('kbnTestServer'), - serverArgs: [...xPackPlatformFunctionalTestsConfig.get('kbnTestServer.serverArgs')], + serverArgs: [ + ...xPackPlatformFunctionalTestsConfig.get('kbnTestServer.serverArgs'), + ...(dockerRegistryPort + ? [`--xpack.fleet.registryUrl=http://localhost:${dockerRegistryPort}`] + : []), + ], }, esTestCluster: { ...xPackPlatformFunctionalTestsConfig.get('esTestCluster'), diff --git a/x-pack/solutions/observability/test/serverless/functional/test_suites/dataset_quality/dataset_quality_details.ts b/x-pack/solutions/observability/test/serverless/functional/test_suites/dataset_quality/dataset_quality_details.ts index 7068d2bb08ad0..eb85d35d73b58 100644 --- a/x-pack/solutions/observability/test/serverless/functional/test_suites/dataset_quality/dataset_quality_details.ts +++ b/x-pack/solutions/observability/test/serverless/functional/test_suites/dataset_quality/dataset_quality_details.ts @@ -46,11 +46,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { version: '1.14.0', }; - const bitbucketDatasetName = 'atlassian_bitbucket.audit'; - const bitbucketAuditDataStreamName = `logs-${bitbucketDatasetName}-${defaultNamespace}`; - const bitbucketPkg = { - name: 'atlassian_bitbucket', - version: '1.14.0', + const fleetServerDatasetName = 'fleet_server.output_health'; + const fleetServerOutputHealthDataStreamName = `logs-${fleetServerDatasetName}-${defaultNamespace}`; + const fleetServerPkg = { + name: 'fleet_server', + version: '1.6.0', }; const regularDatasetName = datasetNames[0]; @@ -63,8 +63,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Install Apache Integration and ingest logs for it await PageObjects.observabilityLogsExplorer.installPackage(apachePkg); - // Install Bitbucket Integration (package which does not has Dashboards) and ingest logs for it - await PageObjects.observabilityLogsExplorer.installPackage(bitbucketPkg); + // Install fleet server Integration (package which does not has Dashboards) and ingest logs for it + await PageObjects.observabilityLogsExplorer.installPackage(fleetServerPkg); await synthtrace.index([ // Ingest basic logs @@ -91,7 +91,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { isMalformed: true, }), // Index logs for Bitbucket integration - getLogsForDataset({ to, count: 10, dataset: bitbucketDatasetName }), + getLogsForDataset({ to, count: 10, dataset: fleetServerDatasetName }), ]); await PageObjects.svlCommonPage.loginAsViewer(); @@ -99,7 +99,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { after(async () => { await PageObjects.observabilityLogsExplorer.uninstallPackage(apachePkg); - await PageObjects.observabilityLogsExplorer.uninstallPackage(bitbucketPkg); + await PageObjects.observabilityLogsExplorer.uninstallPackage(fleetServerPkg); await synthtrace.clean(); }); @@ -227,7 +227,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should hide integration dashboard for integrations without dashboards', async () => { await PageObjects.datasetQuality.navigateToDetails({ - dataStream: bitbucketAuditDataStreamName, + dataStream: fleetServerOutputHealthDataStreamName, }); await PageObjects.datasetQuality.openIntegrationActionsMenu(); @@ -241,7 +241,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('Should navigate to integration overview page on clicking integration overview action', async () => { await PageObjects.datasetQuality.navigateToDetails({ - dataStream: bitbucketAuditDataStreamName, + dataStream: fleetServerOutputHealthDataStreamName, }); await PageObjects.datasetQuality.openIntegrationActionsMenu(); @@ -254,8 +254,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.tryForTime(5000, async () => { const currentUrl = await browser.getCurrentUrl(); const parsedUrl = new URL(currentUrl); - - expect(parsedUrl.pathname).to.contain('/app/integrations/detail/atlassian_bitbucket'); + expect(parsedUrl.pathname).to.contain('/app/integrations/detail/fleet_server'); }); }); From 38563c9274815fb1a62ad17f647d54dfba699b31 Mon Sep 17 00:00:00 2001 From: mohamedhamed-ahmed Date: Fri, 23 Jan 2026 14:07:44 +0100 Subject: [PATCH 2/2] re-add preferCached --- .../lib/docker_servers/package_registry/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/platform/packages/shared/kbn-test/src/functional_test_runner/lib/docker_servers/package_registry/index.ts b/src/platform/packages/shared/kbn-test/src/functional_test_runner/lib/docker_servers/package_registry/index.ts index 2672be7a51836..589e76fbf0b21 100644 --- a/src/platform/packages/shared/kbn-test/src/functional_test_runner/lib/docker_servers/package_registry/index.ts +++ b/src/platform/packages/shared/kbn-test/src/functional_test_runner/lib/docker_servers/package_registry/index.ts @@ -35,4 +35,5 @@ export const packageRegistryDocker = { args: dockerArgs, waitForLogLine: 'package manifests loaded', waitForLogLineTimeoutMs: 60 * 4 * 1000, // 4 minutes + preferCached: true, };