kibana/x-pack/plugins/profiling_data_access/common/setup.test.ts
Cauê Marcondes 98d2766de8
[Profiling-APM] Removing Profiling dependency from APM (#166253)
This PR removes the Profiling dependency from APM, introduced on `8.10`.

- Exposes a new service in profiling-data-access plugin
- Create a new APM API that calls the new service and checks if
Profiling is initialized
- Move Locators from the Profiling plugin to the Observability-shared
plugin
- Move logic to check Profiling status (has_setup/has_data...) from
Profiling server to profiling-data-access plugin
- Create API tests, testing the status services based on different
scenarios:
  - When profiling hasn't been initialized and there's no data
  - When profiling is initialized but has no data
  - When collector integration is not installed
  - When symbolized integration is not installed
  - When APM server integration is not found

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
2023-09-22 09:16:48 +01:00

181 lines
5.8 KiB
TypeScript

/*
* 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 {
areResourcesSetup,
createDefaultSetupState,
mergePartialSetupStates,
PartialSetupState,
} from './setup';
const createCloudState = (available: boolean): PartialSetupState => ({ cloud: { available } });
const createDataState = (available: boolean): PartialSetupState => ({ data: { available } });
const createPermissionState = (configured: boolean): PartialSetupState => ({
permissions: { configured },
});
const createCollectorPolicyState = (installed: boolean): PartialSetupState => ({
policies: { collector: { installed } },
});
const createSymbolizerPolicyState = (installed: boolean): PartialSetupState => ({
policies: { symbolizer: { installed } },
});
const createProfilingInApmPolicyState = (profilingEnabled: boolean): PartialSetupState => ({
policies: { apm: { profilingEnabled } },
});
function createResourceState({
enabled,
created,
}: {
enabled: boolean;
created: boolean;
}): PartialSetupState {
return {
resource_management: {
enabled,
},
resources: {
created,
},
};
}
function createSettingsState(configured: boolean): PartialSetupState {
return {
settings: {
configured,
},
};
}
describe('Merging partial state operations', () => {
const defaultSetupState = createDefaultSetupState();
it('returns partial states with missing key', () => {
const mergedState = mergePartialSetupStates(defaultSetupState, [
createCloudState(true),
createDataState(true),
]);
expect(mergedState.cloud.available).toEqual(true);
expect(mergedState.cloud.required).toEqual(true);
expect(mergedState.data.available).toEqual(true);
});
it('should deeply nested partial states with overlap', () => {
const mergedState = mergePartialSetupStates(defaultSetupState, [
createCollectorPolicyState(true),
createSymbolizerPolicyState(true),
]);
expect(mergedState.policies.collector.installed).toEqual(true);
expect(mergedState.policies.symbolizer.installed).toEqual(true);
});
it('returns false when permission is not configured', () => {
const mergedState = mergePartialSetupStates(defaultSetupState, [
createCollectorPolicyState(true),
createSymbolizerPolicyState(true),
createProfilingInApmPolicyState(true),
createResourceState({ enabled: true, created: true }),
createSettingsState(true),
createPermissionState(false),
]);
expect(areResourcesSetup(mergedState)).toBeFalsy();
});
it('returns false when resource management is not enabled', () => {
const mergedState = mergePartialSetupStates(defaultSetupState, [
createCollectorPolicyState(true),
createSymbolizerPolicyState(true),
createProfilingInApmPolicyState(true),
createResourceState({ enabled: false, created: true }),
createSettingsState(true),
createPermissionState(true),
]);
expect(areResourcesSetup(mergedState)).toBeFalsy();
});
it('returns false when resources are not created', () => {
const mergedState = mergePartialSetupStates(defaultSetupState, [
createCollectorPolicyState(true),
createSymbolizerPolicyState(true),
createProfilingInApmPolicyState(true),
createResourceState({ enabled: true, created: false }),
createSettingsState(true),
createPermissionState(true),
]);
expect(areResourcesSetup(mergedState)).toBeFalsy();
});
it('returns false when settings are not configured', () => {
const mergedState = mergePartialSetupStates(defaultSetupState, [
createCollectorPolicyState(true),
createSymbolizerPolicyState(true),
createProfilingInApmPolicyState(true),
createResourceState({ enabled: true, created: true }),
createSettingsState(false),
createPermissionState(true),
]);
expect(areResourcesSetup(mergedState)).toBeFalsy();
});
it('returns true when all checks are valid', () => {
const mergedState = mergePartialSetupStates(defaultSetupState, [
createCollectorPolicyState(true),
createSymbolizerPolicyState(true),
createProfilingInApmPolicyState(false),
createResourceState({ enabled: true, created: true }),
createSettingsState(true),
createPermissionState(true),
]);
expect(areResourcesSetup(mergedState)).toBeTruthy();
});
it('returns false when collector is not found', () => {
const mergedState = mergePartialSetupStates(defaultSetupState, [
createCollectorPolicyState(false),
createSymbolizerPolicyState(true),
createProfilingInApmPolicyState(false),
createResourceState({ enabled: true, created: true }),
createSettingsState(true),
createPermissionState(true),
]);
expect(areResourcesSetup(mergedState)).toBeFalsy();
});
it('returns false when symbolizer is not found', () => {
const mergedState = mergePartialSetupStates(defaultSetupState, [
createCollectorPolicyState(true),
createSymbolizerPolicyState(false),
createProfilingInApmPolicyState(false),
createResourceState({ enabled: true, created: true }),
createSettingsState(true),
createPermissionState(true),
]);
expect(areResourcesSetup(mergedState)).toBeFalsy();
});
it('returns false when profiling is in APM server', () => {
const mergedState = mergePartialSetupStates(defaultSetupState, [
createCollectorPolicyState(true),
createSymbolizerPolicyState(true),
createProfilingInApmPolicyState(true),
createResourceState({ enabled: true, created: true }),
createSettingsState(true),
createPermissionState(true),
]);
expect(areResourcesSetup(mergedState)).toBeFalsy();
});
});