Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
58871f7
Bump cypress@12.17.2
patrykkopycinski Jul 22, 2023
fa16f43
fix
patrykkopycinski Jul 22, 2023
cc22a07
test
patrykkopycinski Jul 22, 2023
62001bd
fix
patrykkopycinski Jul 22, 2023
0eb2ccc
Merge branch 'main' into chore/renovate-cypress
patrykkopycinski Jul 24, 2023
30be411
Merge branch 'main' into chore/renovate-cypress
patrykkopycinski Jul 24, 2023
421188e
Merge branch 'main' into chore/renovate-cypress
patrykkopycinski Jul 24, 2023
d6105f8
Merge branch 'main' into chore/renovate-cypress
patrykkopycinski Jul 25, 2023
97f8211
Merge branch 'main' into chore/renovate-cypress
patrykkopycinski Jul 26, 2023
c73a905
Merge branch 'main' into chore/renovate-cypress
patrykkopycinski Aug 3, 2023
72439fb
Merge branch 'main' of github.com:elastic/kibana into chore/renovate-…
patrykkopycinski Aug 9, 2023
b331b7f
bump
patrykkopycinski Aug 9, 2023
dfbaf91
test
patrykkopycinski Aug 10, 2023
a7af0a8
Merge branch 'main' of github.com:elastic/kibana into chore/renovate-…
patrykkopycinski Sep 18, 2023
0e5d548
fix
patrykkopycinski Sep 18, 2023
902e647
fix
patrykkopycinski Sep 18, 2023
5c1c5be
fix
patrykkopycinski Sep 18, 2023
1e34539
Merge branch 'main' into chore/renovate-cypress
patrykkopycinski Sep 18, 2023
9b906ee
Merge branch 'main' of github.com:elastic/kibana into chore/renovate-…
patrykkopycinski Sep 19, 2023
59b921f
Merge branch 'main' into chore/renovate-cypress
patrykkopycinski Sep 21, 2023
797b5e6
Update cypress_ci.config.ts
patrykkopycinski Sep 21, 2023
1a1167e
[CI] Auto-commit changed files from 'node scripts/precommit_hook.js -…
kibanamachine Sep 21, 2023
a21cb1a
Update index.ts
patrykkopycinski Sep 21, 2023
d0dc156
Merge branch 'main' into chore/renovate-cypress
patrykkopycinski Sep 25, 2023
d009b64
Merge branch 'main' into chore/renovate-cypress
MadameSheema Sep 27, 2023
70af4d9
Merge branch 'main' into chore/renovate-cypress
patrykkopycinski Sep 27, 2023
170fe9e
fix
patrykkopycinski Sep 27, 2023
2dac722
changing the APM browser to electron
MadameSheema Sep 28, 2023
955b554
Merge branch 'main' into chore/renovate-cypress
MadameSheema Sep 28, 2023
9ad98d6
skipping open timeline test
MadameSheema Sep 28, 2023
6073ba1
fixes APM tests
MadameSheema Sep 28, 2023
fbce75b
increases parallelism for investigations
MadameSheema Sep 28, 2023
b215d57
Merge branch 'main' into chore/renovate-cypress
MadameSheema Sep 29, 2023
6ad077d
fix
patrykkopycinski Sep 29, 2023
954eecb
Merge branch 'chore/renovate-cypress' of github.com:patrykkopycinski/…
patrykkopycinski Sep 29, 2023
e21f80b
cleanup
patrykkopycinski Sep 29, 2023
ba9099c
cleanup
patrykkopycinski Sep 29, 2023
754c8dd
Merge branch 'main' into chore/renovate-cypress
patrykkopycinski Sep 29, 2023
83a68c2
Update home_page.cy.ts
patrykkopycinski Sep 29, 2023
ad32340
test
patrykkopycinski Sep 30, 2023
8efc7c4
Merge branch 'main' of github.com:elastic/kibana into feat/dw-serverl…
patrykkopycinski Sep 30, 2023
94b77e1
Merge branch 'main' into chore/renovate-cypress
patrykkopycinski Sep 30, 2023
66aa351
[CI] Auto-commit changed files from 'node scripts/eslint --no-cache -…
kibanamachine Sep 30, 2023
e2c4e7d
Update ftr_configs.yml
patrykkopycinski Sep 30, 2023
dd06e98
fix
patrykkopycinski Sep 30, 2023
1f1d5d4
Merge branch 'main' into chore/renovate-cypress
kibanamachine Sep 30, 2023
1c22314
Merge branch 'chore/renovate-cypress' of github.com:patrykkopycinski/…
patrykkopycinski Sep 30, 2023
e90214b
skip
patrykkopycinski Sep 30, 2023
9a62a62
Merge branch 'main' into feat/dw-serverless-endpoint-cypress
patrykkopycinski Oct 1, 2023
7adac99
test
patrykkopycinski Oct 2, 2023
bea13b4
add tests
patrykkopycinski Oct 2, 2023
ec4aaa7
Merge branch 'main' into feat/dw-serverless-endpoint-cypress
patrykkopycinski Oct 2, 2023
fa0292c
update jsdoc
patrykkopycinski Oct 3, 2023
e24a8b3
Merge branch 'feat/dw-serverless-endpoint-cypress' of github.com:patr…
patrykkopycinski Oct 3, 2023
be6b0e5
PR comments
patrykkopycinski Oct 3, 2023
d471bee
PR comments
patrykkopycinski Oct 4, 2023
fe33b5b
update docs
patrykkopycinski Oct 4, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .buildkite/ftr_configs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,7 @@ disabled:
- x-pack/test/functional_enterprise_search/cypress.config.ts
- x-pack/test/defend_workflows_cypress/cli_config.ts
- x-pack/test/defend_workflows_cypress/config.ts
- x-pack/test/defend_workflows_cypress/endpoint_config.ts
- x-pack/test/defend_workflows_cypress/endpoint_serverless_config.ts
- x-pack/test/defend_workflows_cypress/serverless_config.ts
- x-pack/plugins/observability_onboarding/e2e/ftr_config_open.ts
- x-pack/plugins/observability_onboarding/e2e/ftr_config_runner.ts
- x-pack/plugins/observability_onboarding/e2e/ftr_config.ts
Expand Down
3 changes: 2 additions & 1 deletion packages/kbn-es/src/cli_commands/serverless.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ export const serverless: Command = {
--basePath Path to the directory where the ES cluster will store data
--clean Remove existing file system object store before running
--kill Kill running ES serverless nodes if detected on startup
--host Publish ES docker container on additional host IP
--port The port to bind to on 127.0.0.1 [default: ${DEFAULT_PORT}]
--ssl Enable HTTP SSL on the ES cluster
--skipTeardown If this process exits, leave the ES cluster running in the background
Expand Down Expand Up @@ -72,7 +73,7 @@ export const serverless: Command = {
files: 'F',
},

string: ['tag', 'image', 'basePath', 'resources'],
string: ['tag', 'image', 'basePath', 'resources', 'host'],
boolean: ['clean', 'ssl', 'kill', 'background', 'skipTeardown', 'waitForReady'],

default: defaults,
Expand Down
29 changes: 29 additions & 0 deletions packages/kbn-es/src/utils/docker.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import {
teardownServerlessClusterSync,
verifyDockerInstalled,
getESp12Volume,
ServerlessOptions,
} from './docker';
import { ToolingLog, ToolingLogCollectingWriter } from '@kbn/tooling-log';
import { ES_P12_PATH } from '@kbn/dev-utils';
Expand Down Expand Up @@ -155,6 +156,19 @@ describe('resolvePort()', () => {
`);
});

test('should return default port when custom host passed in options', () => {
const port = resolvePort({ host: '192.168.25.1' } as ServerlessOptions);

expect(port).toMatchInlineSnapshot(`
Array [
"-p",
"127.0.0.1:9200:9200",
"-p",
"192.168.25.1:9200:9200",
]
`);
});

test('should return custom port when passed in options', () => {
const port = resolvePort({ port: 9220 });

Expand All @@ -167,6 +181,21 @@ describe('resolvePort()', () => {
]
`);
});

test('should return custom port and host when passed in options', () => {
const port = resolvePort({ port: 9220, host: '192.168.25.1' });

expect(port).toMatchInlineSnapshot(`
Array [
"-p",
"127.0.0.1:9220:9220",
"-p",
"192.168.25.1:9220:9220",
"--env",
"http.port=9220",
]
`);
});
});

describe('verifyDockerInstalled()', () => {
Expand Down
20 changes: 12 additions & 8 deletions packages/kbn-es/src/utils/docker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ export interface DockerOptions extends EsClusterExecOptions, BaseOptions {
}

export interface ServerlessOptions extends EsClusterExecOptions, BaseOptions {
/** Publish ES docker container on additional host IP */
host?: string;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/** Clean (or delete) all data created by the ES cluster after it is stopped */
clean?: boolean;
/** Path to the directory where the ES cluster will store data */
Expand Down Expand Up @@ -306,19 +308,21 @@ export function resolveDockerImage({
}

/**
* Determine the port to bind the Serverless index node or Docker node to
* Determine the port and optionally an additional host to bind the Serverless index node or Docker node to
*/
export function resolvePort(options: ServerlessOptions | DockerOptions) {
const port = options.port || DEFAULT_PORT;
const value = ['-p', `127.0.0.1:${port}:${port}`];

if ((options as ServerlessOptions).host) {
value.push('-p', `${(options as ServerlessOptions).host}:${port}:${port}`);
}
Comment on lines +317 to +319
Copy link
Copy Markdown
Contributor

@dmlemeshko dmlemeshko Oct 4, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just curious if this change needed for Cypress tests or as a general capability to improve developer UX?
If we are keeping the function name resolvePort as is, could you update the description to have few words about host usage and return value.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this change is needed to improve dev UX, mostly in case we want to set elastic-agent on a dedicated VM outside of the Docker network

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dmlemeshko updated description, please let me know if that works


if (options.port) {
return [
'-p',
`127.0.0.1:${options.port}:${options.port}`,
'--env',
`http.port=${options.port}`,
];
value.push('--env', `http.port=${options.port}`);
}

return ['-p', `127.0.0.1:${DEFAULT_PORT}:${DEFAULT_PORT}`];
return value;
}

/**
Expand Down
7 changes: 3 additions & 4 deletions packages/kbn-test/src/es/test_es_cluster.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import { Client, HttpConnection } from '@elastic/elasticsearch';
import type { ToolingLog } from '@kbn/tooling-log';
import { REPO_ROOT } from '@kbn/repo-info';
import type { ArtifactLicense } from '@kbn/es';
import type { ServerlessOptions } from '@kbn/es/src/utils';
import { CI_PARALLEL_PROCESS_PREFIX } from '../ci_parallel_process_prefix';
import { esTestConfig } from './es_test_config';

Expand Down Expand Up @@ -70,10 +71,7 @@ export interface CreateTestEsClusterOptions {
*/
esArgs?: string[];
esFrom?: string;
esServerlessOptions?: {
image?: string;
tag?: string;
};
esServerlessOptions?: Pick<ServerlessOptions, 'image' | 'tag' | 'host'>;
esJavaOpts?: string;
/**
* License to run your cluster under. Keep in mind that a `trial` license
Expand Down Expand Up @@ -246,6 +244,7 @@ export function createTestEsCluster<
esArgs: customEsArgs,
image: esServerlessOptions?.image,
tag: esServerlessOptions?.tag,
host: esServerlessOptions?.host,
port,
clean: true,
background: true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,12 @@ export const schema = Joi.object()
})
.default(),

esServerlessOptions: Joi.object()
.keys({
host: Joi.string().ip(),
})
.default(),

kbnTestServer: Joi.object()
.keys({
buildArgs: Joi.array(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,16 +166,24 @@ function getESServerlessOptions(esServerlessImageFromArg: string | undefined, co
esTestConfig.getESServerlessImage() ||
(config.has('esTestCluster.esServerlessImage') &&
config.get('esTestCluster.esServerlessImage'));
const serverlessHost: string | undefined =
config.has('esServerlessOptions.host') && config.get('esServerlessOptions.host');

if (esServerlessImageUrlOrTag) {
if (esServerlessImageUrlOrTag.includes(':')) {
return {
image: esServerlessImageUrlOrTag,
host: serverlessHost,
};
} else {
return {
tag: esServerlessImageUrlOrTag,
host: serverlessHost,
};
}
}

return {
host: serverlessHost,
};
}
2 changes: 1 addition & 1 deletion x-pack/plugins/security_solution/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"cypress:dw": "NODE_OPTIONS=--openssl-legacy-provider node ./scripts/start_cypress_parallel --config-file ./public/management/cypress/cypress.config.ts --ftr-config-file ../../test/defend_workflows_cypress/cli_config",
"cypress:dw:open": "yarn cypress:dw open",
"cypress:dw:run": "yarn cypress:dw run",
"cypress:dw:serverless": "NODE_OPTIONS=--openssl-legacy-provider node ./scripts/start_cypress_parallel --config-file ./public/management/cypress/cypress_serverless.config.ts --ftr-config-file ../../../x-pack/test_serverless/functional/test_suites/security/cypress/security_config",
"cypress:dw:serverless": "NODE_OPTIONS=--openssl-legacy-provider node ./scripts/start_cypress_parallel --config-file ./public/management/cypress/cypress_serverless.config.ts --ftr-config-file ../../test/defend_workflows_cypress/serverless_config",
"cypress:dw:serverless:open": "yarn cypress:dw:serverless open",
"cypress:dw:serverless:run": "yarn cypress:dw:serverless run",
"cypress:dw:endpoint": "echo '\n** WARNING **: Run script `cypress:dw:endpoint` no longer valid! Use `cypress:dw` instead\n'",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,16 +63,8 @@ export const getCypressBaseConfig = (
experimentalInteractiveRunEvents: true,
setupNodeEvents: (on: Cypress.PluginEvents, config: Cypress.PluginConfigOptions) => {
dataLoaders(on, config);

// skip dataLoadersForRealEndpoints() if running in serverless
// https://github.com/elastic/security-team/issues/7467
// Once we are able to run Fleet server in serverless mode (see: https://github.com/elastic/kibana/pull/166183)
// this `if()` statement needs to be removed and `dataLoadersForRealEndpoints()` should
// just be called without having any checks around it.
if (!config.env.IS_SERVERLESS) {
// Data loaders specific to "real" Endpoint testing
dataLoadersForRealEndpoints(on, config);
}
// Data loaders specific to "real" Endpoint testing
dataLoadersForRealEndpoints(on, config);

responseActionTasks(on, config);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ const loginWithoutAccess = (url: string) => {
loadPage(url);
};

describe('Artifacts pages', { tags: '@ess' }, () => {
describe('Artifacts pages', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the test really broken in Serverless or you wanna just skip it for now? @skipInServerless tag could be a better choice, see here

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

to me, it seems both tags are doing the same, maybe we could simplify and just have one tag for both use cases?

before(() => {
login();
loadEndpointDataForEventFiltersIfNeeded();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import { cleanupRule, generateRandomStringName, loadRule } from '../../tasks/api
import { RESPONSE_ACTION_TYPES } from '../../../../../common/api/detection_engine';
import { login, ROLE } from '../../tasks/login';

describe('Form', { tags: '@ess' }, () => {
describe('Form', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the test really broken in Serverless or you wanna just skip it for now? @skipInServerless tag could be a better choice, see here

describe('User with no access can not create an endpoint response action', () => {
before(() => {
login(ROLE.endpoint_response_actions_no_access);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,79 +12,83 @@ import { indexEndpointRuleAlerts } from '../../tasks/index_endpoint_rule_alerts'

import { login, ROLE } from '../../tasks/login';

describe('Response actions history page', { tags: '@ess' }, () => {
let endpointData: ReturnTypeFromChainable<typeof indexEndpointHosts> | undefined;
let endpointDataWithAutomated: ReturnTypeFromChainable<typeof indexEndpointHosts> | undefined;
let alertData: ReturnTypeFromChainable<typeof indexEndpointRuleAlerts> | undefined;
const [endpointAgentId, endpointHostname] = generateRandomStringName(2);
describe(
'Response actions history page',
{ tags: ['@ess', '@serverless', '@brokenInServerless'] },
() => {
let endpointData: ReturnTypeFromChainable<typeof indexEndpointHosts> | undefined;
let endpointDataWithAutomated: ReturnTypeFromChainable<typeof indexEndpointHosts> | undefined;
let alertData: ReturnTypeFromChainable<typeof indexEndpointRuleAlerts> | undefined;
const [endpointAgentId, endpointHostname] = generateRandomStringName(2);

before(() => {
login(ROLE.endpoint_response_actions_access);
before(() => {
login(ROLE.endpoint_response_actions_access);

indexEndpointHosts({ numResponseActions: 2 }).then((indexEndpoints) => {
endpointData = indexEndpoints;
});
indexEndpointRuleAlerts({
endpointAgentId,
endpointHostname,
endpointIsolated: false,
}).then((indexedAlert) => {
alertData = indexedAlert;
const alertId = alertData.alerts[0]._id;
return indexEndpointHosts({
numResponseActions: 1,
alertIds: [alertId],
}).then((indexEndpoints) => {
endpointDataWithAutomated = indexEndpoints;
indexEndpointHosts({ numResponseActions: 2 }).then((indexEndpoints) => {
endpointData = indexEndpoints;
});
indexEndpointRuleAlerts({
endpointAgentId,
endpointHostname,
endpointIsolated: false,
}).then((indexedAlert) => {
alertData = indexedAlert;
const alertId = alertData.alerts[0]._id;
return indexEndpointHosts({
numResponseActions: 1,
alertIds: [alertId],
}).then((indexEndpoints) => {
endpointDataWithAutomated = indexEndpoints;
});
});
});
});

after(() => {
if (endpointDataWithAutomated) {
endpointDataWithAutomated.cleanup();
endpointDataWithAutomated = undefined;
}
if (endpointData) {
endpointData.cleanup();
endpointData = undefined;
}
after(() => {
if (endpointDataWithAutomated) {
endpointDataWithAutomated.cleanup();
endpointDataWithAutomated = undefined;
}
if (endpointData) {
endpointData.cleanup();
endpointData = undefined;
}

if (alertData) {
alertData.cleanup();
alertData = undefined;
}
});
if (alertData) {
alertData.cleanup();
alertData = undefined;
}
});

it('enable filtering by type', () => {
cy.visit(`/app/security/administration/response_actions_history`);
it('enable filtering by type', () => {
cy.visit(`/app/security/administration/response_actions_history`);

let maxLength: number;
cy.getByTestSubj('response-actions-list').then(($table) => {
maxLength = $table.find('tbody .euiTableRow').length;
cy.get('tbody .euiTableRow').should('have.lengthOf', maxLength);
});
let maxLength: number;
cy.getByTestSubj('response-actions-list').then(($table) => {
maxLength = $table.find('tbody .euiTableRow').length;
cy.get('tbody .euiTableRow').should('have.lengthOf', maxLength);
});

cy.getByTestSubj('response-actions-list-type-filter-popoverButton').click();
cy.getByTestSubj('type-filter-option').contains('Triggered by rule').click();
cy.getByTestSubj('response-actions-list').within(() => {
cy.get('tbody .euiTableRow').should('have.lengthOf', 1);
cy.get('tbody .euiTableRow').eq(0).contains('Triggered by rule');
});
cy.getByTestSubj('type-filter-option').contains('Triggered by rule').click();
cy.getByTestSubj('response-actions-list').within(() => {
cy.get('tbody .euiTableRow').should('have.lengthOf', maxLength);
});
cy.getByTestSubj('type-filter-option').contains('Triggered manually').click();
cy.getByTestSubj('response-actions-list').within(() => {
cy.get('tbody .euiTableRow').should('have.lengthOf', maxLength - 1);
});
cy.getByTestSubj('type-filter-option').contains('Triggered by rule').click();
cy.getByTestSubj('response-actions-list').within(() => {
cy.get('tbody .euiTableRow').should('have.lengthOf', maxLength);
cy.get('tbody .euiTableRow').eq(0).contains('Triggered by rule').click();
cy.getByTestSubj('response-actions-list-type-filter-popoverButton').click();
cy.getByTestSubj('type-filter-option').contains('Triggered by rule').click();
cy.getByTestSubj('response-actions-list').within(() => {
cy.get('tbody .euiTableRow').should('have.lengthOf', 1);
cy.get('tbody .euiTableRow').eq(0).contains('Triggered by rule');
});
cy.getByTestSubj('type-filter-option').contains('Triggered by rule').click();
cy.getByTestSubj('response-actions-list').within(() => {
cy.get('tbody .euiTableRow').should('have.lengthOf', maxLength);
});
cy.getByTestSubj('type-filter-option').contains('Triggered manually').click();
cy.getByTestSubj('response-actions-list').within(() => {
cy.get('tbody .euiTableRow').should('have.lengthOf', maxLength - 1);
});
cy.getByTestSubj('type-filter-option').contains('Triggered by rule').click();
cy.getByTestSubj('response-actions-list').within(() => {
cy.get('tbody .euiTableRow').should('have.lengthOf', maxLength);
cy.get('tbody .euiTableRow').eq(0).contains('Triggered by rule').click();
});
// check if we were moved to Rules app after clicking Triggered by rule
cy.getByTestSubj('breadcrumb last').contains('Detection rules (SIEM)');
});
// check if we were moved to Rules app after clicking Triggered by rule
cy.getByTestSubj('breadcrumb last').contains('Detection rules (SIEM)');
});
});
}
);
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import { indexEndpointRuleAlerts } from '../../tasks/index_endpoint_rule_alerts'

import { login, ROLE } from '../../tasks/login';

describe('Results', { tags: '@ess' }, () => {
describe('Results', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => {
let endpointData: ReturnTypeFromChainable<typeof indexEndpointHosts> | undefined;
let alertData: ReturnTypeFromChainable<typeof indexEndpointRuleAlerts> | undefined;
const [endpointAgentId, endpointHostname] = generateRandomStringName(2);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import { createEndpointHost } from '../../tasks/create_endpoint_host';
import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data';
import { enableAllPolicyProtections } from '../../tasks/endpoint_policy';

describe('Endpoints page', { tags: '@ess' }, () => {
describe('Endpoints page', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => {
Comment thread
patrykkopycinski marked this conversation as resolved.
let indexedPolicy: IndexedFleetEndpointPolicyResponse;
let policy: PolicyData;
let createdHost: CreateAndEnrollEndpointHostResponse;
Expand Down
Loading