diff --git a/.buildkite/ftr_oblt_stateful_configs.yml b/.buildkite/ftr_oblt_stateful_configs.yml index 105660629d770..fcf7f1a42d4a3 100644 --- a/.buildkite/ftr_oblt_stateful_configs.yml +++ b/.buildkite/ftr_oblt_stateful_configs.yml @@ -37,7 +37,7 @@ enabled: - x-pack/solutions/observability/test/apm_api_integration/rules/config.ts - x-pack/solutions/observability/test/apm_api_integration/trial/config.ts - x-pack/solutions/observability/test/dataset_quality_api_integration/basic/config.ts - - x-pack/test/functional/apps/dataset_quality/config.ts + - x-pack/solutions/observability/test/functional/apps/dataset_quality/config.ts - x-pack/solutions/observability/test/functional/apps/uptime/config.ts - x-pack/solutions/observability/test/observability_api_integration/basic/config.ts - x-pack/solutions/observability/test/observability_api_integration/trial/config.ts @@ -46,7 +46,7 @@ enabled: - x-pack/solutions/observability/test/observability_onboarding_api_integration/cloud/config.ts - x-pack/solutions/observability/test/observability_ai_assistant_functional/enterprise/config.ts - x-pack/solutions/observability/test/api_integration/profiling/cloud/config.ts - - x-pack/test/functional/apps/apm/config.ts + - x-pack/solutions/observability/test/functional/apps/apm/config.ts - x-pack/solutions/observability/test/functional_with_es_ssl/config.ts - x-pack/solutions/observability/test/api_integration/apis/cases/config.ts - x-pack/solutions/observability/test/functional/apps/slo/embeddables/config.ts diff --git a/.buildkite/ftr_platform_stateful_configs.yml b/.buildkite/ftr_platform_stateful_configs.yml index 1fdf0fc6dd3b9..1a5c67dd12912 100644 --- a/.buildkite/ftr_platform_stateful_configs.yml +++ b/.buildkite/ftr_platform_stateful_configs.yml @@ -241,7 +241,7 @@ enabled: - x-pack/platform/test/functional/apps/ml/short_tests/config.ts - x-pack/platform/test/functional/apps/ml/stack_management_jobs/config.ts - x-pack/platform/test/functional/apps/ml/memory_usage/config.ts - - x-pack/test/functional/apps/monitoring/config.ts + - x-pack/platform/test/functional/apps/monitoring/config.ts - x-pack/platform/test/functional/apps/painless_lab/config.ts - x-pack/platform/test/functional/apps/remote_clusters/config.ts - x-pack/platform/test/functional/apps/reporting_management/config.ts diff --git a/.buildkite/ftr_search_stateful_configs.yml b/.buildkite/ftr_search_stateful_configs.yml index 2d945df7accfd..7fbc4dd484396 100644 --- a/.buildkite/ftr_search_stateful_configs.yml +++ b/.buildkite/ftr_search_stateful_configs.yml @@ -5,7 +5,7 @@ disabled: defaultQueue: 'n2-4-spot' enabled: - x-pack/solutions/search/test/functional_search/config.ts - - x-pack/test/functional/apps/search_playground/config.ts + - x-pack/solutions/search/test/functional/apps/search_playground/config.ts - x-pack/solutions/search/test/functional/config/config.feature_flags.ts - x-pack/solutions/search/test/api_integration/apis/search_playground/config.ts - x-pack/solutions/search/test/api_integration/apis/guided_onboarding/config.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 14ce2ea0c2eff..5bf4539d002b7 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1496,8 +1496,8 @@ x-pack/solutions/observability/plugins/observability/server/lib/esql_extensions /x-pack/platform/test/monitoring_api_integration @elastic/stack-monitoring /x-pack/platform/test/functional/page_objects/monitoring_page.ts @elastic/stack-monitoring /x-pack/test/functional/es_archives/monitoring @elastic/stack-monitoring -/x-pack/test/functional/services/monitoring @elastic/stack-monitoring -/x-pack/test/functional/apps/monitoring @elastic/stack-monitoring +/x-pack/platform/test/functional/services/monitoring @elastic/stack-monitoring +/x-pack/platform/test/functional/apps/monitoring @elastic/stack-monitoring /x-pack/platform/test/api_integration/apis/monitoring @elastic/stack-monitoring /x-pack/platform/test/api_integration/apis/monitoring_collection @elastic/stack-monitoring /x-pack/test/accessibility/apps/group1/kibana_overview.ts @elastic/stack-monitoring @@ -1524,7 +1524,7 @@ x-pack/solutions/observability/plugins/observability/server/lib/esql_extensions /x-pack/platform/test/api_integration/services/apm_synthtrace_kibana_client.ts @elastic/obs-ux-infra_services-team @elastic/obs-ux-logs-team /x-pack/platform/test/stack_functional_integration/apps/apm @elastic/obs-ux-infra_services-team @elastic/obs-ux-logs-team /src/platform/test/api_integration/apis/ui_metric/*.ts @elastic/obs-ux-infra_services-team -/x-pack/test/functional/apps/apm/ @elastic/obs-ux-infra_services-team +/x-pack/solutions/observability/test/functional/apps/apm/ @elastic/obs-ux-infra_services-team /x-pack/solutions/observability/test/api_integration/apm/ @elastic/obs-ux-infra_services-team /x-pack/solutions/observability/test/apm_cypress/ @elastic/obs-ux-infra_services-team /src/apm.js @elastic/kibana-core @vigneshshanmugam @@ -1563,12 +1563,14 @@ x-pack/solutions/observability/plugins/observability/server/lib/esql_extensions /x-pack/test_serverless/functional/test_suites/observability/landing_page.ts @elastic/obs-ux-logs-team /x-pack/test_serverless/functional/test_suites/observability/navigation.ts @elastic/obs-ux-logs-team /x-pack/test/functional/page_objects/dataset_quality.ts @elastic/obs-ux-logs-team +/x-pack/solutions/observability/test/functional/page_objects/dataset_quality.ts @elastic/obs-ux-logs-team /x-pack/test_serverless/functional/test_suites/observability/index* @elastic/obs-ux-logs-team /x-pack/test_serverless/functional/test_suites/observability/cypress @elastic/obs-ux-logs-team /x-pack/test/functional/services/infra_source_configuration_form.ts @elastic/obs-ux-infra_services-team /x-pack/solutions/observability/test/functional/services/infra_source_configuration_form.ts @elastic/obs-ux-infra_services-team /x-pack/solutions/observability/test/functional/services/logs_ui @elastic/obs-ux-logs-team /x-pack/test/functional/page_objects/observability_logs_explorer.ts @elastic/obs-ux-logs-team +/x-pack/solutions/observability/test/functional/page_objects/observability_logs_explorer.ts @elastic/obs-ux-logs-team /src/platform/test/functional/services/selectable.ts @elastic/obs-ux-logs-team /x-pack/solutions/observability/test/observability_onboarding_api_integration @elastic/obs-ux-logs-team /x-pack/test_serverless/api_integration/test_suites/observability/index.feature_flags.ts @elastic/obs-ux-logs-team @@ -1577,7 +1579,7 @@ x-pack/solutions/observability/plugins/observability/server/lib/esql_extensions /x-pack/test_serverless/api_integration/test_suites/observability/dataset_quality_api_integration @elastic/obs-ux-logs-team /x-pack/test/functional/apps/observability_logs_explorer @elastic/obs-ux-logs-team /x-pack/test_serverless/functional/test_suites/observability/observability_logs_explorer @elastic/obs-ux-logs-team -/x-pack/test/functional/apps/dataset_quality @elastic/obs-ux-logs-team +/x-pack/solutions/observability/test/functional/apps/dataset_quality @elastic/obs-ux-logs-team /x-pack/test_serverless/functional/test_suites/observability/dataset_quality @elastic/obs-ux-logs-team /x-pack/test_serverless/functional/test_suites/observability/discover @elastic/obs-ux-logs-team @elastic/kibana-data-discovery /src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview @elastic/obs-ux-logs-team @@ -2243,7 +2245,7 @@ x-pack/platform/plugins/private/cloud_integrations/cloud_full_story/server/confi /x-pack/platform/test/functional/page_objects/search_sessions_management_page.ts @elastic/search-kibana /x-pack/test/functional/page_objects/search_* @elastic/search-kibana x-pack/platform/test/functional/page_objects/search_profiler_page.ts @elastic/search-kibana -/x-pack/test/functional/apps/search_playground @elastic/search-kibana +/x-pack/solutions/search/test/functional/apps/search_playground @elastic/search-kibana /x-pack/test_serverless/functional/page_objects/svl_ingest_pipelines.ts @elastic/search-kibana /x-pack/platform/test/functional/apps/dev_tools/embedded_console.ts @elastic/search-kibana /x-pack/platform/test/functional/apps/ingest_pipelines/feature_controls/ingest_pipelines_security.ts @elastic/search-kibana diff --git a/x-pack/platform/plugins/shared/dataset_quality/README.md b/x-pack/platform/plugins/shared/dataset_quality/README.md index 2574d91460a8b..4233cdb22be17 100755 --- a/x-pack/platform/plugins/shared/dataset_quality/README.md +++ b/x-pack/platform/plugins/shared/dataset_quality/README.md @@ -97,19 +97,19 @@ unset FLEET_PACKAGE_REGISTRY_PORT ##### FTR Server ``` -yarn test:ftr:server --config ./x-pack/test/functional/apps/dataset_quality/config.ts +yarn test:ftr:server --config ./x-pack/solutions/observability/test/functional/apps/dataset_quality/config.ts ``` ##### FTR Runner ``` -yarn test:ftr:runner --config ./x-pack/test/functional/apps/dataset_quality/config.ts --include ./x-pack/test/functional/apps/dataset_quality/index.ts +yarn test:ftr:runner --config ./x-pack/solutions/observability/test/functional/apps/dataset_quality/config.ts --include ./x-pack/solutions/observability/test/functional/apps/dataset_quality/index.ts ``` ##### Running Individual Tests ``` -yarn test:ftr:runner --config ./x-pack/test/functional/apps/dataset_quality/config.ts --include ./x-pack/test/functional/apps/dataset_quality/$1 +yarn test:ftr:runner --config ./x-pack/solutions/observability/test/functional/apps/dataset_quality/config.ts --include ./x-pack/solutions/observability/test/functional/apps/dataset_quality/$1 ``` #### Serverless diff --git a/x-pack/test/functional/apps/monitoring/_get_lifecycle_methods.js b/x-pack/platform/test/functional/apps/monitoring/_get_lifecycle_methods.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/_get_lifecycle_methods.js rename to x-pack/platform/test/functional/apps/monitoring/_get_lifecycle_methods.js diff --git a/x-pack/test/functional/apps/monitoring/beats/beat_detail.js b/x-pack/platform/test/functional/apps/monitoring/beats/beat_detail.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/beats/beat_detail.js rename to x-pack/platform/test/functional/apps/monitoring/beats/beat_detail.js diff --git a/x-pack/test/functional/apps/monitoring/beats/cluster.js b/x-pack/platform/test/functional/apps/monitoring/beats/cluster.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/beats/cluster.js rename to x-pack/platform/test/functional/apps/monitoring/beats/cluster.js diff --git a/x-pack/test/functional/apps/monitoring/beats/listing.js b/x-pack/platform/test/functional/apps/monitoring/beats/listing.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/beats/listing.js rename to x-pack/platform/test/functional/apps/monitoring/beats/listing.js diff --git a/x-pack/test/functional/apps/monitoring/beats/overview.js b/x-pack/platform/test/functional/apps/monitoring/beats/overview.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/beats/overview.js rename to x-pack/platform/test/functional/apps/monitoring/beats/overview.js diff --git a/x-pack/test/functional/apps/monitoring/cluster/list.js b/x-pack/platform/test/functional/apps/monitoring/cluster/list.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/cluster/list.js rename to x-pack/platform/test/functional/apps/monitoring/cluster/list.js diff --git a/x-pack/test/functional/apps/monitoring/cluster/list_mb.js b/x-pack/platform/test/functional/apps/monitoring/cluster/list_mb.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/cluster/list_mb.js rename to x-pack/platform/test/functional/apps/monitoring/cluster/list_mb.js diff --git a/x-pack/test/functional/apps/monitoring/cluster/overview.js b/x-pack/platform/test/functional/apps/monitoring/cluster/overview.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/cluster/overview.js rename to x-pack/platform/test/functional/apps/monitoring/cluster/overview.js diff --git a/x-pack/test/functional/apps/apm/config.ts b/x-pack/platform/test/functional/apps/monitoring/config.ts similarity index 95% rename from x-pack/test/functional/apps/apm/config.ts rename to x-pack/platform/test/functional/apps/monitoring/config.ts index d0d07ff200281..91f4b6ff8ebc9 100644 --- a/x-pack/test/functional/apps/apm/config.ts +++ b/x-pack/platform/test/functional/apps/monitoring/config.ts @@ -8,7 +8,7 @@ import { FtrConfigProviderContext } from '@kbn/test'; export default async function ({ readConfigFile }: FtrConfigProviderContext) { - const functionalConfig = await readConfigFile(require.resolve('../../config.base.js')); + const functionalConfig = await readConfigFile(require.resolve('../../config.base.ts')); return { ...functionalConfig.getAll(), diff --git a/x-pack/test/functional/apps/monitoring/elasticsearch/index_detail.js b/x-pack/platform/test/functional/apps/monitoring/elasticsearch/index_detail.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/elasticsearch/index_detail.js rename to x-pack/platform/test/functional/apps/monitoring/elasticsearch/index_detail.js diff --git a/x-pack/test/functional/apps/monitoring/elasticsearch/index_detail_mb.js b/x-pack/platform/test/functional/apps/monitoring/elasticsearch/index_detail_mb.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/elasticsearch/index_detail_mb.js rename to x-pack/platform/test/functional/apps/monitoring/elasticsearch/index_detail_mb.js diff --git a/x-pack/test/functional/apps/monitoring/elasticsearch/indices.js b/x-pack/platform/test/functional/apps/monitoring/elasticsearch/indices.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/elasticsearch/indices.js rename to x-pack/platform/test/functional/apps/monitoring/elasticsearch/indices.js diff --git a/x-pack/test/functional/apps/monitoring/elasticsearch/indices_mb.js b/x-pack/platform/test/functional/apps/monitoring/elasticsearch/indices_mb.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/elasticsearch/indices_mb.js rename to x-pack/platform/test/functional/apps/monitoring/elasticsearch/indices_mb.js diff --git a/x-pack/test/functional/apps/monitoring/elasticsearch/node_detail.js b/x-pack/platform/test/functional/apps/monitoring/elasticsearch/node_detail.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/elasticsearch/node_detail.js rename to x-pack/platform/test/functional/apps/monitoring/elasticsearch/node_detail.js diff --git a/x-pack/test/functional/apps/monitoring/elasticsearch/node_detail_mb.js b/x-pack/platform/test/functional/apps/monitoring/elasticsearch/node_detail_mb.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/elasticsearch/node_detail_mb.js rename to x-pack/platform/test/functional/apps/monitoring/elasticsearch/node_detail_mb.js diff --git a/x-pack/test/functional/apps/monitoring/elasticsearch/nodes.js b/x-pack/platform/test/functional/apps/monitoring/elasticsearch/nodes.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/elasticsearch/nodes.js rename to x-pack/platform/test/functional/apps/monitoring/elasticsearch/nodes.js diff --git a/x-pack/test/functional/apps/monitoring/elasticsearch/nodes_mb.js b/x-pack/platform/test/functional/apps/monitoring/elasticsearch/nodes_mb.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/elasticsearch/nodes_mb.js rename to x-pack/platform/test/functional/apps/monitoring/elasticsearch/nodes_mb.js diff --git a/x-pack/test/functional/apps/monitoring/elasticsearch/overview.js b/x-pack/platform/test/functional/apps/monitoring/elasticsearch/overview.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/elasticsearch/overview.js rename to x-pack/platform/test/functional/apps/monitoring/elasticsearch/overview.js diff --git a/x-pack/test/functional/apps/monitoring/elasticsearch/overview_mb.js b/x-pack/platform/test/functional/apps/monitoring/elasticsearch/overview_mb.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/elasticsearch/overview_mb.js rename to x-pack/platform/test/functional/apps/monitoring/elasticsearch/overview_mb.js diff --git a/x-pack/test/functional/apps/monitoring/elasticsearch/shards.js b/x-pack/platform/test/functional/apps/monitoring/elasticsearch/shards.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/elasticsearch/shards.js rename to x-pack/platform/test/functional/apps/monitoring/elasticsearch/shards.js diff --git a/x-pack/test/functional/apps/monitoring/enable_monitoring/index.js b/x-pack/platform/test/functional/apps/monitoring/enable_monitoring/index.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/enable_monitoring/index.js rename to x-pack/platform/test/functional/apps/monitoring/enable_monitoring/index.js diff --git a/x-pack/test/functional/apps/monitoring/enterprise_search/cluster.js b/x-pack/platform/test/functional/apps/monitoring/enterprise_search/cluster.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/enterprise_search/cluster.js rename to x-pack/platform/test/functional/apps/monitoring/enterprise_search/cluster.js diff --git a/x-pack/test/functional/apps/monitoring/enterprise_search/overview.js b/x-pack/platform/test/functional/apps/monitoring/enterprise_search/overview.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/enterprise_search/overview.js rename to x-pack/platform/test/functional/apps/monitoring/enterprise_search/overview.js diff --git a/x-pack/test/functional/apps/monitoring/feature_controls/index.ts b/x-pack/platform/test/functional/apps/monitoring/feature_controls/index.ts similarity index 100% rename from x-pack/test/functional/apps/monitoring/feature_controls/index.ts rename to x-pack/platform/test/functional/apps/monitoring/feature_controls/index.ts diff --git a/x-pack/test/functional/apps/monitoring/feature_controls/monitoring_security.ts b/x-pack/platform/test/functional/apps/monitoring/feature_controls/monitoring_security.ts similarity index 100% rename from x-pack/test/functional/apps/monitoring/feature_controls/monitoring_security.ts rename to x-pack/platform/test/functional/apps/monitoring/feature_controls/monitoring_security.ts diff --git a/x-pack/test/functional/apps/monitoring/feature_controls/monitoring_spaces.ts b/x-pack/platform/test/functional/apps/monitoring/feature_controls/monitoring_spaces.ts similarity index 100% rename from x-pack/test/functional/apps/monitoring/feature_controls/monitoring_spaces.ts rename to x-pack/platform/test/functional/apps/monitoring/feature_controls/monitoring_spaces.ts diff --git a/x-pack/test/functional/apps/monitoring/index.js b/x-pack/platform/test/functional/apps/monitoring/index.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/index.js rename to x-pack/platform/test/functional/apps/monitoring/index.js diff --git a/x-pack/test/functional/apps/monitoring/kibana/instance.js b/x-pack/platform/test/functional/apps/monitoring/kibana/instance.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/kibana/instance.js rename to x-pack/platform/test/functional/apps/monitoring/kibana/instance.js diff --git a/x-pack/test/functional/apps/monitoring/kibana/instance_mb.js b/x-pack/platform/test/functional/apps/monitoring/kibana/instance_mb.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/kibana/instance_mb.js rename to x-pack/platform/test/functional/apps/monitoring/kibana/instance_mb.js diff --git a/x-pack/test/functional/apps/monitoring/kibana/instances.js b/x-pack/platform/test/functional/apps/monitoring/kibana/instances.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/kibana/instances.js rename to x-pack/platform/test/functional/apps/monitoring/kibana/instances.js diff --git a/x-pack/test/functional/apps/monitoring/kibana/instances_mb.js b/x-pack/platform/test/functional/apps/monitoring/kibana/instances_mb.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/kibana/instances_mb.js rename to x-pack/platform/test/functional/apps/monitoring/kibana/instances_mb.js diff --git a/x-pack/test/functional/apps/monitoring/kibana/overview.js b/x-pack/platform/test/functional/apps/monitoring/kibana/overview.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/kibana/overview.js rename to x-pack/platform/test/functional/apps/monitoring/kibana/overview.js diff --git a/x-pack/test/functional/apps/monitoring/kibana/overview_mb.js b/x-pack/platform/test/functional/apps/monitoring/kibana/overview_mb.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/kibana/overview_mb.js rename to x-pack/platform/test/functional/apps/monitoring/kibana/overview_mb.js diff --git a/x-pack/test/functional/apps/monitoring/logstash/node_detail.js b/x-pack/platform/test/functional/apps/monitoring/logstash/node_detail.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/logstash/node_detail.js rename to x-pack/platform/test/functional/apps/monitoring/logstash/node_detail.js diff --git a/x-pack/test/functional/apps/monitoring/logstash/node_detail_mb.js b/x-pack/platform/test/functional/apps/monitoring/logstash/node_detail_mb.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/logstash/node_detail_mb.js rename to x-pack/platform/test/functional/apps/monitoring/logstash/node_detail_mb.js diff --git a/x-pack/test/functional/apps/monitoring/logstash/nodes.js b/x-pack/platform/test/functional/apps/monitoring/logstash/nodes.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/logstash/nodes.js rename to x-pack/platform/test/functional/apps/monitoring/logstash/nodes.js diff --git a/x-pack/test/functional/apps/monitoring/logstash/nodes_mb.js b/x-pack/platform/test/functional/apps/monitoring/logstash/nodes_mb.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/logstash/nodes_mb.js rename to x-pack/platform/test/functional/apps/monitoring/logstash/nodes_mb.js diff --git a/x-pack/test/functional/apps/monitoring/logstash/overview.js b/x-pack/platform/test/functional/apps/monitoring/logstash/overview.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/logstash/overview.js rename to x-pack/platform/test/functional/apps/monitoring/logstash/overview.js diff --git a/x-pack/test/functional/apps/monitoring/logstash/overview_mb.js b/x-pack/platform/test/functional/apps/monitoring/logstash/overview_mb.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/logstash/overview_mb.js rename to x-pack/platform/test/functional/apps/monitoring/logstash/overview_mb.js diff --git a/x-pack/test/functional/apps/monitoring/logstash/pipeline_viewer.js b/x-pack/platform/test/functional/apps/monitoring/logstash/pipeline_viewer.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/logstash/pipeline_viewer.js rename to x-pack/platform/test/functional/apps/monitoring/logstash/pipeline_viewer.js diff --git a/x-pack/test/functional/apps/monitoring/logstash/pipeline_viewer_mb.js b/x-pack/platform/test/functional/apps/monitoring/logstash/pipeline_viewer_mb.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/logstash/pipeline_viewer_mb.js rename to x-pack/platform/test/functional/apps/monitoring/logstash/pipeline_viewer_mb.js diff --git a/x-pack/test/functional/apps/monitoring/logstash/pipelines.js b/x-pack/platform/test/functional/apps/monitoring/logstash/pipelines.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/logstash/pipelines.js rename to x-pack/platform/test/functional/apps/monitoring/logstash/pipelines.js diff --git a/x-pack/test/functional/apps/monitoring/logstash/pipelines_mb.js b/x-pack/platform/test/functional/apps/monitoring/logstash/pipelines_mb.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/logstash/pipelines_mb.js rename to x-pack/platform/test/functional/apps/monitoring/logstash/pipelines_mb.js diff --git a/x-pack/test/functional/apps/monitoring/setup/metricbeat_migration.js b/x-pack/platform/test/functional/apps/monitoring/setup/metricbeat_migration.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/setup/metricbeat_migration.js rename to x-pack/platform/test/functional/apps/monitoring/setup/metricbeat_migration.js diff --git a/x-pack/test/functional/apps/monitoring/setup/metricbeat_migration_mb.js b/x-pack/platform/test/functional/apps/monitoring/setup/metricbeat_migration_mb.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/setup/metricbeat_migration_mb.js rename to x-pack/platform/test/functional/apps/monitoring/setup/metricbeat_migration_mb.js diff --git a/x-pack/test/functional/apps/monitoring/time_filter.js b/x-pack/platform/test/functional/apps/monitoring/time_filter.js similarity index 100% rename from x-pack/test/functional/apps/monitoring/time_filter.js rename to x-pack/platform/test/functional/apps/monitoring/time_filter.js diff --git a/x-pack/platform/test/functional/services/index.ts b/x-pack/platform/test/functional/services/index.ts index 36a418dc8a41a..9e12b2493b479 100644 --- a/x-pack/platform/test/functional/services/index.ts +++ b/x-pack/platform/test/functional/services/index.ts @@ -5,26 +5,59 @@ * 2.0. */ -import { services as kibanaFunctionalServices } from '@kbn/test-suites-src/functional/services'; import { services as kibanaApiIntegrationServices } from '@kbn/test-suites-src/api_integration/services'; +import { services as kibanaFunctionalServices } from '@kbn/test-suites-src/functional/services'; import { services as kibanaXPackApiIntegrationServices } from '../../api_integration/services'; -import { UserMenuProvider } from './user_menu'; +import { ReportingFunctionalProvider } from '../../reporting_functional/services'; import { AceEditorProvider } from './ace_editor'; -import { SampleDataServiceProvider } from './sample_data'; -import { GrokDebuggerProvider } from './grok_debugger'; -import { SearchSessionsService } from './search_sessions'; -import { CasesServiceProvider } from './cases'; import { ActionsServiceProvider } from './actions'; import { AiopsProvider } from './aiops'; -import { RulesServiceProvider } from './rules'; import { CanvasElementProvider } from './canvas_element'; +import { CasesServiceProvider } from './cases'; +import { DataStreamProvider } from './data_stream'; +import { GrokDebuggerProvider } from './grok_debugger'; import { MachineLearningProvider } from './ml'; -import { TransformProvider } from './transform'; -import { ReportingFunctionalProvider } from '../../reporting_functional/services'; -import { RandomProvider } from './random'; -import { PipelineListProvider } from './pipeline_list'; import { PipelineEditorProvider } from './pipeline_editor'; -import { DataStreamProvider } from './data_stream'; +import { PipelineListProvider } from './pipeline_list'; +import { RandomProvider } from './random'; +import { RulesServiceProvider } from './rules'; +import { SampleDataServiceProvider } from './sample_data'; +import { SearchSessionsService } from './search_sessions'; +import { TransformProvider } from './transform'; +import { UserMenuProvider } from './user_menu'; + +import { + MonitoringAlertsProvider, + MonitoringBeatDetailProvider, + MonitoringBeatsListingProvider, + MonitoringBeatsOverviewProvider, + MonitoringBeatsSummaryStatusProvider, + MonitoringClusterAlertsProvider, + MonitoringClusterListProvider, + MonitoringClusterOverviewProvider, + MonitoringElasticsearchIndexDetailProvider, + MonitoringElasticsearchIndicesProvider, + MonitoringElasticsearchNodeDetailProvider, + MonitoringElasticsearchNodesProvider, + MonitoringElasticsearchOverviewProvider, + MonitoringElasticsearchShardsProvider, + MonitoringElasticsearchSummaryStatusProvider, + MonitoringEnterpriseSearchOverviewProvider, + MonitoringEnterpriseSearchSummaryStatusProvider, + MonitoringKibanaInstanceProvider, + MonitoringKibanaInstancesProvider, + MonitoringKibanaOverviewProvider, + MonitoringKibanaSummaryStatusProvider, + MonitoringLogstashNodeDetailProvider, + MonitoringLogstashNodesProvider, + MonitoringLogstashOverviewProvider, + MonitoringLogstashPipelinesProvider, + MonitoringLogstashPipelineViewerProvider, + MonitoringLogstashSummaryStatusProvider, + MonitoringNoDataProvider, + MonitoringSetupModeProvider, + // @ts-ignore not ts yet +} from './monitoring'; // define the name and providers for services that should be // available to your tests. If you don't specify anything here @@ -54,4 +87,33 @@ export const services = { pipelineList: PipelineListProvider, pipelineEditor: PipelineEditorProvider, dataStreams: DataStreamProvider, + monitoringNoData: MonitoringNoDataProvider, + monitoringClusterList: MonitoringClusterListProvider, + monitoringClusterOverview: MonitoringClusterOverviewProvider, + monitoringClusterAlerts: MonitoringClusterAlertsProvider, + monitoringElasticsearchSummaryStatus: MonitoringElasticsearchSummaryStatusProvider, + monitoringElasticsearchOverview: MonitoringElasticsearchOverviewProvider, + monitoringElasticsearchNodes: MonitoringElasticsearchNodesProvider, + monitoringElasticsearchNodeDetail: MonitoringElasticsearchNodeDetailProvider, + monitoringElasticsearchIndices: MonitoringElasticsearchIndicesProvider, + monitoringElasticsearchIndexDetail: MonitoringElasticsearchIndexDetailProvider, + monitoringElasticsearchShards: MonitoringElasticsearchShardsProvider, + monitoringBeatsOverview: MonitoringBeatsOverviewProvider, + monitoringBeatsListing: MonitoringBeatsListingProvider, + monitoringBeatDetail: MonitoringBeatDetailProvider, + monitoringBeatsSummaryStatus: MonitoringBeatsSummaryStatusProvider, + monitoringLogstashOverview: MonitoringLogstashOverviewProvider, + monitoringLogstashNodes: MonitoringLogstashNodesProvider, + monitoringLogstashNodeDetail: MonitoringLogstashNodeDetailProvider, + monitoringLogstashPipelines: MonitoringLogstashPipelinesProvider, + monitoringLogstashPipelineViewer: MonitoringLogstashPipelineViewerProvider, + monitoringLogstashSummaryStatus: MonitoringLogstashSummaryStatusProvider, + monitoringKibanaOverview: MonitoringKibanaOverviewProvider, + monitoringKibanaInstances: MonitoringKibanaInstancesProvider, + monitoringKibanaInstance: MonitoringKibanaInstanceProvider, + monitoringKibanaSummaryStatus: MonitoringKibanaSummaryStatusProvider, + monitoringEnterpriseSearchOverview: MonitoringEnterpriseSearchOverviewProvider, + monitoringEnterpriseSearchSummaryStatus: MonitoringEnterpriseSearchSummaryStatusProvider, + monitoringSetupMode: MonitoringSetupModeProvider, + monitoringAlerts: MonitoringAlertsProvider, }; diff --git a/x-pack/test/functional/services/monitoring/alerts.js b/x-pack/platform/test/functional/services/monitoring/alerts.js similarity index 100% rename from x-pack/test/functional/services/monitoring/alerts.js rename to x-pack/platform/test/functional/services/monitoring/alerts.js diff --git a/x-pack/test/functional/services/monitoring/beat_detail.js b/x-pack/platform/test/functional/services/monitoring/beat_detail.js similarity index 100% rename from x-pack/test/functional/services/monitoring/beat_detail.js rename to x-pack/platform/test/functional/services/monitoring/beat_detail.js diff --git a/x-pack/test/functional/services/monitoring/beats_listing.js b/x-pack/platform/test/functional/services/monitoring/beats_listing.js similarity index 100% rename from x-pack/test/functional/services/monitoring/beats_listing.js rename to x-pack/platform/test/functional/services/monitoring/beats_listing.js diff --git a/x-pack/test/functional/services/monitoring/beats_overview.js b/x-pack/platform/test/functional/services/monitoring/beats_overview.js similarity index 100% rename from x-pack/test/functional/services/monitoring/beats_overview.js rename to x-pack/platform/test/functional/services/monitoring/beats_overview.js diff --git a/x-pack/test/functional/services/monitoring/beats_summary_status.js b/x-pack/platform/test/functional/services/monitoring/beats_summary_status.js similarity index 100% rename from x-pack/test/functional/services/monitoring/beats_summary_status.js rename to x-pack/platform/test/functional/services/monitoring/beats_summary_status.js diff --git a/x-pack/test/functional/services/monitoring/cluster_alerts.js b/x-pack/platform/test/functional/services/monitoring/cluster_alerts.js similarity index 100% rename from x-pack/test/functional/services/monitoring/cluster_alerts.js rename to x-pack/platform/test/functional/services/monitoring/cluster_alerts.js diff --git a/x-pack/test/functional/services/monitoring/cluster_list.js b/x-pack/platform/test/functional/services/monitoring/cluster_list.js similarity index 100% rename from x-pack/test/functional/services/monitoring/cluster_list.js rename to x-pack/platform/test/functional/services/monitoring/cluster_list.js diff --git a/x-pack/test/functional/services/monitoring/cluster_overview.js b/x-pack/platform/test/functional/services/monitoring/cluster_overview.js similarity index 100% rename from x-pack/test/functional/services/monitoring/cluster_overview.js rename to x-pack/platform/test/functional/services/monitoring/cluster_overview.js diff --git a/x-pack/test/functional/services/monitoring/elasticsearch_index_detail.js b/x-pack/platform/test/functional/services/monitoring/elasticsearch_index_detail.js similarity index 100% rename from x-pack/test/functional/services/monitoring/elasticsearch_index_detail.js rename to x-pack/platform/test/functional/services/monitoring/elasticsearch_index_detail.js diff --git a/x-pack/test/functional/services/monitoring/elasticsearch_indices.js b/x-pack/platform/test/functional/services/monitoring/elasticsearch_indices.js similarity index 100% rename from x-pack/test/functional/services/monitoring/elasticsearch_indices.js rename to x-pack/platform/test/functional/services/monitoring/elasticsearch_indices.js diff --git a/x-pack/test/functional/services/monitoring/elasticsearch_node_detail.js b/x-pack/platform/test/functional/services/monitoring/elasticsearch_node_detail.js similarity index 100% rename from x-pack/test/functional/services/monitoring/elasticsearch_node_detail.js rename to x-pack/platform/test/functional/services/monitoring/elasticsearch_node_detail.js diff --git a/x-pack/test/functional/services/monitoring/elasticsearch_nodes.js b/x-pack/platform/test/functional/services/monitoring/elasticsearch_nodes.js similarity index 100% rename from x-pack/test/functional/services/monitoring/elasticsearch_nodes.js rename to x-pack/platform/test/functional/services/monitoring/elasticsearch_nodes.js diff --git a/x-pack/test/functional/services/monitoring/elasticsearch_overview.js b/x-pack/platform/test/functional/services/monitoring/elasticsearch_overview.js similarity index 100% rename from x-pack/test/functional/services/monitoring/elasticsearch_overview.js rename to x-pack/platform/test/functional/services/monitoring/elasticsearch_overview.js diff --git a/x-pack/test/functional/services/monitoring/elasticsearch_shards.js b/x-pack/platform/test/functional/services/monitoring/elasticsearch_shards.js similarity index 100% rename from x-pack/test/functional/services/monitoring/elasticsearch_shards.js rename to x-pack/platform/test/functional/services/monitoring/elasticsearch_shards.js diff --git a/x-pack/test/functional/services/monitoring/elasticsearch_summary_status.js b/x-pack/platform/test/functional/services/monitoring/elasticsearch_summary_status.js similarity index 100% rename from x-pack/test/functional/services/monitoring/elasticsearch_summary_status.js rename to x-pack/platform/test/functional/services/monitoring/elasticsearch_summary_status.js diff --git a/x-pack/test/functional/services/monitoring/enterprise_search_overview.js b/x-pack/platform/test/functional/services/monitoring/enterprise_search_overview.js similarity index 100% rename from x-pack/test/functional/services/monitoring/enterprise_search_overview.js rename to x-pack/platform/test/functional/services/monitoring/enterprise_search_overview.js diff --git a/x-pack/test/functional/services/monitoring/enterprise_search_summary_status.js b/x-pack/platform/test/functional/services/monitoring/enterprise_search_summary_status.js similarity index 100% rename from x-pack/test/functional/services/monitoring/enterprise_search_summary_status.js rename to x-pack/platform/test/functional/services/monitoring/enterprise_search_summary_status.js diff --git a/x-pack/test/functional/services/monitoring/index.js b/x-pack/platform/test/functional/services/monitoring/index.js similarity index 100% rename from x-pack/test/functional/services/monitoring/index.js rename to x-pack/platform/test/functional/services/monitoring/index.js diff --git a/x-pack/test/functional/services/monitoring/kibana_instance.js b/x-pack/platform/test/functional/services/monitoring/kibana_instance.js similarity index 100% rename from x-pack/test/functional/services/monitoring/kibana_instance.js rename to x-pack/platform/test/functional/services/monitoring/kibana_instance.js diff --git a/x-pack/test/functional/services/monitoring/kibana_instances.js b/x-pack/platform/test/functional/services/monitoring/kibana_instances.js similarity index 100% rename from x-pack/test/functional/services/monitoring/kibana_instances.js rename to x-pack/platform/test/functional/services/monitoring/kibana_instances.js diff --git a/x-pack/test/functional/services/monitoring/kibana_overview.js b/x-pack/platform/test/functional/services/monitoring/kibana_overview.js similarity index 100% rename from x-pack/test/functional/services/monitoring/kibana_overview.js rename to x-pack/platform/test/functional/services/monitoring/kibana_overview.js diff --git a/x-pack/test/functional/services/monitoring/kibana_summary_status.js b/x-pack/platform/test/functional/services/monitoring/kibana_summary_status.js similarity index 100% rename from x-pack/test/functional/services/monitoring/kibana_summary_status.js rename to x-pack/platform/test/functional/services/monitoring/kibana_summary_status.js diff --git a/x-pack/test/functional/services/monitoring/logstash_node_detail.js b/x-pack/platform/test/functional/services/monitoring/logstash_node_detail.js similarity index 100% rename from x-pack/test/functional/services/monitoring/logstash_node_detail.js rename to x-pack/platform/test/functional/services/monitoring/logstash_node_detail.js diff --git a/x-pack/test/functional/services/monitoring/logstash_nodes.js b/x-pack/platform/test/functional/services/monitoring/logstash_nodes.js similarity index 100% rename from x-pack/test/functional/services/monitoring/logstash_nodes.js rename to x-pack/platform/test/functional/services/monitoring/logstash_nodes.js diff --git a/x-pack/test/functional/services/monitoring/logstash_overview.js b/x-pack/platform/test/functional/services/monitoring/logstash_overview.js similarity index 100% rename from x-pack/test/functional/services/monitoring/logstash_overview.js rename to x-pack/platform/test/functional/services/monitoring/logstash_overview.js diff --git a/x-pack/test/functional/services/monitoring/logstash_pipeline_viewer.js b/x-pack/platform/test/functional/services/monitoring/logstash_pipeline_viewer.js similarity index 100% rename from x-pack/test/functional/services/monitoring/logstash_pipeline_viewer.js rename to x-pack/platform/test/functional/services/monitoring/logstash_pipeline_viewer.js diff --git a/x-pack/test/functional/services/monitoring/logstash_pipelines.js b/x-pack/platform/test/functional/services/monitoring/logstash_pipelines.js similarity index 100% rename from x-pack/test/functional/services/monitoring/logstash_pipelines.js rename to x-pack/platform/test/functional/services/monitoring/logstash_pipelines.js diff --git a/x-pack/test/functional/services/monitoring/logstash_summary_status.js b/x-pack/platform/test/functional/services/monitoring/logstash_summary_status.js similarity index 100% rename from x-pack/test/functional/services/monitoring/logstash_summary_status.js rename to x-pack/platform/test/functional/services/monitoring/logstash_summary_status.js diff --git a/x-pack/test/functional/services/monitoring/no_data.js b/x-pack/platform/test/functional/services/monitoring/no_data.js similarity index 100% rename from x-pack/test/functional/services/monitoring/no_data.js rename to x-pack/platform/test/functional/services/monitoring/no_data.js diff --git a/x-pack/test/functional/services/monitoring/setup_mode.js b/x-pack/platform/test/functional/services/monitoring/setup_mode.js similarity index 100% rename from x-pack/test/functional/services/monitoring/setup_mode.js rename to x-pack/platform/test/functional/services/monitoring/setup_mode.js diff --git a/x-pack/solutions/observability/plugins/apm/dev_docs/testing.md b/x-pack/solutions/observability/plugins/apm/dev_docs/testing.md index 87c8950a09820..e326be95b8e75 100644 --- a/x-pack/solutions/observability/plugins/apm/dev_docs/testing.md +++ b/x-pack/solutions/observability/plugins/apm/dev_docs/testing.md @@ -175,13 +175,13 @@ Accessibility tests are added on the e2e with `checkA11y()`, they will run toget ```sh # Start server -node scripts/functional_tests_server --config x-pack/test/functional/apps/apm/config.ts +node scripts/functional_tests_server --config x-pack/solutions/observability/test/functional/apps/apm/config.ts # Run tests -node scripts/functional_test_runner --config x-pack/test/functional/apps/apm/config.ts --grep='APM specs' +node scripts/functional_test_runner --config x-pack/solutions/observability/test/functional/apps/apm/config.ts --grep='APM specs' ``` -APM tests are located in `x-pack/test/functional/apps/apm`. +APM tests are located in `x-pack/solutions/observability/test/functional/apps/apm`. For debugging access Elasticsearch on http://localhost:9220` (elastic/changeme) diff --git a/x-pack/solutions/observability/plugins/apm/scripts/test/README.md b/x-pack/solutions/observability/plugins/apm/scripts/test/README.md diff --git a/x-pack/test/functional/apps/monitoring/config.ts b/x-pack/solutions/observability/test/functional/apps/apm/config.ts similarity index 95% rename from x-pack/test/functional/apps/monitoring/config.ts rename to x-pack/solutions/observability/test/functional/apps/apm/config.ts index d0d07ff200281..91f4b6ff8ebc9 100644 --- a/x-pack/test/functional/apps/monitoring/config.ts +++ b/x-pack/solutions/observability/test/functional/apps/apm/config.ts @@ -8,7 +8,7 @@ import { FtrConfigProviderContext } from '@kbn/test'; export default async function ({ readConfigFile }: FtrConfigProviderContext) { - const functionalConfig = await readConfigFile(require.resolve('../../config.base.js')); + const functionalConfig = await readConfigFile(require.resolve('../../config.base.ts')); return { ...functionalConfig.getAll(), diff --git a/x-pack/test/functional/apps/apm/correlations/failed_transaction_correlations.ts b/x-pack/solutions/observability/test/functional/apps/apm/correlations/failed_transaction_correlations.ts similarity index 100% rename from x-pack/test/functional/apps/apm/correlations/failed_transaction_correlations.ts rename to x-pack/solutions/observability/test/functional/apps/apm/correlations/failed_transaction_correlations.ts diff --git a/x-pack/test/functional/apps/apm/correlations/index.ts b/x-pack/solutions/observability/test/functional/apps/apm/correlations/index.ts similarity index 100% rename from x-pack/test/functional/apps/apm/correlations/index.ts rename to x-pack/solutions/observability/test/functional/apps/apm/correlations/index.ts diff --git a/x-pack/test/functional/apps/apm/correlations/latency_correlations.ts b/x-pack/solutions/observability/test/functional/apps/apm/correlations/latency_correlations.ts similarity index 100% rename from x-pack/test/functional/apps/apm/correlations/latency_correlations.ts rename to x-pack/solutions/observability/test/functional/apps/apm/correlations/latency_correlations.ts diff --git a/x-pack/test/functional/apps/apm/feature_controls/apm_security.ts b/x-pack/solutions/observability/test/functional/apps/apm/feature_controls/apm_security.ts similarity index 100% rename from x-pack/test/functional/apps/apm/feature_controls/apm_security.ts rename to x-pack/solutions/observability/test/functional/apps/apm/feature_controls/apm_security.ts diff --git a/x-pack/test/functional/apps/apm/feature_controls/apm_spaces.ts b/x-pack/solutions/observability/test/functional/apps/apm/feature_controls/apm_spaces.ts similarity index 100% rename from x-pack/test/functional/apps/apm/feature_controls/apm_spaces.ts rename to x-pack/solutions/observability/test/functional/apps/apm/feature_controls/apm_spaces.ts diff --git a/x-pack/test/functional/apps/apm/feature_controls/index.ts b/x-pack/solutions/observability/test/functional/apps/apm/feature_controls/index.ts similarity index 100% rename from x-pack/test/functional/apps/apm/feature_controls/index.ts rename to x-pack/solutions/observability/test/functional/apps/apm/feature_controls/index.ts diff --git a/x-pack/test/functional/apps/apm/index.ts b/x-pack/solutions/observability/test/functional/apps/apm/index.ts similarity index 100% rename from x-pack/test/functional/apps/apm/index.ts rename to x-pack/solutions/observability/test/functional/apps/apm/index.ts diff --git a/x-pack/test/functional/apps/dataset_quality/config.ts b/x-pack/solutions/observability/test/functional/apps/dataset_quality/config.ts similarity index 98% rename from x-pack/test/functional/apps/dataset_quality/config.ts rename to x-pack/solutions/observability/test/functional/apps/dataset_quality/config.ts index 2293af3face42..2edcba509d2fa 100644 --- a/x-pack/test/functional/apps/dataset_quality/config.ts +++ b/x-pack/solutions/observability/test/functional/apps/dataset_quality/config.ts @@ -36,7 +36,7 @@ interface DatasetQualityConfig { export default async function createTestConfig({ readConfigFile, }: FtrConfigProviderContext): Promise { - const functionalConfig = await readConfigFile(require.resolve('../../config.base.js')); + const functionalConfig = await readConfigFile(require.resolve('../../config.base.ts')); const services = functionalConfig.get('services'); const pageObjects = functionalConfig.get('pageObjects'); diff --git a/x-pack/test/functional/apps/dataset_quality/custom_mappings/custom_integration_mappings.ts b/x-pack/solutions/observability/test/functional/apps/dataset_quality/custom_mappings/custom_integration_mappings.ts similarity index 100% rename from x-pack/test/functional/apps/dataset_quality/custom_mappings/custom_integration_mappings.ts rename to x-pack/solutions/observability/test/functional/apps/dataset_quality/custom_mappings/custom_integration_mappings.ts diff --git a/x-pack/test/functional/apps/dataset_quality/custom_mappings/custom_synth_mappings.ts b/x-pack/solutions/observability/test/functional/apps/dataset_quality/custom_mappings/custom_synth_mappings.ts similarity index 100% rename from x-pack/test/functional/apps/dataset_quality/custom_mappings/custom_synth_mappings.ts rename to x-pack/solutions/observability/test/functional/apps/dataset_quality/custom_mappings/custom_synth_mappings.ts diff --git a/x-pack/test/functional/apps/dataset_quality/data/index.ts b/x-pack/solutions/observability/test/functional/apps/dataset_quality/data/index.ts similarity index 100% rename from x-pack/test/functional/apps/dataset_quality/data/index.ts rename to x-pack/solutions/observability/test/functional/apps/dataset_quality/data/index.ts diff --git a/x-pack/test/functional/apps/dataset_quality/data/logs_data.ts b/x-pack/solutions/observability/test/functional/apps/dataset_quality/data/logs_data.ts similarity index 100% rename from x-pack/test/functional/apps/dataset_quality/data/logs_data.ts rename to x-pack/solutions/observability/test/functional/apps/dataset_quality/data/logs_data.ts diff --git a/x-pack/test/functional/apps/dataset_quality/dataset_quality_alerting.ts b/x-pack/solutions/observability/test/functional/apps/dataset_quality/dataset_quality_alerting.ts similarity index 100% rename from x-pack/test/functional/apps/dataset_quality/dataset_quality_alerting.ts rename to x-pack/solutions/observability/test/functional/apps/dataset_quality/dataset_quality_alerting.ts diff --git a/x-pack/test/functional/apps/dataset_quality/dataset_quality_details.ts b/x-pack/solutions/observability/test/functional/apps/dataset_quality/dataset_quality_details.ts similarity index 100% rename from x-pack/test/functional/apps/dataset_quality/dataset_quality_details.ts rename to x-pack/solutions/observability/test/functional/apps/dataset_quality/dataset_quality_details.ts diff --git a/x-pack/test/functional/apps/dataset_quality/dataset_quality_privileges.ts b/x-pack/solutions/observability/test/functional/apps/dataset_quality/dataset_quality_privileges.ts similarity index 100% rename from x-pack/test/functional/apps/dataset_quality/dataset_quality_privileges.ts rename to x-pack/solutions/observability/test/functional/apps/dataset_quality/dataset_quality_privileges.ts diff --git a/x-pack/test/functional/apps/dataset_quality/dataset_quality_summary.ts b/x-pack/solutions/observability/test/functional/apps/dataset_quality/dataset_quality_summary.ts similarity index 100% rename from x-pack/test/functional/apps/dataset_quality/dataset_quality_summary.ts rename to x-pack/solutions/observability/test/functional/apps/dataset_quality/dataset_quality_summary.ts diff --git a/x-pack/test/functional/apps/dataset_quality/dataset_quality_table.ts b/x-pack/solutions/observability/test/functional/apps/dataset_quality/dataset_quality_table.ts similarity index 100% rename from x-pack/test/functional/apps/dataset_quality/dataset_quality_table.ts rename to x-pack/solutions/observability/test/functional/apps/dataset_quality/dataset_quality_table.ts diff --git a/x-pack/test/functional/apps/dataset_quality/dataset_quality_table_filters.ts b/x-pack/solutions/observability/test/functional/apps/dataset_quality/dataset_quality_table_filters.ts similarity index 100% rename from x-pack/test/functional/apps/dataset_quality/dataset_quality_table_filters.ts rename to x-pack/solutions/observability/test/functional/apps/dataset_quality/dataset_quality_table_filters.ts diff --git a/x-pack/test/functional/apps/dataset_quality/degraded_field_flyout.ts b/x-pack/solutions/observability/test/functional/apps/dataset_quality/degraded_field_flyout.ts similarity index 100% rename from x-pack/test/functional/apps/dataset_quality/degraded_field_flyout.ts rename to x-pack/solutions/observability/test/functional/apps/dataset_quality/degraded_field_flyout.ts diff --git a/x-pack/test/functional/apps/dataset_quality/failed_docs_flyout.ts b/x-pack/solutions/observability/test/functional/apps/dataset_quality/failed_docs_flyout.ts similarity index 100% rename from x-pack/test/functional/apps/dataset_quality/failed_docs_flyout.ts rename to x-pack/solutions/observability/test/functional/apps/dataset_quality/failed_docs_flyout.ts diff --git a/x-pack/test/functional/apps/dataset_quality/home.ts b/x-pack/solutions/observability/test/functional/apps/dataset_quality/home.ts similarity index 100% rename from x-pack/test/functional/apps/dataset_quality/home.ts rename to x-pack/solutions/observability/test/functional/apps/dataset_quality/home.ts diff --git a/x-pack/test/functional/apps/dataset_quality/index.ts b/x-pack/solutions/observability/test/functional/apps/dataset_quality/index.ts similarity index 100% rename from x-pack/test/functional/apps/dataset_quality/index.ts rename to x-pack/solutions/observability/test/functional/apps/dataset_quality/index.ts diff --git a/x-pack/test/functional/apps/dataset_quality/roles/role_management.ts b/x-pack/solutions/observability/test/functional/apps/dataset_quality/roles/role_management.ts similarity index 100% rename from x-pack/test/functional/apps/dataset_quality/roles/role_management.ts rename to x-pack/solutions/observability/test/functional/apps/dataset_quality/roles/role_management.ts diff --git a/x-pack/solutions/observability/test/functional/page_objects/dataset_quality.ts b/x-pack/solutions/observability/test/functional/page_objects/dataset_quality.ts new file mode 100644 index 0000000000000..0d6d4040806ff --- /dev/null +++ b/x-pack/solutions/observability/test/functional/page_objects/dataset_quality.ts @@ -0,0 +1,694 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { IndicesIndexSettings } from '@elastic/elasticsearch/lib/api/types'; +import { + DATA_QUALITY_URL_STATE_KEY, + datasetQualityDetailsUrlSchemaV1, + datasetQualityUrlSchemaV1, + datasetQualityDetailsUrlSchemaV2, +} from '@kbn/data-quality-plugin/common'; +import { + DEFAULT_QUALITY_ISSUE_SORT_DIRECTION, + DEFAULT_QUALITY_ISSUE_SORT_FIELD, +} from '@kbn/dataset-quality-plugin/common/constants'; +import expect from '@kbn/expect'; +import { WebElementWrapper } from '@kbn/ftr-common-functional-ui-services'; +import rison from '@kbn/rison'; +import querystring from 'querystring'; +import { FtrProviderContext } from '../ftr_provider_context'; + +const defaultPageState: datasetQualityUrlSchemaV1.UrlSchema = { + v: 1, + table: { + page: 0, + }, + filters: {}, +}; + +const defaultDetailsPageState: datasetQualityDetailsUrlSchemaV1.UrlSchema = { + v: 1, + dataStream: 'logs-synth.1-default', + degradedFields: { + table: { + page: 0, + rowsPerPage: 10, + sort: { + field: DEFAULT_QUALITY_ISSUE_SORT_FIELD, + direction: DEFAULT_QUALITY_ISSUE_SORT_DIRECTION, + }, + }, + }, +}; + +const defaultDetailsPageStateV2: datasetQualityDetailsUrlSchemaV2.UrlSchema = { + v: 2, + dataStream: 'logs-synth.1-default', + qualityIssues: { + table: { + page: 0, + rowsPerPage: 10, + sort: { + field: DEFAULT_QUALITY_ISSUE_SORT_FIELD, + direction: DEFAULT_QUALITY_ISSUE_SORT_DIRECTION, + }, + }, + }, +}; + +type SummaryPanelKpi = Record< + | 'datasetHealthPoor' + | 'datasetHealthDegraded' + | 'datasetHealthGood' + | 'activeDatasets' + | 'estimatedData', + string +>; + +type SummaryPanelKPI = Record< + 'docsCountTotal' | 'size' | 'services' | 'hosts' | 'degradedDocs' | 'failedDocs', + string +>; + +const texts = { + noActivityText: 'No activity in the selected timeframe', + datasetHealthPoor: 'Poor', + datasetHealthDegraded: 'Degraded', + datasetHealthGood: 'Good', + activeDatasets: 'Active Data Sets', + estimatedData: 'Estimated Data', + docsCountTotal: 'Total count', + size: 'Size', + services: 'Services', + hosts: 'Hosts', + degradedDocs: 'Degraded docs', + failedDocs: 'Failed docs', + datasetNameColumn: 'Data set name', + datasetNamespaceColumn: 'Namespace', + datasetTypeColumn: 'Type', + datasetSizeColumn: 'Size', + datasetQualityColumn: 'Data set quality', + datasetDegradedDocsColumn: 'Degraded docs (%)', + datasetFailedDocsColumn: 'Failed docs (%)', + datasetLastActivityColumn: 'Last activity', + datasetActionsColumn: 'Actions', + datasetIssueColumn: 'Issue', + datasetDocsCountColumn: 'Docs count', + datasetLastOccurrenceColumn: 'Last Occurrence', +}; + +export function DatasetQualityPageObject({ getPageObjects, getService }: FtrProviderContext) { + const PageObjects = getPageObjects(['common']); + const testSubjects = getService('testSubjects'); + const euiSelectable = getService('selectable'); + const find = getService('find'); + const retry = getService('retry'); + const es = getService('es'); + + const selectors = { + datasetQualityTable: '[data-test-subj="datasetQualityTable"]', + datasetQualityTableColumn: (column: number) => + `[data-test-subj="datasetQualityTable"] .euiTableRowCell:nth-child(${column})`, + datasetSearchInput: '[placeholder="Filter data sets"]', + showFullDatasetNamesSwitch: 'button[aria-label="Show full data set names"]', + showInactiveDatasetsNamesSwitch: 'button[aria-label="Show inactive data sets"]', + superDatePickerApplyButton: '[data-test-subj="superDatePickerQuickSelectApplyButton"]', + qualityIssueDegradedChart: '.euiButtonGroupButton[data-test-subj="degraded"]', + qualityIssueFailedChart: '.euiButtonGroupButton[data-test-subj="failed"]', + }; + + const testSubjectSelectors = { + datasetQualityTable: 'datasetQualityTable', + datasetQualityFiltersContainer: 'datasetQualityFiltersContainer', + datasetQualityExpandButton: 'datasetQualityExpandButton', + datasetQualityDetailsDegradedFieldsExpandButton: + 'datasetQualityDetailsQualityIssuesExpandButton', + datasetQualityDetailsDegradedFieldFlyout: 'datasetQualityDetailsDegradedFieldFlyout', + datasetDetailsContainer: 'datasetDetailsContainer', + datasetQualityDetailsTitle: 'datasetQualityDetailsTitle', + datasetQualityDetailsDegradedFieldTable: 'datasetQualityDetailsDegradedFieldTable', + datasetQualityDetailsDegradedTableNoData: 'datasetQualityDetailsDegradedTableNoData', + datasetQualitySparkPlot: 'datasetQualitySparkPlot', + datasetQualityDetailsHeaderButton: 'datasetQualityDetailsHeaderButton', + datasetQualityDetailsIntegrationLoading: 'datasetQualityDetailsIntegrationLoading', + datasetQualityDetailsIntegrationActionsButton: 'datasetQualityDetailsIntegrationActionsButton', + datasetQualityDetailsIntegrationAction: (action: string) => + `datasetQualityDetailsIntegrationAction${action}`, + datasetQualityFilterBarFieldSearch: 'datasetQualityFilterBarFieldSearch', + datasetQualityIntegrationsSelectable: 'datasetQualityIntegrationsSelectable', + datasetQualityIntegrationsSelectableButton: 'datasetQualityIntegrationsSelectableButton', + datasetQualityNamespacesSelectable: 'datasetQualityNamespacesSelectable', + datasetQualityNamespacesSelectableButton: 'datasetQualityNamespacesSelectableButton', + datasetQualityTypesSelectable: 'datasetQualityFilterType', + datasetQualityQualitiesSelectable: 'datasetQualityQualitiesSelectable', + datasetQualityQualitiesSelectableButton: 'datasetQualityQualitiesSelectableButton', + datasetQualityDetailsEmptyPrompt: 'datasetQualityDetailsEmptyPrompt', + datasetQualityDetailsEmptyPromptBody: 'datasetQualityDetailsEmptyPromptBody', + datasetQualityDatasetHealthKpi: 'datasetQualityDatasetHealthKpi', + datasetQualityDetailsSummaryKpiValue: 'datasetQualityDetailsSummaryKpiValue', + datasetQualityDetailsIntegrationRowIntegration: 'datasetQualityDetailsFieldsList-integration', + datasetQualityDetailsIntegrationRowVersion: 'datasetQualityDetailsFieldsList-version', + datasetQualityDetailsLinkToDiscover: 'datasetQualityDetailsLinkToDiscover', + datasetQualityInsufficientPrivileges: 'datasetQualityInsufficientPrivileges', + datasetQualityNoDataEmptyState: 'datasetQualityTableNoData', + datasetQualityNoPrivilegesEmptyState: 'datasetQualityNoPrivilegesEmptyState', + superDatePickerToggleQuickMenuButton: 'superDatePickerToggleQuickMenuButton', + superDatePickerApplyTimeButton: 'superDatePickerApplyTimeButton', + superDatePickerQuickMenu: 'superDatePickerQuickMenu', + unifiedHistogramBreakdownSelectorButton: 'unifiedHistogramBreakdownSelectorButton', + unifiedHistogramBreakdownSelectorSelectorSearch: + 'unifiedHistogramBreakdownSelectorSelectorSearch', + unifiedHistogramBreakdownSelectorSelectable: 'unifiedHistogramBreakdownSelectorSelectable', + managementHome: 'managementHome', + euiFlyoutCloseButton: 'euiFlyoutCloseButton', + datasetQualityDetailsDegradedFieldFlyoutIssueDoesNotExist: + 'datasetQualityDetailsDegradedFieldFlyoutIssueDoesNotExist', + datasetQualityDetailsOverviewDegradedFieldToggleSwitch: + 'datasetQualityDetailsOverviewDegradedFieldToggleSwitch', + datasetQualityDetailsActionsDropdown: 'datasetQualityDetailsActionsDropdown', + openInDiscover: 'openInDiscover', + }; + + return { + selectors, + testSubjectSelectors, + texts, + + async navigateTo({ + pageState, + }: { + pageState?: datasetQualityUrlSchemaV1.UrlSchema; + } = {}) { + const queryStringParams = querystring.stringify({ + [DATA_QUALITY_URL_STATE_KEY]: rison.encode( + datasetQualityUrlSchemaV1.urlSchemaRT.encode({ + ...defaultPageState, + ...pageState, + }) + ), + }); + + return PageObjects.common.navigateToUrlWithBrowserHistory( + 'management', + '/data/data_quality', + queryStringParams, + { + // the check sometimes is too slow for the page so it misses the point + // in time before the app rewrites the URL + ensureCurrentUrl: false, + } + ); + }, + + async navigateToDetails(pageState: datasetQualityDetailsUrlSchemaV1.UrlSchema) { + const queryStringParams = querystring.stringify({ + [DATA_QUALITY_URL_STATE_KEY]: rison.encode( + datasetQualityDetailsUrlSchemaV1.urlSchemaRT.encode({ + ...defaultDetailsPageState, + ...pageState, + }) + ), + }); + + return PageObjects.common.navigateToUrlWithBrowserHistory( + 'management', + '/data/data_quality/details', + queryStringParams, + { + // the check sometimes is too slow for the page so it misses the point + // in time before the app rewrites the URL + ensureCurrentUrl: false, + } + ); + }, + + async navigateToDetailsV2(pageState: datasetQualityDetailsUrlSchemaV2.UrlSchema) { + const queryStringParams = querystring.stringify({ + [DATA_QUALITY_URL_STATE_KEY]: rison.encode( + datasetQualityDetailsUrlSchemaV2.urlSchemaRT.encode({ + ...defaultDetailsPageStateV2, + ...pageState, + }) + ), + }); + + return PageObjects.common.navigateToUrlWithBrowserHistory( + 'management', + '/data/data_quality/details', + queryStringParams, + { + // the check sometimes is too slow for the page so it misses the point + // in time before the app rewrites the URL + ensureCurrentUrl: false, + } + ); + }, + + async waitUntilTableLoaded() { + await find.waitForDeletedByCssSelector('.euiBasicTable-loading', 20 * 1000); + }, + + async waitUntilSummaryPanelLoaded(isStateful: boolean = true) { + await testSubjects.missingOrFail(`datasetQuality-${texts.activeDatasets}-loading`, { + timeout: 5 * 1000, // Increasing timeout since tests were flaky + }); + if (isStateful) { + await testSubjects.missingOrFail(`datasetQuality-${texts.estimatedData}-loading`); + } + }, + + async waitUntilPossibleMitigationsLoaded() { + await find.waitForDeletedByCssSelector( + '.euiFlyoutBody .datasetQualityDetailsFlyoutManualMitigationsLoading', + 20 * 1000 + ); + }, + + async waitUntilDegradedFieldFlyoutLoaded() { + await testSubjects.existOrFail(testSubjectSelectors.datasetQualityDetailsDegradedFieldFlyout); + }, + + async parseSummaryPanel(excludeKeys: string[] = []): Promise { + const isStateful = !excludeKeys.includes('estimatedData'); + + await this.waitUntilSummaryPanelLoaded(isStateful); + + const kpiTitleAndKeys = [ + { title: texts.datasetHealthPoor, key: 'datasetHealthPoor' }, + { title: texts.datasetHealthDegraded, key: 'datasetHealthDegraded' }, + { title: texts.datasetHealthGood, key: 'datasetHealthGood' }, + { title: texts.activeDatasets, key: 'activeDatasets' }, + { title: texts.estimatedData, key: 'estimatedData' }, + ].filter((item) => !excludeKeys.includes(item.key)); + + const kpiTexts = await Promise.all( + kpiTitleAndKeys.map(async ({ title, key }) => ({ + key, + value: await testSubjects.getVisibleText( + `${testSubjectSelectors.datasetQualityDatasetHealthKpi}-${title}` + ), + })) + ); + + return kpiTexts.reduce( + (acc, { key, value }) => ({ + ...acc, + [key]: value, + }), + {} as SummaryPanelKpi + ); + }, + + generateBackingIndexNameWithoutVersion({ + type = 'logs', + dataset, + namespace = 'default', + }: { + type?: string; + dataset: string; + namespace?: string; + }) { + return `.ds-${type}-${dataset}-${namespace}-${getCurrentDateFormatted()}`; + }, + + getDatasetsTable(): Promise { + return testSubjects.find(testSubjectSelectors.datasetQualityTable); + }, + + getDatasetQualityDetailsDegradedFieldTable(): Promise { + return testSubjects.find(testSubjectSelectors.datasetQualityDetailsDegradedFieldTable); + }, + + async getDatasetQualityDetailsDegradedFieldTableRows(): Promise { + await this.waitUntilTableLoaded(); + const table = await testSubjects.find( + testSubjectSelectors.datasetQualityDetailsDegradedFieldTable + ); + const tBody = await table.findByTagName('tbody'); + return tBody.findAllByTagName('tr'); + }, + + async refreshTable() { + const filtersContainer = await testSubjects.find( + testSubjectSelectors.datasetQualityFiltersContainer, + 20 * 1000 + ); + const refreshButton = await filtersContainer.findByTestSubject( + testSubjectSelectors.superDatePickerApplyTimeButton + ); + return refreshButton.click(); + }, + + async getDatasetTableRows(): Promise { + await this.waitUntilTableLoaded(); + const table = await testSubjects.find(testSubjectSelectors.datasetQualityTable); + const tBody = await table.findByTagName('tbody'); + return tBody.findAllByTagName('tr'); + }, + + async getDatasetTableHeaderTexts() { + const table = await this.getDatasetsTable(); + return getDatasetTableHeaderTexts(table); + }, + + async parseDatasetTable() { + await this.waitUntilTableLoaded(); + const table = await this.getDatasetsTable(); + return this.parseTable(table, [ + texts.datasetNameColumn, + texts.datasetNamespaceColumn, + texts.datasetTypeColumn, + texts.datasetSizeColumn, + texts.datasetQualityColumn, + texts.datasetDegradedDocsColumn, + texts.datasetFailedDocsColumn, + texts.datasetLastActivityColumn, + texts.datasetActionsColumn, + ]); + }, + + async parseDegradedFieldTable() { + await this.waitUntilTableLoaded(); + const table = await this.getDatasetQualityDetailsDegradedFieldTable(); + return this.parseTable(table, [ + '0', + texts.datasetIssueColumn, + texts.datasetDocsCountColumn, + texts.datasetLastOccurrenceColumn, + ]); + }, + + async filterForIntegrations(integrations: string[]) { + return euiSelectable.selectOnlyOptionsWithText( + testSubjectSelectors.datasetQualityIntegrationsSelectableButton, + testSubjectSelectors.datasetQualityIntegrationsSelectable, + integrations + ); + }, + + async filterForNamespaces(namespaces: string[]) { + return euiSelectable.selectOnlyOptionsWithText( + testSubjectSelectors.datasetQualityNamespacesSelectableButton, + testSubjectSelectors.datasetQualityNamespacesSelectable, + namespaces + ); + }, + + async filterForQualities(qualities: string[]) { + return euiSelectable.selectOnlyOptionsWithText( + testSubjectSelectors.datasetQualityQualitiesSelectableButton, + testSubjectSelectors.datasetQualityQualitiesSelectable, + qualities + ); + }, + + async toggleShowInactiveDatasets() { + return find.clickByCssSelector(selectors.showInactiveDatasetsNamesSwitch); + }, + + async toggleShowFullDatasetNames() { + await find.waitForDeletedByCssSelector('.euiToolTipPopover', 5 * 1000); + return find.clickByCssSelector(selectors.showFullDatasetNamesSwitch); + }, + + async refreshDetailsPageData() { + const datasetDetailsContainer: WebElementWrapper = await testSubjects.find( + testSubjectSelectors.datasetDetailsContainer + ); + const refreshButton = await datasetDetailsContainer.findByTestSubject( + testSubjectSelectors.superDatePickerApplyTimeButton + ); + return refreshButton.click(); + }, + + async doesTextExist(selector: string, text: string) { + const textValues = await testSubjects.getVisibleTextAll(selector); + if (textValues && textValues.length > 0) { + const values = textValues[0].split('\n'); + return values.includes(text); + } + + return false; + }, + + getDatasetQualityDetailsHeaderButton() { + return testSubjects.find(testSubjectSelectors.datasetQualityDetailsHeaderButton); + }, + + openDatasetQualityDetailsActionsButton() { + return testSubjects.click(testSubjectSelectors.datasetQualityDetailsActionsDropdown); + }, + + getOpenInDiscoverButton() { + return testSubjects.find(testSubjectSelectors.openInDiscover); + }, + + openIntegrationActionsMenu() { + return testSubjects.click(testSubjectSelectors.datasetQualityDetailsIntegrationActionsButton); + }, + + getIntegrationActionButtonByAction(action: string) { + return testSubjects.find(testSubjectSelectors.datasetQualityDetailsIntegrationAction(action)); + }, + + getIntegrationDashboardButtons() { + return testSubjects.findAll( + testSubjectSelectors.datasetQualityDetailsIntegrationAction('Dashboard') + ); + }, + + // `excludeKeys` needed to circumvent `_stats` not available in Serverless https://github.com/elastic/kibana/issues/178954 + // TODO: Remove `excludeKeys` when `_stats` is available in Serverless + async parseOverviewSummaryPanelKpis(excludeKeys: string[] = []): Promise { + const kpiTitleAndKeys = [ + { title: texts.docsCountTotal, key: 'docsCountTotal' }, + { title: texts.size, key: 'size' }, + { title: texts.services, key: 'services' }, + { title: texts.hosts, key: 'hosts' }, + { title: texts.degradedDocs, key: 'degradedDocs' }, + { title: texts.failedDocs, key: 'failedDocs' }, + ].filter((item) => !excludeKeys.includes(item.key)); + + const kpiTexts = await Promise.all( + kpiTitleAndKeys.map(async ({ title, key }) => { + const selector = `${testSubjectSelectors.datasetQualityDetailsSummaryKpiValue}-${title}`; + + const exists = await testSubjects.exists(selector); + if (!exists) { + return { key, value: undefined } as { key: string; value: string | undefined }; + } + + return { key, value: await testSubjects.getVisibleText(selector) }; + }) + ); + + return kpiTexts.reduce( + (acc, { key, value }) => ({ + ...acc, + [key]: value, + }), + {} as SummaryPanelKPI + ); + }, + + async selectBreakdownField(fieldText: string) { + return euiSelectable.searchAndSelectOption( + testSubjectSelectors.unifiedHistogramBreakdownSelectorButton, + testSubjectSelectors.unifiedHistogramBreakdownSelectorSelectable, + testSubjectSelectors.unifiedHistogramBreakdownSelectorSelectorSearch, + fieldText, + fieldText + ); + }, + + async selectQualityIssueChart(type: 'degraded' | 'failed') { + const chartSelector = + type === 'degraded' + ? selectors.qualityIssueDegradedChart + : selectors.qualityIssueFailedChart; + return find.clickByCssSelector(chartSelector); + }, + + async openDegradedFieldFlyout(fieldName: string) { + await this.waitUntilTableLoaded(); + const cols = await this.parseDegradedFieldTable(); + const fieldNameCol = cols.Issue; + const fieldNameColCellTexts = await fieldNameCol.getCellTexts(); + const testDatasetRowIndex = fieldNameColCellTexts.findIndex( + (dName) => dName === `${fieldName} field ignored` + ); + + expect(testDatasetRowIndex).to.be.greaterThan(-1); + + const expandColumn = cols['0']; + const expandButtons = await expandColumn.getCellChildren( + `[data-test-subj=${testSubjectSelectors.datasetQualityDetailsDegradedFieldsExpandButton}]` + ); + + expect(expandButtons.length).to.be.greaterThan(0); + + const fieldExpandButton = expandButtons[testDatasetRowIndex]; + + const isCollapsed = (await fieldExpandButton.getAttribute('title')) === 'Expand'; + + if (isCollapsed) { + await fieldExpandButton.click(); + } + + await this.waitUntilDegradedFieldFlyoutLoaded(); + }, + + async openFailedDocsFlyout() { + await this.waitUntilTableLoaded(); + const cols = await this.parseDegradedFieldTable(); + const fieldNameCol = cols.Issue; + const fieldNameColCellTexts = await fieldNameCol.getCellTexts(); + const testDatasetRowIndex = fieldNameColCellTexts.findIndex( + (dName) => dName === `Documents indexing failed` + ); + + expect(testDatasetRowIndex).to.be.greaterThan(-1); + + const expandColumn = cols['0']; + const expandButtons = await expandColumn.getCellChildren( + `[data-test-subj=${testSubjectSelectors.datasetQualityDetailsDegradedFieldsExpandButton}]` + ); + + expect(expandButtons.length).to.be.greaterThan(0); + + const fieldExpandButton = expandButtons[testDatasetRowIndex]; + + const isCollapsed = (await fieldExpandButton.getAttribute('title')) === 'Expand'; + + if (isCollapsed) { + await fieldExpandButton.click(); + } + + await this.waitUntilDegradedFieldFlyoutLoaded(); + }, + + async closeFlyout() { + return testSubjects.click(testSubjectSelectors.euiFlyoutCloseButton); + }, + + async setDataStreamSettings(name: string, settings: IndicesIndexSettings) { + return es.indices.putSettings({ + index: name, + settings, + }); + }, + + async rolloverDataStream(name: string) { + return es.indices.rollover({ + alias: name, + }); + }, + + async getQualityIssueSwitchState() { + const isSelected = await testSubjects.getAttribute( + testSubjectSelectors.datasetQualityDetailsOverviewDegradedFieldToggleSwitch, + 'aria-checked' + ); + return isSelected === 'true'; + }, + + async parseTable(tableWrapper: WebElementWrapper, columnNamesOrIndexes: string[]) { + const headerElementWrappers = await tableWrapper.findAllByCssSelector('thead th, thead td'); + + const result: Record< + string, + { + columnNameOrIndex: string; + sortDirection?: 'ascending' | 'descending'; + headerElement: WebElementWrapper; + cellElements: WebElementWrapper[]; + cellContentElements: WebElementWrapper[]; + getSortDirection: () => Promise<'ascending' | 'descending' | undefined>; + sort: (sortDirection: 'ascending' | 'descending') => Promise; + getCellTexts: (selector?: string) => Promise; + getCellChildren: (selector: string) => Promise; + } + > = {}; + + for (let i = 0; i < headerElementWrappers.length; i++) { + const tdSelector = `table > tbody > tr td:nth-child(${i + 1})`; + const cellContentSelector = `${tdSelector} .euiTableCellContent`; + const thWrapper = headerElementWrappers[i]; + const columnName = await thWrapper.getVisibleText(); + const columnIndex = `${i}`; + const columnNameOrIndex = columnNamesOrIndexes.includes(columnName) + ? columnName + : columnNamesOrIndexes.includes(columnIndex) + ? columnIndex + : undefined; + + if (columnNameOrIndex) { + const headerElement = thWrapper; + + const tdWrappers = await tableWrapper.findAllByCssSelector(tdSelector); + const cellContentWrappers = await tableWrapper.findAllByCssSelector(cellContentSelector); + + const getSortDirection = () => + headerElement.getAttribute('aria-sort') as Promise< + 'ascending' | 'descending' | undefined + >; + + result[columnNameOrIndex] = { + columnNameOrIndex, + headerElement, + cellElements: tdWrappers, + cellContentElements: cellContentWrappers, + getSortDirection, + sort: async (sortDirection: 'ascending' | 'descending') => { + await retry.tryForTime(5000, async () => { + while ((await getSortDirection()) !== sortDirection) { + await headerElement.click(); + } + }); + }, + getCellTexts: async (textContainerSelector?: string) => { + const cellContentContainerWrappers = textContainerSelector + ? await tableWrapper.findAllByCssSelector(`${tdSelector} ${textContainerSelector}`) + : cellContentWrappers; + + const cellContentContainerWrapperTexts: string[] = []; + for (let j = 0; j < cellContentContainerWrappers.length; j++) { + const cellContentContainerWrapper = cellContentContainerWrappers[j]; + const cellContentContainerWrapperText = + await cellContentContainerWrapper.getVisibleText(); + cellContentContainerWrapperTexts.push(cellContentContainerWrapperText); + } + + return cellContentContainerWrapperTexts; + }, + getCellChildren: (childSelector: string) => { + return tableWrapper.findAllByCssSelector(`${cellContentSelector} ${childSelector}`); + }, + }; + } + } + + return result; + }, + }; +} + +async function getDatasetTableHeaderTexts(tableWrapper: WebElementWrapper) { + const headerElementWrappers = await tableWrapper.findAllByCssSelector('thead th, thead td'); + return Promise.all( + headerElementWrappers.map((headerElementWrapper) => headerElementWrapper.getVisibleText()) + ); +} + +function getCurrentDateFormatted() { + const date = new Date(); + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + + return `${year}.${month}.${day}`; +} diff --git a/x-pack/solutions/observability/test/functional/page_objects/index.ts b/x-pack/solutions/observability/test/functional/page_objects/index.ts index 5b699d8efa6a6..39c7db4cb3317 100644 --- a/x-pack/solutions/observability/test/functional/page_objects/index.ts +++ b/x-pack/solutions/observability/test/functional/page_objects/index.ts @@ -15,6 +15,8 @@ import { UptimePageObject } from './uptime_page'; import { AssetDetailsProvider } from './asset_details'; import { ObservabilityPageProvider } from './observability_page'; import { AlertControlsProvider } from './alert_controls'; +import { ObservabilityLogsExplorerPageObject } from './observability_logs_explorer'; +import { DatasetQualityPageObject } from './dataset_quality'; export const pageObjects = { ...platformPageObjects, @@ -27,4 +29,6 @@ export const pageObjects = { infraSavedViews: InfraSavedViewsProvider, observability: ObservabilityPageProvider, uptime: UptimePageObject, + observabilityLogsExplorer: ObservabilityLogsExplorerPageObject, + datasetQuality: DatasetQualityPageObject, }; diff --git a/x-pack/solutions/observability/test/functional/page_objects/observability_logs_explorer.ts b/x-pack/solutions/observability/test/functional/page_objects/observability_logs_explorer.ts new file mode 100644 index 0000000000000..10b0d9b4efd78 --- /dev/null +++ b/x-pack/solutions/observability/test/functional/page_objects/observability_logs_explorer.ts @@ -0,0 +1,277 @@ +/* + * 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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../ftr_provider_context'; + +export interface IntegrationPackage { + name: string; + version: string; +} + +const packages: IntegrationPackage[] = [ + { + name: 'apache', + version: '1.14.0', + }, + { + name: 'aws', + version: '1.51.0', + }, + { + name: 'system', + version: '1.38.1', + }, + { + name: '1password', + version: '1.18.0', + }, + { + name: 'activemq', + version: '0.13.0', + }, + { + name: 'akamai', + version: '2.14.0', + }, + { + name: 'apache_tomcat', + version: '0.12.1', + }, + { + name: 'apm', + version: '8.4.2', + }, + { + name: 'atlassian_bitbucket', + version: '1.14.0', + }, + { + name: 'atlassian_confluence', + version: '1.15.0', + }, + { + name: 'atlassian_jira', + version: '1.15.0', + }, + { + name: 'auditd', + version: '3.12.0', + }, + { + name: 'auditd_manager', + version: '1.12.0', + }, + { + name: 'auth0', + version: '1.10.0', + }, + { + name: 'aws_logs', + version: '0.5.0', + }, + { + name: 'azure', + version: '1.5.28', + }, + { + name: 'azure_app_service', + version: '0.0.1', + }, + { + name: 'azure_blob_storage', + version: '0.5.0', + }, + { + name: 'azure_frontdoor', + version: '1.1.0', + }, + { + name: 'azure_functions', + version: '0.0.1', + }, +]; + +const initialPackages = packages.slice(0, 3); +const additionalPackages = packages.slice(3); + +export function ObservabilityLogsExplorerPageObject({ + getPageObjects, + getService, +}: FtrProviderContext) { + const es = getService('es'); + const log = getService('log'); + const supertest = getService('supertest'); + + return { + uninstallPackage: ({ name, version }: IntegrationPackage) => { + return supertest.delete(`/api/fleet/epm/packages/${name}/${version}`).set('kbn-xsrf', 'xxxx'); + }, + + installPackage: ({ name, version }: IntegrationPackage) => { + return supertest + .post(`/api/fleet/epm/packages/${name}/${version}`) + .set('kbn-xsrf', 'xxxx') + .send({ force: true }); + }, + + getInstalledPackages: () => { + return supertest + .get(`/api/fleet/epm/packages/installed?dataStreamType=logs&perPage=1000`) + .set('kbn-xsrf', 'xxxx'); + }, + + async removeInstalledPackages(): Promise { + const response = await this.getInstalledPackages(); + + // Uninstall installed integration + await Promise.all( + response.body.items.map((pkg: IntegrationPackage) => this.uninstallPackage(pkg)) + ); + + return response.body.items; + }, + + async setupInitialIntegrations() { + log.info(`===== Setup initial integration packages. =====`); + log.info(`===== Uninstall initial integration packages. =====`); + const uninstalled = await this.removeInstalledPackages(); + log.info(`===== Install ${initialPackages.length} mock integration packages. =====`); + await Promise.all(initialPackages.map((pkg: IntegrationPackage) => this.installPackage(pkg))); + + return async () => { + log.info(`===== Uninstall ${initialPackages.length} mock integration packages. =====`); + await Promise.all( + initialPackages.map((pkg: IntegrationPackage) => this.uninstallPackage(pkg)) + ); + log.info(`===== Restore pre-existing integration packages. =====`); + await Promise.all(uninstalled.map((pkg: IntegrationPackage) => this.installPackage(pkg))); + }; + }, + + async setupDataStream(datasetName: string, namespace: string = 'default') { + const dataStream = `logs-${datasetName}-${namespace}`; + log.info(`===== Setup initial data stream "${dataStream}". =====`); + await es.indices.createDataStream({ name: dataStream }); + + return async () => { + log.info(`===== Removing data stream "${dataStream}". =====`); + await es.indices.deleteDataStream({ + name: dataStream, + }); + }; + }, + + ingestLogEntries(dataStream: string, docs: MockLogDoc[] = []) { + log.info(`===== Ingesting ${docs.length} docs for "${dataStream}" data stream. =====`); + return es.bulk({ + operations: docs.flatMap((doc) => [{ create: { _index: dataStream } }, createLogDoc(doc)]), + refresh: 'wait_for', + }); + }, + + async setupAdditionalIntegrations() { + log.info(`===== Setup additional integration packages. =====`); + log.info(`===== Install ${additionalPackages.length} mock integration packages. =====`); + await Promise.all( + additionalPackages.map((pkg: IntegrationPackage) => this.installPackage(pkg)) + ); + + return async () => { + log.info(`===== Uninstall ${additionalPackages.length} mock integration packages. =====`); + await Promise.all( + additionalPackages.map((pkg: IntegrationPackage) => this.uninstallPackage(pkg)) + ); + }; + }, + }; +} + +interface MockLogDoc { + time: number; + logFilepath?: string; + serviceName?: string; + namespace: string; + datasetName: string; + message?: string; + logLevel?: string; + traceId?: string; + hostName?: string; + orchestratorClusterId?: string; + orchestratorClusterName?: string; + orchestratorResourceId?: string; + cloudProvider?: string; + cloudRegion?: string; + cloudAz?: string; + cloudProjectId?: string; + cloudInstanceId?: string; + agentName?: string; + + [key: string]: unknown; +} + +export function createLogDoc({ + time, + logFilepath, + serviceName, + namespace, + datasetName, + message, + logLevel, + traceId, + hostName, + orchestratorClusterId, + orchestratorClusterName, + orchestratorResourceId, + cloudProvider, + cloudRegion, + cloudAz, + cloudProjectId, + cloudInstanceId, + agentName, + ...extraFields +}: MockLogDoc) { + return { + input: { + type: 'log', + }, + '@timestamp': new Date(time).toISOString(), + log: { + file: { + path: logFilepath, + }, + }, + ...(serviceName + ? { + service: { + name: serviceName, + }, + } + : {}), + data_stream: { + namespace, + type: 'logs', + dataset: datasetName, + }, + message, + event: { + dataset: datasetName, + }, + ...(logLevel && { 'log.level': logLevel }), + ...(traceId && { 'trace.id': traceId }), + ...(hostName && { 'host.name': hostName }), + ...(orchestratorClusterId && { 'orchestrator.cluster.id': orchestratorClusterId }), + ...(orchestratorClusterName && { 'orchestrator.cluster.name': orchestratorClusterName }), + ...(orchestratorResourceId && { 'orchestrator.resource.id': orchestratorResourceId }), + ...(cloudProvider && { 'cloud.provider': cloudProvider }), + ...(cloudRegion && { 'cloud.region': cloudRegion }), + ...(cloudAz && { 'cloud.availability_zone': cloudAz }), + ...(cloudProjectId && { 'cloud.project.id': cloudProjectId }), + ...(cloudInstanceId && { 'cloud.instance.id': cloudInstanceId }), + ...(agentName && { 'agent.name': agentName }), + ...extraFields, + }; +} diff --git a/x-pack/solutions/observability/test/tsconfig.json b/x-pack/solutions/observability/test/tsconfig.json index b6c03de9a1dbd..4789ec4182b55 100644 --- a/x-pack/solutions/observability/test/tsconfig.json +++ b/x-pack/solutions/observability/test/tsconfig.json @@ -91,5 +91,6 @@ "@kbn/typed-react-router-config", "@kbn/observability-ai-assistant-app-plugin", "@kbn/dev-utils", + "@kbn/data-quality-plugin", ] } diff --git a/x-pack/test/functional/apps/search_playground/config.ts b/x-pack/solutions/search/test/functional/apps/search_playground/config.ts similarity index 80% rename from x-pack/test/functional/apps/search_playground/config.ts rename to x-pack/solutions/search/test/functional/apps/search_playground/config.ts index d0d07ff200281..fdd881bd3109a 100644 --- a/x-pack/test/functional/apps/search_playground/config.ts +++ b/x-pack/solutions/search/test/functional/apps/search_playground/config.ts @@ -8,7 +8,9 @@ import { FtrConfigProviderContext } from '@kbn/test'; export default async function ({ readConfigFile }: FtrConfigProviderContext) { - const functionalConfig = await readConfigFile(require.resolve('../../config.base.js')); + const functionalConfig = await readConfigFile( + require.resolve('../../../functional_search/config.ts') + ); return { ...functionalConfig.getAll(), diff --git a/x-pack/test/functional/apps/search_playground/index.ts b/x-pack/solutions/search/test/functional/apps/search_playground/index.ts similarity index 83% rename from x-pack/test/functional/apps/search_playground/index.ts rename to x-pack/solutions/search/test/functional/apps/search_playground/index.ts index da75e2f59749c..8ac496ff7d7e5 100644 --- a/x-pack/test/functional/apps/search_playground/index.ts +++ b/x-pack/solutions/search/test/functional/apps/search_playground/index.ts @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { FtrProviderContext } from '../../ftr_provider_context'; +import { FtrProviderContext } from '../../../functional_search/ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('playground', () => { diff --git a/x-pack/test/functional/apps/search_playground/playground_overview.ess.ts b/x-pack/solutions/search/test/functional/apps/search_playground/playground_overview.ess.ts similarity index 99% rename from x-pack/test/functional/apps/search_playground/playground_overview.ess.ts rename to x-pack/solutions/search/test/functional/apps/search_playground/playground_overview.ess.ts index 8f09675193765..0ea96b21ca071 100644 --- a/x-pack/test/functional/apps/search_playground/playground_overview.ess.ts +++ b/x-pack/solutions/search/test/functional/apps/search_playground/playground_overview.ess.ts @@ -6,7 +6,7 @@ */ import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; -import { FtrProviderContext } from '../../ftr_provider_context'; +import { FtrProviderContext } from '../../../functional_search/ftr_provider_context'; import { createOpenAIConnector } from './utils/create_openai_connector'; import { createLlmProxy, LlmProxy } from './utils/create_llm_proxy'; diff --git a/x-pack/test/functional/apps/search_playground/utils/create_llm_proxy.ts b/x-pack/solutions/search/test/functional/apps/search_playground/utils/create_llm_proxy.ts similarity index 100% rename from x-pack/test/functional/apps/search_playground/utils/create_llm_proxy.ts rename to x-pack/solutions/search/test/functional/apps/search_playground/utils/create_llm_proxy.ts diff --git a/x-pack/test/functional/apps/search_playground/utils/create_openai_chunk.ts b/x-pack/solutions/search/test/functional/apps/search_playground/utils/create_openai_chunk.ts similarity index 100% rename from x-pack/test/functional/apps/search_playground/utils/create_openai_chunk.ts rename to x-pack/solutions/search/test/functional/apps/search_playground/utils/create_openai_chunk.ts diff --git a/x-pack/test/functional/apps/search_playground/utils/create_openai_connector.ts b/x-pack/solutions/search/test/functional/apps/search_playground/utils/create_openai_connector.ts similarity index 100% rename from x-pack/test/functional/apps/search_playground/utils/create_openai_connector.ts rename to x-pack/solutions/search/test/functional/apps/search_playground/utils/create_openai_connector.ts diff --git a/x-pack/solutions/search/test/tsconfig.json b/x-pack/solutions/search/test/tsconfig.json index 7d8e82081529f..4d48eb7fe4104 100644 --- a/x-pack/solutions/search/test/tsconfig.json +++ b/x-pack/solutions/search/test/tsconfig.json @@ -31,5 +31,7 @@ "@kbn/test-suites-xpack", "@kbn/ftr-common-functional-ui-services", "@kbn/core-chrome-browser", + "@kbn/observability-ai-assistant-plugin", + "@kbn/inference-common", ] } diff --git a/x-pack/test/functional/services/index.ts b/x-pack/test/functional/services/index.ts index 75c792e113cb2..9c8ae08300544 100644 --- a/x-pack/test/functional/services/index.ts +++ b/x-pack/test/functional/services/index.ts @@ -24,9 +24,6 @@ import { RandomProvider } from '@kbn/test-suites-xpack-platform/functional/servi import { PipelineListProvider } from '@kbn/test-suites-xpack-platform/functional/services/pipeline_list'; import { DataStreamProvider } from '@kbn/test-suites-xpack-platform/functional/services/data_stream'; import { PipelineEditorProvider } from '@kbn/test-suites-xpack-platform/functional/services/pipeline_editor'; -import { services as kibanaXPackApiIntegrationServices } from '../../api_integration/services'; -import { services as commonServices } from '../../common/services'; - import { MonitoringNoDataProvider, MonitoringClusterListProvider, @@ -58,7 +55,10 @@ import { MonitoringEnterpriseSearchOverviewProvider, MonitoringEnterpriseSearchSummaryStatusProvider, // @ts-ignore not ts yet -} from './monitoring'; +} from '@kbn/test-suites-xpack-platform/functional/services/monitoring'; +import { services as kibanaXPackApiIntegrationServices } from '../../api_integration/services'; +import { services as commonServices } from '../../common/services'; + // @ts-ignore not ts yet import { UptimeProvider } from './uptime'; import { InfraSourceConfigurationFormProvider } from './infra_source_configuration_form'; diff --git a/x-pack/test/tsconfig.json b/x-pack/test/tsconfig.json index 4bfd689994737..75d9a7f8b8d07 100644 --- a/x-pack/test/tsconfig.json +++ b/x-pack/test/tsconfig.json @@ -52,7 +52,6 @@ "@kbn/datemath", "@kbn/es-archiver", "@kbn/es-query", - "@kbn/apm-synthtrace-client", "@kbn/server-route-repository", "@kbn/core-http-common", "@kbn/observability-ai-assistant-plugin", @@ -66,7 +65,6 @@ "@kbn/securitysolution-endpoint-exceptions-common", "@kbn/osquery-plugin", "@kbn/scout-info", - "@kbn/inference-common", "@kbn/test-suites-xpack-platform", "@kbn/response-ops-rule-params", "@kbn/ml-string-hash", diff --git a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_details.ts b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_details.ts index 4d6a6e19a772a..c043414b0336f 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_details.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_details.ts @@ -7,7 +7,6 @@ import expect from '@kbn/expect'; import originalExpect from 'expect'; -import { defaultNamespace } from '@kbn/test-suites-xpack/functional/apps/dataset_quality/data'; import { FtrProviderContext } from '../../../ftr_provider_context'; import { datasetNames, @@ -15,6 +14,7 @@ import { getLogsForDataset, createDegradedFieldsRecord, productionNamespace, + defaultNamespace, } from './data'; const integrationActions = {