[x-pack/test/apm_api_integration] make registry a service (#116365)

Co-authored-by: spalger <spalger@users.noreply.github.com>
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Dario Gieselaar <dario.gieselaar@elastic.co>
This commit is contained in:
Spencer 2021-11-05 10:22:55 -06:00 committed by GitHub
parent 7504668f8b
commit 62be2737bc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
72 changed files with 350 additions and 307 deletions

View file

@ -27,6 +27,7 @@ export async function cleanWriteTargets({
index: targets, index: targets,
allow_no_indices: true, allow_no_indices: true,
conflicts: 'proceed', conflicts: 'proceed',
refresh: true,
body: { body: {
query: { query: {
match_all: {}, match_all: {},

View file

@ -78,18 +78,33 @@ export class FunctionalTestRunner {
// replace the function of custom service providers so that they return // replace the function of custom service providers so that they return
// promise-like objects which never resolve, essentially disabling them // promise-like objects which never resolve, essentially disabling them
// allowing us to load the test files and populate the mocha suites // allowing us to load the test files and populate the mocha suites
const readStubbedProviderSpec = (type: string, providers: any) => const readStubbedProviderSpec = (type: string, providers: any, skip: string[]) =>
readProviderSpec(type, providers).map((p) => ({ readProviderSpec(type, providers).map((p) => ({
...p, ...p,
fn: () => ({ fn: skip.includes(p.name)
then: () => {}, ? (...args: unknown[]) => {
}), const result = p.fn(...args);
if ('then' in result) {
throw new Error(
`Provider [${p.name}] returns a promise so it can't loaded during test analysis`
);
}
return result;
}
: () => ({
then: () => {},
}),
})); }));
const providers = new ProviderCollection(this.log, [ const providers = new ProviderCollection(this.log, [
...coreProviders, ...coreProviders,
...readStubbedProviderSpec('Service', config.get('services')), ...readStubbedProviderSpec(
...readStubbedProviderSpec('PageObject', config.get('pageObjects')), 'Service',
config.get('services'),
config.get('servicesRequiredForTestAnalysis')
),
...readStubbedProviderSpec('PageObject', config.get('pageObjects'), []),
]); ]);
const mocha = await setupMocha(this.lifecycle, this.log, config, providers); const mocha = await setupMocha(this.lifecycle, this.log, config, providers);

View file

@ -89,6 +89,7 @@ export const schema = Joi.object()
}) })
.default(), .default(),
servicesRequiredForTestAnalysis: Joi.array().items(Joi.string()).default([]),
services: Joi.object().pattern(ID_PATTERN, Joi.func().required()).default(), services: Joi.object().pattern(ID_PATTERN, Joi.func().required()).default(),
pageObjects: Joi.object().pattern(ID_PATTERN, Joi.func().required()).default(), pageObjects: Joi.object().pattern(ID_PATTERN, Joi.func().required()).default(),

View file

@ -26,26 +26,30 @@ export function transformDataToMetricsChart(
title: chartBase.title, title: chartBase.title,
key: chartBase.key, key: chartBase.key,
yUnit: chartBase.yUnit, yUnit: chartBase.yUnit,
series: Object.keys(chartBase.series).map((seriesKey, i) => { series:
const overallValue = aggregations?.[seriesKey]?.value; result.hits.total.value > 0
? Object.keys(chartBase.series).map((seriesKey, i) => {
const overallValue = aggregations?.[seriesKey]?.value;
return {
title: chartBase.series[seriesKey].title,
key: seriesKey,
type: chartBase.type,
color:
chartBase.series[seriesKey].color || getVizColorForIndex(i, theme),
overallValue,
data:
timeseriesData?.buckets.map((bucket) => {
const { value } = bucket[seriesKey];
const y = value === null || isNaN(value) ? null : value;
return { return {
x: bucket.key, title: chartBase.series[seriesKey].title,
y, key: seriesKey,
type: chartBase.type,
color:
chartBase.series[seriesKey].color ||
getVizColorForIndex(i, theme),
overallValue,
data:
timeseriesData?.buckets.map((bucket) => {
const { value } = bucket[seriesKey];
const y = value === null || isNaN(value) ? null : value;
return {
x: bucket.key,
y,
};
}) || [],
}; };
}) || [], })
}; : [],
}),
}; };
} }

View file

@ -98,6 +98,9 @@ Object {
}, },
}, },
"size": 1, "size": 1,
"sort": Object {
"_score": "desc",
},
}, },
"terminate_after": 1, "terminate_after": 1,
} }

View file

@ -13,7 +13,6 @@ import {
} from '../../../common/elasticsearch_fieldnames'; } from '../../../common/elasticsearch_fieldnames';
import { rangeQuery } from '../../../../observability/server'; import { rangeQuery } from '../../../../observability/server';
import { Setup } from '../helpers/setup_request'; import { Setup } from '../helpers/setup_request';
import { getProcessorEventForTransactions } from '../helpers/transactions';
interface ServiceAgent { interface ServiceAgent {
agent?: { agent?: {
@ -29,13 +28,11 @@ interface ServiceAgent {
export async function getServiceAgent({ export async function getServiceAgent({
serviceName, serviceName,
setup, setup,
searchAggregatedTransactions,
start, start,
end, end,
}: { }: {
serviceName: string; serviceName: string;
setup: Setup; setup: Setup;
searchAggregatedTransactions: boolean;
start: number; start: number;
end: number; end: number;
}) { }) {
@ -46,7 +43,7 @@ export async function getServiceAgent({
apm: { apm: {
events: [ events: [
ProcessorEvent.error, ProcessorEvent.error,
getProcessorEventForTransactions(searchAggregatedTransactions), ProcessorEvent.transaction,
ProcessorEvent.metric, ProcessorEvent.metric,
], ],
}, },
@ -71,6 +68,9 @@ export async function getServiceAgent({
}, },
}, },
}, },
sort: {
_score: 'desc' as const,
},
}, },
}; };

View file

@ -28,7 +28,6 @@ describe('services queries', () => {
getServiceAgent({ getServiceAgent({
serviceName: 'foo', serviceName: 'foo',
setup, setup,
searchAggregatedTransactions: false,
start: 0, start: 0,
end: 50000, end: 50000,
}) })

View file

@ -191,18 +191,9 @@ const serviceAgentRoute = createApmServerRoute({
const { serviceName } = params.path; const { serviceName } = params.path;
const { start, end } = params.query; const { start, end } = params.query;
const searchAggregatedTransactions = await getSearchAggregatedTransactions({
apmEventClient: setup.apmEventClient,
config: setup.config,
start,
end,
kuery: '',
});
return getServiceAgent({ return getServiceAgent({
serviceName, serviceName,
setup, setup,
searchAggregatedTransactions,
start, start,
end, end,
}); });

View file

@ -14,10 +14,10 @@ import { PromiseReturnType } from '../../../plugins/observability/typings/common
import { createApmUser, APM_TEST_PASSWORD, ApmUser } from './authentication'; import { createApmUser, APM_TEST_PASSWORD, ApmUser } from './authentication';
import { APMFtrConfigName } from '../configs'; import { APMFtrConfigName } from '../configs';
import { createApmApiClient } from './apm_api_supertest'; import { createApmApiClient } from './apm_api_supertest';
import { registry } from './registry'; import { RegistryProvider } from './registry';
import { synthtraceEsClientService } from './synthtrace_es_client_service'; import { synthtraceEsClientService } from './synthtrace_es_client_service';
interface Config { export interface ApmFtrConfig {
name: APMFtrConfigName; name: APMFtrConfigName;
license: 'basic' | 'trial'; license: 'basic' | 'trial';
kibanaConfig?: Record<string, string | string[]>; kibanaConfig?: Record<string, string | string[]>;
@ -58,7 +58,7 @@ async function getApmApiClient(
export type CreateTestConfig = ReturnType<typeof createTestConfig>; export type CreateTestConfig = ReturnType<typeof createTestConfig>;
export function createTestConfig(config: Config) { export function createTestConfig(config: ApmFtrConfig) {
const { license, name, kibanaConfig } = config; const { license, name, kibanaConfig } = config;
return async ({ readConfigFile }: FtrConfigProviderContext) => { return async ({ readConfigFile }: FtrConfigProviderContext) => {
@ -70,13 +70,14 @@ export function createTestConfig(config: Config) {
const servers = xPackAPITestsConfig.get('servers'); const servers = xPackAPITestsConfig.get('servers');
const kibanaServer = servers.kibana; const kibanaServer = servers.kibana;
registry.init(config.name);
return { return {
testFiles: [require.resolve('../tests')], testFiles: [require.resolve('../tests')],
servers, servers,
servicesRequiredForTestAnalysis: ['apmFtrConfig', 'registry'],
services: { services: {
...services, ...services,
apmFtrConfig: () => config,
registry: RegistryProvider,
synthtraceEsClient: synthtraceEsClientService, synthtraceEsClient: synthtraceEsClientService,
apmApiClient: async (context: InheritedFtrProviderContext) => { apmApiClient: async (context: InheritedFtrProviderContext) => {
const security = context.getService('security'); const security = context.getService('security');

View file

@ -28,168 +28,165 @@ interface RunCondition {
archives: ArchiveName[]; archives: ArchiveName[];
} }
const callbacks: Array< export function RegistryProvider({ getService }: FtrProviderContext) {
RunCondition & { const apmFtrConfig = getService('apmFtrConfig');
runs: Array<{
cb: () => void;
}>;
}
> = [];
let configName: APMFtrConfigName | undefined; const callbacks: Array<
RunCondition & {
let running: boolean = false; runs: Array<{
cb: () => void;
function when( }>;
title: string,
conditions: RunCondition | RunCondition[],
callback: (condition: RunCondition) => void,
skip?: boolean
) {
const allConditions = castArray(conditions);
if (!allConditions.length) {
throw new Error('At least one condition should be defined');
}
if (running) {
throw new Error("Can't add tests when running");
}
const frame = maybe(callsites()[1]);
const file = frame?.getFileName();
if (!file) {
throw new Error('Could not infer file for suite');
}
allConditions.forEach((matchedCondition) => {
callbacks.push({
...matchedCondition,
runs: [
{
cb: () => {
const suite: ReturnType<typeof describe> = (skip ? describe.skip : describe)(
title,
() => {
callback(matchedCondition);
}
) as any;
suite.file = file;
suite.eachTest((test) => {
test.file = file;
});
},
},
],
});
});
}
when.skip = (
title: string,
conditions: RunCondition | RunCondition[],
callback: (condition: RunCondition) => void
) => {
when(title, conditions, callback, true);
};
export const registry = {
init: (config: APMFtrConfigName) => {
configName = config;
callbacks.length = 0;
running = false;
},
when,
run: (context: FtrProviderContext) => {
if (!configName) {
throw new Error(`registry was not init() before running`);
} }
running = true; > = [];
const esArchiver = context.getService('esArchiver');
const logger = context.getService('log');
const supertest = context.getService('legacySupertestAsApmWriteUser'); let running: boolean = false;
const logWithTimer = () => { function when(
const start = process.hrtime(); title: string,
conditions: RunCondition | RunCondition[],
callback: (condition: RunCondition) => void,
skip?: boolean
) {
const allConditions = castArray(conditions);
return (message: string) => { if (!allConditions.length) {
const diff = process.hrtime(start); throw new Error('At least one condition should be defined');
const time = `${Math.round(diff[0] * 1000 + diff[1] / 1e6)}ms`; }
logger.info(`(${time}) ${message}`);
if (running) {
throw new Error("Can't add tests when running");
}
const frame = maybe(callsites()[1]);
const file = frame?.getFileName();
if (!file) {
throw new Error('Could not infer file for suite');
}
allConditions.forEach((matchedCondition) => {
callbacks.push({
...matchedCondition,
runs: [
{
cb: () => {
const suite: ReturnType<typeof describe> = (skip ? describe.skip : describe)(
title,
() => {
callback(matchedCondition);
}
) as any;
suite.file = file;
suite.eachTest((test) => {
test.file = file;
});
},
},
],
});
});
}
when.skip = (
title: string,
conditions: RunCondition | RunCondition[],
callback: (condition: RunCondition) => void
) => {
when(title, conditions, callback, true);
};
const registry = {
when,
run: () => {
running = true;
const esArchiver = getService('esArchiver');
const logger = getService('log');
const supertest = getService('legacySupertestAsApmWriteUser');
const logWithTimer = () => {
const start = process.hrtime();
return (message: string) => {
const diff = process.hrtime(start);
const time = `${Math.round(diff[0] * 1000 + diff[1] / 1e6)}ms`;
logger.info(`(${time}) ${message}`);
};
}; };
};
const groups = joinByKey(callbacks, ['config', 'archives'], (a, b) => ({ const groups = joinByKey(callbacks, ['config', 'archives'], (a, b) => ({
...a, ...a,
...b, ...b,
runs: a.runs.concat(b.runs), runs: a.runs.concat(b.runs),
})); }));
callbacks.length = 0; callbacks.length = 0;
const byConfig = groupBy(groups, 'config'); const byConfig = groupBy(groups, 'config');
Object.keys(byConfig).forEach((config) => { Object.keys(byConfig).forEach((config) => {
const groupsForConfig = byConfig[config]; const groupsForConfig = byConfig[config];
// register suites for other configs, but skip them so tests are marked as such // register suites for other configs, but skip them so tests are marked as such
// and their snapshots are not marked as obsolete // and their snapshots are not marked as obsolete
(config === configName ? describe : describe.skip)(config, () => { (config === apmFtrConfig.name ? describe : describe.skip)(config, () => {
groupsForConfig.forEach((group) => { groupsForConfig.forEach((group) => {
const { runs, ...condition } = group; const { runs, ...condition } = group;
const runBefore = async () => { const runBefore = async () => {
const log = logWithTimer(); const log = logWithTimer();
for (const archiveName of condition.archives) { for (const archiveName of condition.archives) {
log(`Loading ${archiveName}`); log(`Loading ${archiveName}`);
await esArchiver.load( await esArchiver.load(
Path.join( Path.join(
'x-pack/test/apm_api_integration/common/fixtures/es_archiver', 'x-pack/test/apm_api_integration/common/fixtures/es_archiver',
archiveName archiveName
) )
); );
// sync jobs from .ml-config to .kibana SOs // sync jobs from .ml-config to .kibana SOs
await supertest.get('/api/ml/saved_objects/sync').set('kbn-xsrf', 'foo'); await supertest.get('/api/ml/saved_objects/sync').set('kbn-xsrf', 'foo');
} }
if (condition.archives.length) { if (condition.archives.length) {
log('Loaded all archives'); log('Loaded all archives');
} }
}; };
const runAfter = async () => { const runAfter = async () => {
const log = logWithTimer(); const log = logWithTimer();
for (const archiveName of condition.archives) { for (const archiveName of condition.archives) {
log(`Unloading ${archiveName}`); log(`Unloading ${archiveName}`);
await esArchiver.unload( await esArchiver.unload(
Path.join( Path.join(
'x-pack/test/apm_api_integration/common/fixtures/es_archiver', 'x-pack/test/apm_api_integration/common/fixtures/es_archiver',
archiveName archiveName
) )
); );
} }
if (condition.archives.length) { if (condition.archives.length) {
log('Unloaded all archives'); log('Unloaded all archives');
} }
}; };
describe(condition.archives.join(',') || 'no data', () => { describe(condition.archives.join(',') || 'no data', () => {
before(runBefore); before(runBefore);
runs.forEach((run) => { runs.forEach((run) => {
run.cb(); run.cb();
});
after(runAfter);
}); });
after(runAfter);
}); });
}); });
}); });
});
running = false; running = false;
}, },
}; };
return registry;
}

View file

@ -8,9 +8,9 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import archives from '../../common/fixtures/es_archiver/archives_metadata'; import archives from '../../common/fixtures/es_archiver/archives_metadata';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const archiveName = 'apm_8.0.0'; const archiveName = 'apm_8.0.0';
const { end } = archives[archiveName]; const { end } = archives[archiveName];

View file

@ -18,7 +18,6 @@ import {
} from '@kbn/rule-data-utils'; } from '@kbn/rule-data-utils';
import { merge, omit } from 'lodash'; import { merge, omit } from 'lodash';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
interface Alert { interface Alert {
schedule: { schedule: {
@ -36,6 +35,7 @@ interface Alert {
} }
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmWriteUser'); const supertest = getService('legacySupertestAsApmWriteUser');
const es = getService('es'); const es = getService('es');

View file

@ -14,10 +14,10 @@ import type { RawSearchStrategyClientParams } from '../../../../plugins/apm/comm
import { APM_SEARCH_STRATEGIES } from '../../../../plugins/apm/common/search_strategies/constants'; import { APM_SEARCH_STRATEGIES } from '../../../../plugins/apm/common/search_strategies/constants';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
import { parseBfetchResponse } from '../../common/utils/parse_b_fetch'; import { parseBfetchResponse } from '../../common/utils/parse_b_fetch';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const retry = getService('retry'); const retry = getService('retry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
@ -45,7 +45,7 @@ export default function ApiTest({ getService }: FtrProviderContext) {
}; };
registry.when('failed transactions without data', { config: 'trial', archives: [] }, () => { registry.when('failed transactions without data', { config: 'trial', archives: [] }, () => {
it('queries the search strategy and returns results', async () => { it.skip('queries the search strategy and returns results', async () => {
const intialResponse = await supertest const intialResponse = await supertest
.post(`/internal/bsearch`) .post(`/internal/bsearch`)
.set('kbn-xsrf', 'foo') .set('kbn-xsrf', 'foo')
@ -134,7 +134,7 @@ export default function ApiTest({ getService }: FtrProviderContext) {
}); });
registry.when('failed transactions with data', { config: 'trial', archives: ['8.0.0'] }, () => { registry.when('failed transactions with data', { config: 'trial', archives: ['8.0.0'] }, () => {
it('queries the search strategy and returns results', async () => { it.skip('queries the search strategy and returns results', async () => {
const intialResponse = await supertest const intialResponse = await supertest
.post(`/internal/bsearch`) .post(`/internal/bsearch`)
.set('kbn-xsrf', 'foo') .set('kbn-xsrf', 'foo')

View file

@ -14,10 +14,10 @@ import type { RawSearchStrategyClientParams } from '../../../../plugins/apm/comm
import { APM_SEARCH_STRATEGIES } from '../../../../plugins/apm/common/search_strategies/constants'; import { APM_SEARCH_STRATEGIES } from '../../../../plugins/apm/common/search_strategies/constants';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
import { parseBfetchResponse } from '../../common/utils/parse_b_fetch'; import { parseBfetchResponse } from '../../common/utils/parse_b_fetch';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const retry = getService('retry'); const retry = getService('retry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
@ -144,7 +144,7 @@ export default function ApiTest({ getService }: FtrProviderContext) {
{ config: 'trial', archives: ['8.0.0'] }, { config: 'trial', archives: ['8.0.0'] },
() => { () => {
// putting this into a single `it` because the responses depend on each other // putting this into a single `it` because the responses depend on each other
it('queries the search strategy and returns results', async () => { it.skip('queries the search strategy and returns results', async () => {
const intialResponse = await supertest const intialResponse = await supertest
.post(`/internal/bsearch`) .post(`/internal/bsearch`)
.set('kbn-xsrf', 'foo') .set('kbn-xsrf', 'foo')

View file

@ -7,9 +7,9 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function rumServicesApiTests({ getService }: FtrProviderContext) { export default function rumServicesApiTests({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
registry.when('CSM Services without data', { config: 'trial', archives: [] }, () => { registry.when('CSM Services without data', { config: 'trial', archives: [] }, () => {

View file

@ -7,9 +7,9 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function rumHasDataApiTests({ getService }: FtrProviderContext) { export default function rumHasDataApiTests({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
registry.when('has_rum_data without data', { config: 'trial', archives: [] }, () => { registry.when('has_rum_data without data', { config: 'trial', archives: [] }, () => {

View file

@ -7,9 +7,9 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function rumJsErrorsApiTests({ getService }: FtrProviderContext) { export default function rumJsErrorsApiTests({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
registry.when('CSM JS errors with data', { config: 'trial', archives: [] }, () => { registry.when('CSM JS errors with data', { config: 'trial', archives: [] }, () => {

View file

@ -7,9 +7,9 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function rumServicesApiTests({ getService }: FtrProviderContext) { export default function rumServicesApiTests({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
registry.when('CSM long task metrics without data', { config: 'trial', archives: [] }, () => { registry.when('CSM long task metrics without data', { config: 'trial', archives: [] }, () => {

View file

@ -7,9 +7,9 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function rumServicesApiTests({ getService }: FtrProviderContext) { export default function rumServicesApiTests({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
registry.when('UX page load dist without data', { config: 'trial', archives: [] }, () => { registry.when('UX page load dist without data', { config: 'trial', archives: [] }, () => {

View file

@ -7,9 +7,9 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function rumServicesApiTests({ getService }: FtrProviderContext) { export default function rumServicesApiTests({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
registry.when('CSM page views without data', { config: 'trial', archives: [] }, () => { registry.when('CSM page views without data', { config: 'trial', archives: [] }, () => {

View file

@ -7,9 +7,9 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function rumServicesApiTests({ getService }: FtrProviderContext) { export default function rumServicesApiTests({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
registry.when('CSM url search api without data', { config: 'trial', archives: [] }, () => { registry.when('CSM url search api without data', { config: 'trial', archives: [] }, () => {

View file

@ -7,9 +7,9 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function rumServicesApiTests({ getService }: FtrProviderContext) { export default function rumServicesApiTests({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
registry.when('CSM web core vitals without data', { config: 'trial', archives: [] }, () => { registry.when('CSM web core vitals without data', { config: 'trial', archives: [] }, () => {

View file

@ -6,10 +6,10 @@
*/ */
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
import { dataConfig, generateData } from './generate_data'; import { dataConfig, generateData } from './generate_data';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const synthtraceEsClient = getService('synthtraceEsClient'); const synthtraceEsClient = getService('synthtraceEsClient');

View file

@ -7,7 +7,6 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { APIReturnType } from '../../../../plugins/apm/public/services/rest/createCallApmApi'; import { APIReturnType } from '../../../../plugins/apm/public/services/rest/createCallApmApi';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
import { dataConfig, generateData } from './generate_data'; import { dataConfig, generateData } from './generate_data';
import { NodeType, BackendNode } from '../../../../plugins/apm/common/connections'; import { NodeType, BackendNode } from '../../../../plugins/apm/common/connections';
import { roundNumber } from '../../utils'; import { roundNumber } from '../../utils';
@ -15,6 +14,7 @@ import { roundNumber } from '../../utils';
type TopDependencies = APIReturnType<'GET /internal/apm/backends/top_backends'>; type TopDependencies = APIReturnType<'GET /internal/apm/backends/top_backends'>;
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const synthtraceEsClient = getService('synthtraceEsClient'); const synthtraceEsClient = getService('synthtraceEsClient');

View file

@ -11,9 +11,9 @@ import { LatencyAggregationType } from '../../../../plugins/apm/common/latency_a
import { isFiniteNumber } from '../../../../plugins/apm/common/utils/is_finite_number'; import { isFiniteNumber } from '../../../../plugins/apm/common/utils/is_finite_number';
import { PromiseReturnType } from '../../../../plugins/observability/typings/common'; import { PromiseReturnType } from '../../../../plugins/observability/typings/common';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const synthtraceEsClient = getService('synthtraceEsClient'); const synthtraceEsClient = getService('synthtraceEsClient');

View file

@ -13,13 +13,13 @@ import {
} from '../../../../plugins/apm/public/services/rest/createCallApmApi'; } from '../../../../plugins/apm/public/services/rest/createCallApmApi';
import { RecursivePartial } from '../../../../plugins/apm/typings/common'; import { RecursivePartial } from '../../../../plugins/apm/typings/common';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
import { config, generateData } from './generate_data'; import { config, generateData } from './generate_data';
type ErrorsDistribution = type ErrorsDistribution =
APIReturnType<'GET /internal/apm/services/{serviceName}/errors/distribution'>; APIReturnType<'GET /internal/apm/services/{serviceName}/errors/distribution'>;
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const synthtraceEsClient = getService('synthtraceEsClient'); const synthtraceEsClient = getService('synthtraceEsClient');

View file

@ -12,11 +12,11 @@ import {
} from '../../../../plugins/apm/public/services/rest/createCallApmApi'; } from '../../../../plugins/apm/public/services/rest/createCallApmApi';
import { RecursivePartial } from '../../../../plugins/apm/typings/common'; import { RecursivePartial } from '../../../../plugins/apm/typings/common';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
type ErrorGroups = APIReturnType<'GET /internal/apm/services/{serviceName}/errors'>['errorGroups']; type ErrorGroups = APIReturnType<'GET /internal/apm/services/{serviceName}/errors'>['errorGroups'];
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const synthtraceEsClient = getService('synthtraceEsClient'); const synthtraceEsClient = getService('synthtraceEsClient');

View file

@ -11,13 +11,13 @@ import {
} from '../../../../plugins/apm/public/services/rest/createCallApmApi'; } from '../../../../plugins/apm/public/services/rest/createCallApmApi';
import { RecursivePartial } from '../../../../plugins/apm/typings/common'; import { RecursivePartial } from '../../../../plugins/apm/typings/common';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
import { config, generateData } from './generate_data'; import { config, generateData } from './generate_data';
type ErrorsDistribution = type ErrorsDistribution =
APIReturnType<'GET /internal/apm/services/{serviceName}/errors/{groupId}'>; APIReturnType<'GET /internal/apm/services/{serviceName}/errors/{groupId}'>;
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const synthtraceEsClient = getService('synthtraceEsClient'); const synthtraceEsClient = getService('synthtraceEsClient');

View file

@ -8,9 +8,9 @@ import expect from '@kbn/expect';
import { PROCESSOR_EVENT } from '../../../../plugins/apm/common/elasticsearch_fieldnames'; import { PROCESSOR_EVENT } from '../../../../plugins/apm/common/elasticsearch_fieldnames';
import { ProcessorEvent } from '../../../../plugins/apm/common/processor_event'; import { ProcessorEvent } from '../../../../plugins/apm/common/processor_event';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const esClient = getService('es'); const esClient = getService('es');

View file

@ -7,9 +7,9 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { FtrProviderContext } from '../common/ftr_provider_context'; import { FtrProviderContext } from '../common/ftr_provider_context';
import { registry } from '../common/registry';
export default function featureControlsTests({ getService }: FtrProviderContext) { export default function featureControlsTests({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmWriteUser'); const supertest = getService('legacySupertestAsApmWriteUser');
const supertestWithoutAuth = getService('supertestWithoutAuth'); const supertestWithoutAuth = getService('supertestWithoutAuth');
const security = getService('security'); const security = getService('security');

View file

@ -7,9 +7,9 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('supertest'); const supertest = getService('supertest');
const archiveName = 'apm_8.0.0'; const archiveName = 'apm_8.0.0';

View file

@ -6,10 +6,9 @@
*/ */
import { FtrProviderContext } from '../common/ftr_provider_context'; import { FtrProviderContext } from '../common/ftr_provider_context';
import { registry } from '../common/registry';
export default function apmApiIntegrationTests(providerContext: FtrProviderContext) { export default function apmApiIntegrationTests({ getService, loadTestFile }: FtrProviderContext) {
const { loadTestFile } = providerContext; const registry = getService('registry');
describe('APM API tests', function () { describe('APM API tests', function () {
this.tags('ciGroup1'); this.tags('ciGroup1');
@ -263,6 +262,6 @@ export default function apmApiIntegrationTests(providerContext: FtrProviderConte
loadTestFile(require.resolve('./dependencies/top_dependencies')); loadTestFile(require.resolve('./dependencies/top_dependencies'));
}); });
registry.run(providerContext); registry.run();
}); });
} }

View file

@ -7,11 +7,11 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata'; import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata';
export default function customLinksTests({ getService }: FtrProviderContext) { export default function customLinksTests({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const archiveName = 'apm_8.0.0'; const archiveName = 'apm_8.0.0';
@ -49,7 +49,7 @@ export default function customLinksTests({ getService }: FtrProviderContext) {
}, },
}); });
expect(status).to.be(200); expect(status).to.be(200);
expect(body._inspect?.length).to.be(1); expect(body._inspect).not.to.be.empty();
// @ts-expect-error // @ts-expect-error
expect(Object.keys(body._inspect[0])).to.eql([ expect(Object.keys(body._inspect[0])).to.eql([

View file

@ -11,9 +11,9 @@ import { LatencyAggregationType } from '../../../../plugins/apm/common/latency_a
import { isFiniteNumber } from '../../../../plugins/apm/common/utils/is_finite_number'; import { isFiniteNumber } from '../../../../plugins/apm/common/utils/is_finite_number';
import { PromiseReturnType } from '../../../../plugins/observability/typings/common'; import { PromiseReturnType } from '../../../../plugins/observability/typings/common';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const synthtraceEsClient = getService('synthtraceEsClient'); const synthtraceEsClient = getService('synthtraceEsClient');

View file

@ -10,7 +10,6 @@ import { first } from 'lodash';
import { MetricsChartsByAgentAPIResponse } from '../../../../plugins/apm/server/lib/metrics/get_metrics_chart_data_by_agent'; import { MetricsChartsByAgentAPIResponse } from '../../../../plugins/apm/server/lib/metrics/get_metrics_chart_data_by_agent';
import { GenericMetricsChart } from '../../../../plugins/apm/server/lib/metrics/transform_metrics_chart'; import { GenericMetricsChart } from '../../../../plugins/apm/server/lib/metrics/transform_metrics_chart';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
interface ChartResponse { interface ChartResponse {
body: MetricsChartsByAgentAPIResponse; body: MetricsChartsByAgentAPIResponse;
@ -18,6 +17,7 @@ interface ChartResponse {
} }
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
registry.when( registry.when(

View file

@ -8,9 +8,9 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
registry.when( registry.when(

View file

@ -8,11 +8,11 @@ import { service, timerange } from '@elastic/apm-synthtrace';
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { meanBy, sumBy } from 'lodash'; import { meanBy, sumBy } from 'lodash';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
import { PromiseReturnType } from '../../../../plugins/observability/typings/common'; import { PromiseReturnType } from '../../../../plugins/observability/typings/common';
import { roundNumber } from '../../utils'; import { roundNumber } from '../../utils';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const synthtraceEsClient = getService('synthtraceEsClient'); const synthtraceEsClient = getService('synthtraceEsClient');

View file

@ -12,9 +12,9 @@ import { isEmpty, orderBy, uniq } from 'lodash';
import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata'; import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata';
import { PromiseReturnType } from '../../../../plugins/observability/typings/common'; import { PromiseReturnType } from '../../../../plugins/observability/typings/common';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function serviceMapsApiTests({ getService }: FtrProviderContext) { export default function serviceMapsApiTests({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
const supertestAsApmReadUserWithoutMlAccess = getService( const supertestAsApmReadUserWithoutMlAccess = getService(
'legacySupertestAsApmReadUserWithoutMlAccess' 'legacySupertestAsApmReadUserWithoutMlAccess'

View file

@ -2,7 +2,6 @@
exports[`APM API tests basic apm_8.0.0 Instance details when data is loaded fetch instance details return the correct data 1`] = ` exports[`APM API tests basic apm_8.0.0 Instance details when data is loaded fetch instance details return the correct data 1`] = `
Object { Object {
"@timestamp": "2021-08-03T06:57:50.204Z",
"agent": Object { "agent": Object {
"ephemeral_id": "2745d454-f57f-4473-a09b-fe6bef295860", "ephemeral_id": "2745d454-f57f-4473-a09b-fe6bef295860",
"name": "java", "name": "java",

View file

@ -17,10 +17,10 @@ import {
import { APIReturnType } from '../../../../../plugins/apm/public/services/rest/createCallApmApi'; import { APIReturnType } from '../../../../../plugins/apm/public/services/rest/createCallApmApi';
import archives from '../../../common/fixtures/es_archiver/archives_metadata'; import archives from '../../../common/fixtures/es_archiver/archives_metadata';
import { FtrProviderContext } from '../../../common/ftr_provider_context'; import { FtrProviderContext } from '../../../common/ftr_provider_context';
import { registry } from '../../../common/registry';
import { apmDependenciesMapping, createServiceDependencyDocs } from './es_utils'; import { apmDependenciesMapping, createServiceDependencyDocs } from './es_utils';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const es = getService('es'); const es = getService('es');

View file

@ -6,9 +6,9 @@
*/ */
import url from 'url'; import url from 'url';
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { omit } from 'lodash';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import archives from '../../common/fixtures/es_archiver/archives_metadata'; import archives from '../../common/fixtures/es_archiver/archives_metadata';
import { registry } from '../../common/registry';
import { APIReturnType } from '../../../../plugins/apm/public/services/rest/createCallApmApi'; import { APIReturnType } from '../../../../plugins/apm/public/services/rest/createCallApmApi';
import { getServiceNodeIds } from './get_service_node_ids'; import { getServiceNodeIds } from './get_service_node_ids';
import { createApmApiClient } from '../../common/apm_api_supertest'; import { createApmApiClient } from '../../common/apm_api_supertest';
@ -17,6 +17,7 @@ type ServiceOverviewInstanceDetails =
APIReturnType<'GET /internal/apm/services/{serviceName}/service_overview_instances/details/{serviceNodeName}'>; APIReturnType<'GET /internal/apm/services/{serviceName}/service_overview_instances/details/{serviceNodeName}'>;
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
const apmApiSupertest = createApmApiClient(supertest); const apmApiSupertest = createApmApiClient(supertest);
@ -77,7 +78,7 @@ export default function ApiTest({ getService }: FtrProviderContext) {
}); });
it('return the correct data', () => { it('return the correct data', () => {
expectSnapshot(response.body).toMatch(); expectSnapshot(omit(response.body, '@timestamp')).toMatch();
}); });
}); });
} }

View file

@ -13,11 +13,11 @@ import { isFiniteNumber } from '../../../../plugins/apm/common/utils/is_finite_n
import { APIReturnType } from '../../../../plugins/apm/public/services/rest/createCallApmApi'; import { APIReturnType } from '../../../../plugins/apm/public/services/rest/createCallApmApi';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import archives from '../../common/fixtures/es_archiver/archives_metadata'; import archives from '../../common/fixtures/es_archiver/archives_metadata';
import { registry } from '../../common/registry';
import { createApmApiClient } from '../../common/apm_api_supertest'; import { createApmApiClient } from '../../common/apm_api_supertest';
import { getServiceNodeIds } from './get_service_node_ids'; import { getServiceNodeIds } from './get_service_node_ids';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
const apmApiSupertest = createApmApiClient(supertest); const apmApiSupertest = createApmApiClient(supertest);

View file

@ -13,13 +13,13 @@ import { APIReturnType } from '../../../../plugins/apm/public/services/rest/crea
import { isFiniteNumber } from '../../../../plugins/apm/common/utils/is_finite_number'; import { isFiniteNumber } from '../../../../plugins/apm/common/utils/is_finite_number';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import archives from '../../common/fixtures/es_archiver/archives_metadata'; import archives from '../../common/fixtures/es_archiver/archives_metadata';
import { registry } from '../../common/registry';
import { LatencyAggregationType } from '../../../../plugins/apm/common/latency_aggregation_types'; import { LatencyAggregationType } from '../../../../plugins/apm/common/latency_aggregation_types';
import { ENVIRONMENT_ALL } from '../../../../plugins/apm/common/environment_filter_values'; import { ENVIRONMENT_ALL } from '../../../../plugins/apm/common/environment_filter_values';
import { SERVICE_NODE_NAME_MISSING } from '../../../../plugins/apm/common/service_nodes'; import { SERVICE_NODE_NAME_MISSING } from '../../../../plugins/apm/common/service_nodes';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const synthtraceEsClient = getService('synthtraceEsClient'); const synthtraceEsClient = getService('synthtraceEsClient');

View file

@ -8,9 +8,9 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import archives from '../../common/fixtures/es_archiver/archives_metadata'; import archives from '../../common/fixtures/es_archiver/archives_metadata';
import { registry } from '../../common/registry';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
const archiveName = 'apm_8.0.0'; const archiveName = 'apm_8.0.0';

View file

@ -9,11 +9,11 @@ import expect from '@kbn/expect';
import { merge, cloneDeep, isPlainObject } from 'lodash'; import { merge, cloneDeep, isPlainObject } from 'lodash';
import { JsonObject } from '@kbn/utility-types'; import { JsonObject } from '@kbn/utility-types';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
const DEFAULT_INDEX_NAME = 'observability-annotations'; const DEFAULT_INDEX_NAME = 'observability-annotations';
export default function annotationApiTests({ getService }: FtrProviderContext) { export default function annotationApiTests({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertestRead = getService('legacySupertestAsApmReadUser'); const supertestRead = getService('legacySupertestAsApmReadUser');
const supertestWrite = getService('legacySupertestAsApmAnnotationsWriteUser'); const supertestWrite = getService('legacySupertestAsApmAnnotationsWriteUser');
const es = getService('es'); const es = getService('es');

View file

@ -9,9 +9,9 @@ import expect from '@kbn/expect';
import { APIReturnType } from '../../../../plugins/apm/public/services/rest/createCallApmApi'; import { APIReturnType } from '../../../../plugins/apm/public/services/rest/createCallApmApi';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function annotationApiTests({ getService }: FtrProviderContext) { export default function annotationApiTests({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const es = getService('es'); const es = getService('es');

View file

@ -15,7 +15,6 @@ import {
} from '../../../../../plugins/apm/public/services/rest/createCallApmApi'; } from '../../../../../plugins/apm/public/services/rest/createCallApmApi';
import { RecursivePartial } from '../../../../../plugins/apm/typings/common'; import { RecursivePartial } from '../../../../../plugins/apm/typings/common';
import { FtrProviderContext } from '../../../common/ftr_provider_context'; import { FtrProviderContext } from '../../../common/ftr_provider_context';
import { registry } from '../../../common/registry';
import { config, generateData } from './generate_data'; import { config, generateData } from './generate_data';
import { getErrorGroupIds } from './get_error_group_ids'; import { getErrorGroupIds } from './get_error_group_ids';
@ -23,6 +22,7 @@ type ErrorGroupsDetailedStatistics =
APIReturnType<'GET /internal/apm/services/{serviceName}/error_groups/detailed_statistics'>; APIReturnType<'GET /internal/apm/services/{serviceName}/error_groups/detailed_statistics'>;
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const synthtraceEsClient = getService('synthtraceEsClient'); const synthtraceEsClient = getService('synthtraceEsClient');

View file

@ -12,13 +12,13 @@ import {
} from '../../../../../plugins/apm/public/services/rest/createCallApmApi'; } from '../../../../../plugins/apm/public/services/rest/createCallApmApi';
import { RecursivePartial } from '../../../../../plugins/apm/typings/common'; import { RecursivePartial } from '../../../../../plugins/apm/typings/common';
import { FtrProviderContext } from '../../../common/ftr_provider_context'; import { FtrProviderContext } from '../../../common/ftr_provider_context';
import { registry } from '../../../common/registry';
import { generateData, config } from './generate_data'; import { generateData, config } from './generate_data';
type ErrorGroupsMainStatistics = type ErrorGroupsMainStatistics =
APIReturnType<'GET /internal/apm/services/{serviceName}/error_groups/main_statistics'>; APIReturnType<'GET /internal/apm/services/{serviceName}/error_groups/main_statistics'>;
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const synthtraceEsClient = getService('synthtraceEsClient'); const synthtraceEsClient = getService('synthtraceEsClient');

View file

@ -9,9 +9,9 @@ import expect from '@kbn/expect';
import url from 'url'; import url from 'url';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import archives from '../../common/fixtures/es_archiver/archives_metadata'; import archives from '../../common/fixtures/es_archiver/archives_metadata';
import { registry } from '../../common/registry';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
const archiveName = 'apm_8.0.0'; const archiveName = 'apm_8.0.0';

View file

@ -9,9 +9,9 @@ import expect from '@kbn/expect';
import url from 'url'; import url from 'url';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import archives from '../../common/fixtures/es_archiver/archives_metadata'; import archives from '../../common/fixtures/es_archiver/archives_metadata';
import { registry } from '../../common/registry';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
const archiveName = 'apm_8.0.0'; const archiveName = 'apm_8.0.0';

View file

@ -7,7 +7,6 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import url from 'url'; import url from 'url';
import moment from 'moment'; import moment from 'moment';
import { registry } from '../../common/registry';
import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata'; import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { APIReturnType } from '../../../../plugins/apm/public/services/rest/createCallApmApi'; import { APIReturnType } from '../../../../plugins/apm/public/services/rest/createCallApmApi';
@ -17,6 +16,7 @@ type ServicesDetailedStatisticsReturn =
APIReturnType<'GET /internal/apm/services/detailed_statistics'>; APIReturnType<'GET /internal/apm/services/detailed_statistics'>;
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
const archiveName = 'apm_8.0.0'; const archiveName = 'apm_8.0.0';

View file

@ -16,12 +16,12 @@ import {
} from '../../../../plugins/apm/public/services/rest/createCallApmApi'; } from '../../../../plugins/apm/public/services/rest/createCallApmApi';
import { RecursivePartial } from '../../../../plugins/apm/typings/common'; import { RecursivePartial } from '../../../../plugins/apm/typings/common';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
import { roundNumber } from '../../utils'; import { roundNumber } from '../../utils';
type ThroughputReturn = APIReturnType<'GET /internal/apm/services/{serviceName}/throughput'>; type ThroughputReturn = APIReturnType<'GET /internal/apm/services/{serviceName}/throughput'>;
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const synthtraceEsClient = getService('synthtraceEsClient'); const synthtraceEsClient = getService('synthtraceEsClient');
@ -64,7 +64,7 @@ export default function ApiTest({ getService }: FtrProviderContext) {
}); });
registry.when( registry.when(
'data is loaded', 'Throughput when data is loaded',
{ config: 'basic', archives: ['apm_mappings_only_8.0.0'] }, { config: 'basic', archives: ['apm_mappings_only_8.0.0'] },
() => { () => {
describe('Throughput chart api', () => { describe('Throughput chart api', () => {

View file

@ -12,10 +12,10 @@ import { APIReturnType } from '../../../../plugins/apm/public/services/rest/crea
import { PromiseReturnType } from '../../../../plugins/observability/typings/common'; import { PromiseReturnType } from '../../../../plugins/observability/typings/common';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata'; import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata';
import { registry } from '../../common/registry';
import { ENVIRONMENT_ALL } from '../../../../plugins/apm/common/environment_filter_values'; import { ENVIRONMENT_ALL } from '../../../../plugins/apm/common/environment_filter_values';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');

View file

@ -8,9 +8,9 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata'; import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
const archiveName = 'apm_8.0.0'; const archiveName = 'apm_8.0.0';

View file

@ -5,15 +5,17 @@
* 2.0. * 2.0.
*/ */
import { inspect } from 'util';
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { omit, orderBy } from 'lodash'; import { omit, orderBy } from 'lodash';
import { AgentConfigurationIntake } from '../../../../plugins/apm/common/agent_configuration/configuration_types'; import { AgentConfigurationIntake } from '../../../../plugins/apm/common/agent_configuration/configuration_types';
import { AgentConfigSearchParams } from '../../../../plugins/apm/server/routes/settings/agent_configuration'; import { AgentConfigSearchParams } from '../../../../plugins/apm/server/routes/settings/agent_configuration';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function agentConfigurationTests({ getService }: FtrProviderContext) { export default function agentConfigurationTests({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const log = getService('log'); const log = getService('log');
@ -133,19 +135,19 @@ export default function agentConfigurationTests({ getService }: FtrProviderConte
it('can create and delete config', async () => { it('can create and delete config', async () => {
// assert that config does not exist // assert that config does not exist
await expectStatusCode(() => searchConfigurations(searchParams), 404); await expectMissing(() => searchConfigurations(searchParams));
// create config // create config
await createConfiguration(newConfig); await createConfiguration(newConfig);
// assert that config now exists // assert that config now exists
await expectStatusCode(() => searchConfigurations(searchParams), 200); await expectExists(() => searchConfigurations(searchParams));
// delete config // delete config
await deleteConfiguration(newConfig); await deleteConfiguration(newConfig);
// assert that config was deleted // assert that config was deleted
await expectStatusCode(() => searchConfigurations(searchParams), 404); await expectMissing(() => searchConfigurations(searchParams));
}); });
describe('when a configuration exists', () => { describe('when a configuration exists', () => {
@ -439,6 +441,16 @@ export default function agentConfigurationTests({ getService }: FtrProviderConte
}); });
} }
); );
async function expectExists(fn: () => ReturnType<typeof searchConfigurations>) {
const response = await fn();
expect(response.body).not.to.be.empty();
}
async function expectMissing(fn: () => ReturnType<typeof searchConfigurations>) {
const response = await fn();
expect(response.body).to.be.empty();
}
} }
async function waitFor(cb: () => Promise<boolean>, retries = 50): Promise<boolean> { async function waitFor(cb: () => Promise<boolean>, retries = 50): Promise<boolean> {
@ -464,10 +476,23 @@ async function expectStatusCode(
}>, }>,
statusCode: number statusCode: number
) { ) {
let res;
try { try {
const res = await fn(); res = await fn();
expect(res.status).to.be(statusCode);
} catch (e) { } catch (e) {
expect(e.res.status).to.be(statusCode); if (e && e.res && e.res.status) {
if (e.res.status === statusCode) {
return;
}
throw new Error(
`Expected a [${statusCode}] response, got [${e.res.status}]: ${inspect(e.res)}`
);
} else {
throw new Error(
`Unexpected rejection value, expected error with .res response property: ${inspect(e)}`
);
}
} }
expect(res.status).to.be(statusCode);
} }

View file

@ -6,10 +6,10 @@
*/ */
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { registry } from '../../../common/registry';
import { FtrProviderContext } from '../../../common/ftr_provider_context'; import { FtrProviderContext } from '../../../common/ftr_provider_context';
export default function apiTest({ getService }: FtrProviderContext) { export default function apiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const noAccessUser = getService('legacySupertestAsNoAccessUser'); const noAccessUser = getService('legacySupertestAsNoAccessUser');
const readUser = getService('legacySupertestAsApmReadUser'); const readUser = getService('legacySupertestAsApmReadUser');
const writeUser = getService('legacySupertestAsApmWriteUser'); const writeUser = getService('legacySupertestAsApmWriteUser');

View file

@ -6,10 +6,10 @@
*/ */
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { registry } from '../../../common/registry';
import { FtrProviderContext } from '../../../common/ftr_provider_context'; import { FtrProviderContext } from '../../../common/ftr_provider_context';
export default function apiTest({ getService }: FtrProviderContext) { export default function apiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const noAccessUser = getService('legacySupertestAsNoAccessUser'); const noAccessUser = getService('legacySupertestAsNoAccessUser');
function getJobs() { function getJobs() {

View file

@ -6,10 +6,10 @@
*/ */
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { registry } from '../../../common/registry';
import { FtrProviderContext } from '../../../common/ftr_provider_context'; import { FtrProviderContext } from '../../../common/ftr_provider_context';
export default function apiTest({ getService }: FtrProviderContext) { export default function apiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmReadUser = getService('legacySupertestAsApmReadUser'); const apmReadUser = getService('legacySupertestAsApmReadUser');
function getJobs() { function getJobs() {

View file

@ -7,10 +7,10 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { countBy } from 'lodash'; import { countBy } from 'lodash';
import { registry } from '../../../common/registry';
import { FtrProviderContext } from '../../../common/ftr_provider_context'; import { FtrProviderContext } from '../../../common/ftr_provider_context';
export default function apiTest({ getService }: FtrProviderContext) { export default function apiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const legacyWriteUserClient = getService('legacySupertestAsApmWriteUser'); const legacyWriteUserClient = getService('legacySupertestAsApmWriteUser');

View file

@ -8,10 +8,10 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { CustomLink } from '../../../../plugins/apm/common/custom_link/custom_link_types'; import { CustomLink } from '../../../../plugins/apm/common/custom_link/custom_link_types';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
import { ApmApiError } from '../../common/apm_api_supertest'; import { ApmApiError } from '../../common/apm_api_supertest';
export default function customLinksTests({ getService }: FtrProviderContext) { export default function customLinksTests({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const log = getService('log'); const log = getService('log');

View file

@ -10,9 +10,9 @@ import {
TRANSACTION_TYPE, TRANSACTION_TYPE,
} from '../../../../plugins/apm/common/elasticsearch_fieldnames'; } from '../../../../plugins/apm/common/elasticsearch_fieldnames';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function suggestionsTests({ getService }: FtrProviderContext) { export default function suggestionsTests({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const archiveName = 'apm_8.0.0'; const archiveName = 'apm_8.0.0';

View file

@ -10,10 +10,10 @@ import { meanBy, sumBy } from 'lodash';
import { BackendNode, ServiceNode } from '../../../../plugins/apm/common/connections'; import { BackendNode, ServiceNode } from '../../../../plugins/apm/common/connections';
import { PromiseReturnType } from '../../../../plugins/observability/typings/common'; import { PromiseReturnType } from '../../../../plugins/observability/typings/common';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
import { roundNumber } from '../../utils'; import { roundNumber } from '../../utils';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const synthtraceEsClient = getService('synthtraceEsClient'); const synthtraceEsClient = getService('synthtraceEsClient');

View file

@ -10,10 +10,10 @@ import { meanBy, sumBy } from 'lodash';
import { LatencyAggregationType } from '../../../../plugins/apm/common/latency_aggregation_types'; import { LatencyAggregationType } from '../../../../plugins/apm/common/latency_aggregation_types';
import { PromiseReturnType } from '../../../../plugins/observability/typings/common'; import { PromiseReturnType } from '../../../../plugins/observability/typings/common';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
import { roundNumber } from '../../utils'; import { roundNumber } from '../../utils';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const synthtraceEsClient = getService('synthtraceEsClient'); const synthtraceEsClient = getService('synthtraceEsClient');

View file

@ -9,9 +9,9 @@ import expect from '@kbn/expect';
import { sortBy } from 'lodash'; import { sortBy } from 'lodash';
import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata'; import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
const archiveName = 'apm_8.0.0'; const archiveName = 'apm_8.0.0';

View file

@ -8,10 +8,10 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata'; import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
import { createApmApiClient, SupertestReturnType } from '../../common/apm_api_supertest'; import { createApmApiClient, SupertestReturnType } from '../../common/apm_api_supertest';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('supertest'); const supertest = getService('supertest');
const apmApiSupertest = createApmApiClient(supertest); const apmApiSupertest = createApmApiClient(supertest);

View file

@ -8,9 +8,9 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata'; import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
const archiveName = 'apm_8.0.0'; const archiveName = 'apm_8.0.0';

View file

@ -12,12 +12,12 @@ import moment from 'moment';
import { APIReturnType } from '../../../../plugins/apm/public/services/rest/createCallApmApi'; import { APIReturnType } from '../../../../plugins/apm/public/services/rest/createCallApmApi';
import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata'; import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
type ErrorRate = type ErrorRate =
APIReturnType<'GET /internal/apm/services/{serviceName}/transactions/charts/error_rate'>; APIReturnType<'GET /internal/apm/services/{serviceName}/transactions/charts/error_rate'>;
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
const archiveName = 'apm_8.0.0'; const archiveName = 'apm_8.0.0';

View file

@ -12,12 +12,12 @@ import { APIReturnType } from '../../../../plugins/apm/public/services/rest/crea
import { PromiseReturnType } from '../../../../plugins/observability/typings/common'; import { PromiseReturnType } from '../../../../plugins/observability/typings/common';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata'; import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata';
import { registry } from '../../common/registry';
type LatencyChartReturnType = type LatencyChartReturnType =
APIReturnType<'GET /internal/apm/services/{serviceName}/transactions/charts/latency'>; APIReturnType<'GET /internal/apm/services/{serviceName}/transactions/charts/latency'>;
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
const archiveName = 'apm_8.0.0'; const archiveName = 'apm_8.0.0';

View file

@ -7,9 +7,9 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const endpoint = 'POST /internal/apm/latency/overall_distribution'; const endpoint = 'POST /internal/apm/latency/overall_distribution';

View file

@ -7,11 +7,13 @@
import expect from '@kbn/expect'; import expect from '@kbn/expect';
import qs from 'querystring'; import qs from 'querystring';
import { sortBy } from 'lodash';
import { APIReturnType } from '../../../../plugins/apm/public/services/rest/createCallApmApi';
import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata'; import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
const archiveName = 'apm_8.0.0'; const archiveName = 'apm_8.0.0';
@ -31,11 +33,13 @@ export default function ApiTest({ getService }: FtrProviderContext) {
{ config: 'basic', archives: [] }, { config: 'basic', archives: [] },
() => { () => {
it('handles empty state', async () => { it('handles empty state', async () => {
const response = await supertest.get(url); const response: {
body: APIReturnType<'GET /internal/apm/services/{serviceName}/transactions/traces/samples'>;
status: number;
} = await supertest.get(url);
expect(response.status).to.be(200); expect(response.status).to.be(200);
expect(response.body.noHits).to.be(true);
expect(response.body.traceSamples.length).to.be(0); expect(response.body.traceSamples.length).to.be(0);
}); });
} }
@ -45,14 +49,17 @@ export default function ApiTest({ getService }: FtrProviderContext) {
'Transaction trace samples response structure when data is loaded', 'Transaction trace samples response structure when data is loaded',
{ config: 'basic', archives: [archiveName] }, { config: 'basic', archives: [archiveName] },
() => { () => {
let response: any; let response: {
body: APIReturnType<'GET /internal/apm/services/{serviceName}/transactions/traces/samples'>;
status: number;
};
before(async () => { before(async () => {
response = await supertest.get(url); response = await supertest.get(url);
}); });
it('returns the correct metadata', () => { it('returns the correct metadata', () => {
expect(response.status).to.be(200); expect(response.status).to.be(200);
expect(response.body.noHits).to.be(false);
expect(response.body.traceSamples.length).to.be.greaterThan(0); expect(response.body.traceSamples.length).to.be.greaterThan(0);
}); });
@ -63,51 +70,15 @@ export default function ApiTest({ getService }: FtrProviderContext) {
it('returns the correct samples', () => { it('returns the correct samples', () => {
const { traceSamples } = response.body; const { traceSamples } = response.body;
expectSnapshot(traceSamples.sort((sample: any) => sample.traceId)).toMatchInline(` expectSnapshot(sortBy(traceSamples, (sample) => sample.traceId)).toMatchInline(`
Array [ Array [
Object {
"traceId": "5267685738bf75b68b16bf3426ba858c",
"transactionId": "5223f43bc3154c5a",
},
Object {
"traceId": "9a84d15e5a0e32098d569948474e8e2f",
"transactionId": "b85db78a9824107b",
},
Object {
"traceId": "e123f0466fa092f345d047399db65aa2",
"transactionId": "c0af16286229d811",
},
Object {
"traceId": "4943691f87b7eb97d442d1ef33ca65c7",
"transactionId": "f6f4677d731e57c5",
},
Object {
"traceId": "66bd97c457f5675665397ac9201cc050",
"transactionId": "592b60cc9ddabb15",
},
Object {
"traceId": "10d882b7118870015815a27c37892375",
"transactionId": "0cf9db0b1e321239",
},
Object {
"traceId": "6d85d8f1bc4bbbfdb19cdba59d2fc164",
"transactionId": "d0a16f0f52f25d6b",
},
Object { Object {
"traceId": "0996b09e42ad4dbfaaa6a069326c6e66", "traceId": "0996b09e42ad4dbfaaa6a069326c6e66",
"transactionId": "5721364b179716d0", "transactionId": "5721364b179716d0",
}, },
Object { Object {
"traceId": "d9415d102c0634e1e8fa53ceef07be70", "traceId": "10d882b7118870015815a27c37892375",
"transactionId": "fab91c68c9b1c42b", "transactionId": "0cf9db0b1e321239",
},
Object {
"traceId": "ca7a2072e7974ae84b5096706c6b6255",
"transactionId": "92ab7f2ef11685dd",
},
Object {
"traceId": "d250e2a1bad40f78653d8858db65326b",
"transactionId": "6fcd12599c1b57fa",
}, },
Object { Object {
"traceId": "2ca82e99453c58584c4b8de9a8ba4ec3", "traceId": "2ca82e99453c58584c4b8de9a8ba4ec3",
@ -117,14 +88,50 @@ export default function ApiTest({ getService }: FtrProviderContext) {
"traceId": "45b3d1a86003938687a55e49bf3610b8", "traceId": "45b3d1a86003938687a55e49bf3610b8",
"transactionId": "a707456bda99ee98", "transactionId": "a707456bda99ee98",
}, },
Object {
"traceId": "4943691f87b7eb97d442d1ef33ca65c7",
"transactionId": "f6f4677d731e57c5",
},
Object {
"traceId": "5267685738bf75b68b16bf3426ba858c",
"transactionId": "5223f43bc3154c5a",
},
Object {
"traceId": "66bd97c457f5675665397ac9201cc050",
"transactionId": "592b60cc9ddabb15",
},
Object {
"traceId": "6d85d8f1bc4bbbfdb19cdba59d2fc164",
"transactionId": "d0a16f0f52f25d6b",
},
Object { Object {
"traceId": "7483bd52150d1c93a858c60bfdd0c138", "traceId": "7483bd52150d1c93a858c60bfdd0c138",
"transactionId": "e20e701ff93bdb55", "transactionId": "e20e701ff93bdb55",
}, },
Object {
"traceId": "9a84d15e5a0e32098d569948474e8e2f",
"transactionId": "b85db78a9824107b",
},
Object { Object {
"traceId": "a21ea39b41349a4614a86321d965c957", "traceId": "a21ea39b41349a4614a86321d965c957",
"transactionId": "338bd7908cbf7f2d", "transactionId": "338bd7908cbf7f2d",
}, },
Object {
"traceId": "ca7a2072e7974ae84b5096706c6b6255",
"transactionId": "92ab7f2ef11685dd",
},
Object {
"traceId": "d250e2a1bad40f78653d8858db65326b",
"transactionId": "6fcd12599c1b57fa",
},
Object {
"traceId": "d9415d102c0634e1e8fa53ceef07be70",
"transactionId": "fab91c68c9b1c42b",
},
Object {
"traceId": "e123f0466fa092f345d047399db65aa2",
"transactionId": "c0af16286229d811",
},
] ]
`); `);
}); });

View file

@ -12,13 +12,13 @@ import { LatencyAggregationType } from '../../../../plugins/apm/common/latency_a
import { asPercent } from '../../../../plugins/apm/common/utils/formatters'; import { asPercent } from '../../../../plugins/apm/common/utils/formatters';
import { APIReturnType } from '../../../../plugins/apm/public/services/rest/createCallApmApi'; import { APIReturnType } from '../../../../plugins/apm/public/services/rest/createCallApmApi';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import { registry } from '../../common/registry';
import { roundNumber } from '../../utils'; import { roundNumber } from '../../utils';
type TransactionsGroupsDetailedStatistics = type TransactionsGroupsDetailedStatistics =
APIReturnType<'GET /internal/apm/services/{serviceName}/transactions/groups/detailed_statistics'>; APIReturnType<'GET /internal/apm/services/{serviceName}/transactions/groups/detailed_statistics'>;
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const apmApiClient = getService('apmApiClient'); const apmApiClient = getService('apmApiClient');
const synthtraceEsClient = getService('synthtraceEsClient'); const synthtraceEsClient = getService('synthtraceEsClient');

View file

@ -11,12 +11,12 @@ import url from 'url';
import { APIReturnType } from '../../../../plugins/apm/public/services/rest/createCallApmApi'; import { APIReturnType } from '../../../../plugins/apm/public/services/rest/createCallApmApi';
import { FtrProviderContext } from '../../common/ftr_provider_context'; import { FtrProviderContext } from '../../common/ftr_provider_context';
import archives from '../../common/fixtures/es_archiver/archives_metadata'; import archives from '../../common/fixtures/es_archiver/archives_metadata';
import { registry } from '../../common/registry';
type TransactionsGroupsPrimaryStatistics = type TransactionsGroupsPrimaryStatistics =
APIReturnType<'GET /internal/apm/services/{serviceName}/transactions/groups/main_statistics'>; APIReturnType<'GET /internal/apm/services/{serviceName}/transactions/groups/main_statistics'>;
export default function ApiTest({ getService }: FtrProviderContext) { export default function ApiTest({ getService }: FtrProviderContext) {
const registry = getService('registry');
const supertest = getService('legacySupertestAsApmReadUser'); const supertest = getService('legacySupertestAsApmReadUser');
const archiveName = 'apm_8.0.0'; const archiveName = 'apm_8.0.0';