[Security Solution][Endpoint] Combine the Endpoint management cypress test suites into a single configuration/run (#166757)

## Summary

- Combines the `endpoint` and `mocked_data` tests suites so that they
run from the same cypress configuration/run buildkite setup
- Moved test files from the `endpoint/` and `mocked_data/` directories
into new sub-directories that more closely describe the set of tests
they contain
- The `security_solution/package.json` file was updated so that the
following `scripts` will now output a warning indicating that command is
no longer valid:
    - `cypress:dw:endpoint`
    - `cypress:dw:endpoint:run`
    - `cypress:dw:endpoint:open`


The following npm/yarn commands remain available for running tests
locally:

```shell
yarn --cwd=x-pack/plugins/security_solution cypress:dw:open
``` 

```shell
yarn --cwd=x-pack/plugins/security_solution cypress:dw:run
```


New test file struncture:

<img width="415" alt="image"
src="0cb4bc76-b434-4219-b73e-508645201a81">
This commit is contained in:
Paul Tavares 2023-09-20 14:38:29 -04:00 committed by GitHub
parent 61bad62aaa
commit 807856abd2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
43 changed files with 138 additions and 341 deletions

View file

@ -1,18 +1,6 @@
steps:
- command: .buildkite/scripts/steps/functional/defend_workflows.sh
label: 'Defend Workflows Cypress Tests'
agents:
queue: n2-4-spot
depends_on: build
timeout_in_minutes: 60
parallelism: 2
retry:
automatic:
- exit_status: '*'
limit: 1
- command: .buildkite/scripts/steps/functional/defend_workflows_vagrant.sh
label: 'Defend Workflows Endpoint Cypress Tests'
agents:
queue: n2-4-virt
depends_on: build
@ -35,15 +23,4 @@ steps:
- exit_status: '*'
limit: 1
- command: .buildkite/scripts/steps/functional/defend_workflows_vagrant_serverless.sh
label: 'Defend Workflows Endpoint Cypress Tests on Serverless'
agents:
queue: n2-4-virt
depends_on: build
timeout_in_minutes: 120
parallelism: 5
retry:
automatic:
- exit_status: '*'
limit: 1

View file

@ -1,16 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
source .buildkite/scripts/steps/functional/common.sh
source .buildkite/scripts/steps/functional/common_cypress.sh
export JOB=kibana-defend-workflows-endpoint-cypress
export KIBANA_INSTALL_DIR=${KIBANA_BUILD_LOCATION}
echo "--- Defend Workflows Endpoint Cypress tests"
cd x-pack/plugins/security_solution
set +e
yarn cypress:dw:endpoint:run; status=$?; yarn junit:merge || :; exit $status

View file

@ -1,15 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
source .buildkite/scripts/steps/functional/common.sh
source .buildkite/scripts/steps/functional/common_cypress.sh
export JOB=kibana-defend-workflows-endpoint-serverless-cypress
export KIBANA_INSTALL_DIR=${KIBANA_BUILD_LOCATION}
echo "--- Defend Workflows Endpoint Cypress tests on Serverless"
cd x-pack/plugins/security_solution
yarn cypress:dw:endpoint:serverless:run; status=$?; yarn junit:merge || :; exit $status

View file

@ -13,15 +13,12 @@
"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:endpoint": "NODE_OPTIONS=--openssl-legacy-provider node ./scripts/start_cypress_parallel --config-file ./public/management/cypress/cypress_endpoint.config.ts --ftr-config-file ../../test/defend_workflows_cypress/endpoint_config",
"cypress:dw:endpoint:run": "yarn cypress:dw:endpoint run",
"cypress:dw:endpoint:open": "yarn cypress:dw:endpoint open",
"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:open": "yarn cypress:dw:serverless open",
"cypress:dw:serverless:run": "yarn cypress:dw:serverless run",
"cypress:dw:endpoint:serverless": "NODE_OPTIONS=--openssl-legacy-provider node ./scripts/start_cypress_parallel --config-file ./public/management/cypress/cypress_endpoint_serverless.config.ts --ftr-config-file ../../test/defend_workflows_cypress/endpoint_serverless_config",
"cypress:dw:endpoint:serverless:open": "yarn cypress:dw:endpoint:serverless open",
"cypress:dw:endpoint:serverless:run": "yarn cypress:dw:endpoint:serverless run",
"cypress:dw:endpoint": "echo '\n** WARNING **: Run script `cypress:dw:endpoint` no longer valid! Use `cypress:dw` instead\n'",
"cypress:dw:endpoint:run": "echo '\n** WARNING **: Run script `cypress:dw:endpoint:run` no longer valid! Use `cypress:dw:run` instead\n'",
"cypress:dw:endpoint:open": "echo '\n** WARNING **: Run script `cypress:dw:endpoint:open` no longer valid! Use `cypress:dw:open` instead\n'",
"junit:merge": "../../../node_modules/.bin/mochawesome-merge ../../../target/kibana-security-solution/cypress/results/mochawesome*.json > ../../../target/kibana-security-solution/cypress/results/output.json && ../../../node_modules/.bin/marge ../../../target/kibana-security-solution/cypress/results/output.json --reportDir ../../../target/kibana-security-solution/cypress/results && yarn junit:transform && mkdir -p ../../../target/junit && cp ../../../target/kibana-security-solution/cypress/results/*.xml ../../../target/junit/",
"test:generate": "node scripts/endpoint/resolver_generator",
"mappings:generate": "node scripts/mappings/mappings_generator",

View file

@ -134,67 +134,12 @@ yarn --cwd x-pack/plugins/security_solution cypress:dw:open
yarn --cwd x-pack/plugins/security_solution cypress:dw:serverless:open
```
For developing/debugging tests against real endpoint please use:
Endpoint tests require [Multipass](https://multipass.run/) to be installed on your machine.
```shell
# bootstrap kibana from the project root and build the plugins/assets that cypress will execute against
yarn kbn bootstrap && node scripts/build_kibana_platform_plugins
# launch the cypress test runner against ESS
yarn --cwd x-pack/plugins/security_solution cypress:dw:endpoint:open
# or against Serverless
yarn --cwd x-pack/plugins/security_solution cypress:dw:endpoint:serverless:open
```
#### Cypress (interactive) with real Endpoints using Vagrant
```shell
# bootstrap kibana from the project root and build the plugins/assets that cypress will execute against
yarn kbn bootstrap && node scripts/build_kibana_platform_plugins
# launch the cypress test runner with real endpoint
cd x-pack/plugins/security_solution
export CI=true
yarn cypress:dw:endpoint:open
````
Note that you can select the browser you want to use on the top right side of the interactive runner.
#### Cypress against REAL Endpoint + Headless (Chrome)
This requires some additional setup as mentioned in the [pre-requisites](#pre-requisites) section.
Endpoint tests require [Multipass](https://multipass.run/) to be installed on your machine.
```shell
# bootstrap kibana from the project root and build the plugins/assets that cypress will execute against
yarn kbn bootstrap && node scripts/build_kibana_platform_plugins
# launch the cypress test runner with real endpoint against ESS
yarn --cwd x-pack/plugins/security_solution cypress:dw:endpoint:run
# or against Serverless
yarn --cwd x-pack/plugins/security_solution cypress:dw:endpoint:serverless:run
```
## Folder Structure
### e2e/
Contains all the tests. Within it are two sub-folders:
#### cypress/endpoint
Contains all the tests that are executed against real endpoints.
#### cypress/mocked_data
Contains all the tests that are executed against mocked endpoint and run on CI. If you want to add tests that run on CI
then this is where you should add those.
### integration/
Cypress convention. Contains the specs that are going to be executed.
@ -212,7 +157,6 @@ Directory also holds Cypress Plugins that are then initialized via `setupNodeEve
### screens/
Contains the elements we want to interact with within our tests.
Each file inside the screens folder represents a screen in our application.
### tasks/

View file

@ -8,26 +8,10 @@
import { defineCypressConfig } from '@kbn/cypress-config';
import { getCypressBaseConfig } from './cypress_base.config';
import { dataLoaders } from './support/data_loaders';
export default defineCypressConfig({
...getCypressBaseConfig(),
env: {
...getCypressBaseConfig().env,
grepTags: '@ess',
},
e2e: {
...getCypressBaseConfig().e2e,
specPattern: 'public/management/cypress/e2e/mocked_data/',
setupNodeEvents: (on, config) => {
// eslint-disable-next-line @typescript-eslint/no-var-requires
require('@cypress/grep/src/plugin')(config);
return dataLoaders(on, config);
export default defineCypressConfig(
getCypressBaseConfig({
env: {
grepTags: '@ess',
},
},
});
})
);

View file

@ -5,50 +5,82 @@
* 2.0.
*/
export const getCypressBaseConfig = () => ({
reporter: '../../../../node_modules/cypress-multi-reporters',
reporterOptions: {
configFile: './public/management/reporter_config.json',
},
import { merge } from 'lodash';
import { dataLoaders, dataLoadersForRealEndpoints } from './support/data_loaders';
import { responseActionTasks } from './support/response_actions';
defaultCommandTimeout: 60000,
execTimeout: 120000,
pageLoadTimeout: 12000,
export const getCypressBaseConfig = (
overrides: Cypress.ConfigOptions = {}
): Cypress.ConfigOptions => {
return merge(
{
reporter: '../../../../node_modules/cypress-multi-reporters',
reporterOptions: {
configFile: './public/management/reporter_config.json',
},
retries: {
runMode: 1,
openMode: 0,
},
defaultCommandTimeout: 60000,
execTimeout: 120000,
pageLoadTimeout: 12000,
screenshotsFolder:
'../../../target/kibana-security-solution/public/management/cypress/screenshots',
trashAssetsBeforeRuns: false,
video: false,
viewportHeight: 900,
viewportWidth: 1440,
experimentalStudio: true,
retries: {
runMode: 1,
openMode: 0,
},
env: {
KIBANA_URL: 'http://localhost:5601',
ELASTICSEARCH_URL: 'http://localhost:9200',
FLEET_SERVER_URL: 'https://localhost:8220',
screenshotsFolder:
'../../../target/kibana-security-solution/public/management/cypress/screenshots',
trashAssetsBeforeRuns: false,
video: false,
viewportHeight: 900,
viewportWidth: 1440,
experimentalStudio: true,
// Username/password used for both elastic and kibana
KIBANA_USERNAME: 'system_indices_superuser',
KIBANA_PASSWORD: 'changeme',
ELASTICSEARCH_USERNAME: 'system_indices_superuser',
ELASTICSEARCH_PASSWORD: 'changeme',
env: {
'cypress-react-selector': {
root: '#security-solution-app',
},
KIBANA_URL: 'http://localhost:5601',
ELASTICSEARCH_URL: 'http://localhost:9200',
FLEET_SERVER_URL: 'https://localhost:8220',
KIBANA_USERNAME: 'system_indices_superuser',
KIBANA_PASSWORD: 'changeme',
ELASTICSEARCH_USERNAME: 'system_indices_superuser',
ELASTICSEARCH_PASSWORD: 'changeme',
// grep related configs
grepFilterSpecs: true,
grepOmitFiltered: true,
},
// grep related configs
grepFilterSpecs: true,
grepOmitFiltered: true,
},
e2e: {
// baseUrl: To override, set Env. variable `CYPRESS_BASE_URL`
baseUrl: 'http://localhost:5601',
e2e: {
// baseUrl: To override, set Env. variable `CYPRESS_BASE_URL`
baseUrl: 'http://localhost:5601',
supportFile: 'public/management/cypress/support/e2e.ts',
specPattern: 'public/management/cypress/e2e/**/*.cy.{js,jsx,ts,tsx}',
experimentalRunAllSpecs: true,
setupNodeEvents: (on: Cypress.PluginEvents, config: Cypress.PluginConfigOptions) => {
dataLoaders(on, config);
supportFile: 'public/management/cypress/support/e2e.ts',
experimentalRunAllSpecs: true,
},
});
// 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);
}
responseActionTasks(on, config);
// eslint-disable-next-line @typescript-eslint/no-var-requires
require('@cypress/grep/src/plugin')(config);
return config;
},
},
},
overrides
);
};

View file

@ -1,47 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { defineCypressConfig } from '@kbn/cypress-config';
import { getCypressBaseConfig } from './cypress_base.config';
import { dataLoaders, dataLoadersForRealEndpoints } from './support/data_loaders';
import { responseActionTasks } from './support/response_actions';
// eslint-disable-next-line import/no-default-export
export default defineCypressConfig({
...getCypressBaseConfig(),
env: {
...getCypressBaseConfig().env,
'cypress-react-selector': {
root: '#security-solution-app',
},
grepTags: '@ess',
},
e2e: {
...getCypressBaseConfig().e2e,
experimentalMemoryManagement: true,
experimentalInteractiveRunEvents: true,
specPattern: 'public/management/cypress/e2e/endpoint/*.cy.{js,jsx,ts,tsx}',
setupNodeEvents: (on: Cypress.PluginEvents, config: Cypress.PluginConfigOptions) => {
dataLoaders(on, config);
// Data loaders specific to "real" Endpoint testing
dataLoadersForRealEndpoints(on, config);
responseActionTasks(on, config);
// eslint-disable-next-line @typescript-eslint/no-var-requires
require('@cypress/grep/src/plugin')(config);
return config;
},
},
});

View file

@ -1,50 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { defineCypressConfig } from '@kbn/cypress-config';
import { getCypressBaseConfig } from './cypress_base.config';
import { dataLoaders } from './support/data_loaders';
import { responseActionTasks } from './support/response_actions';
// eslint-disable-next-line import/no-default-export
export default defineCypressConfig({
...getCypressBaseConfig(),
env: {
...getCypressBaseConfig().env,
IS_SERVERLESS: true,
grepTags: '@serverless --@brokenInServerless',
'cypress-react-selector': {
root: '#security-solution-app',
},
},
e2e: {
...getCypressBaseConfig().e2e,
experimentalMemoryManagement: true,
experimentalInteractiveRunEvents: true,
specPattern: 'public/management/cypress/e2e/endpoint/*.cy.{js,jsx,ts,tsx}',
setupNodeEvents: (on, config) => {
// eslint-disable-next-line @typescript-eslint/no-var-requires
require('@cypress/grep/src/plugin')(config);
dataLoaders(on, config);
// skip dataLoadersForRealEndpoints()
// https://github.com/elastic/security-team/issues/7467
// Data loaders specific to "real" Endpoint testing
// dataLoadersForRealEndpoints(on, config);
responseActionTasks(on, config);
},
},
});

View file

@ -7,30 +7,14 @@
import { defineCypressConfig } from '@kbn/cypress-config';
import { getCypressBaseConfig } from './cypress_base.config';
import { dataLoaders } from './support/data_loaders';
// eslint-disable-next-line import/no-default-export
export default defineCypressConfig({
...getCypressBaseConfig(),
export default defineCypressConfig(
getCypressBaseConfig({
env: {
IS_SERVERLESS: true,
env: {
...getCypressBaseConfig().env,
IS_SERVERLESS: true,
grepTags: '@serverless --@brokenInServerless',
},
e2e: {
...getCypressBaseConfig().e2e,
specPattern: 'public/management/cypress/e2e/mocked_data/',
setupNodeEvents: (on, config) => {
// eslint-disable-next-line @typescript-eslint/no-var-requires
require('@cypress/grep/src/plugin')(config);
return dataLoaders(on, config);
grepTags: '@serverless --@brokenInServerless',
},
},
});
})
);

View file

@ -13,10 +13,10 @@ import {
tryAddingDisabledResponseAction,
validateAvailableCommands,
visitRuleActions,
} from '../../../tasks/response_actions';
import { cleanupRule, generateRandomStringName, loadRule } from '../../../tasks/api_fixtures';
import { RESPONSE_ACTION_TYPES } from '../../../../../../common/api/detection_engine';
import { loginWithRole, ROLE } from '../../../tasks/login';
} from '../../tasks/response_actions';
import { cleanupRule, generateRandomStringName, loadRule } from '../../tasks/api_fixtures';
import { RESPONSE_ACTION_TYPES } from '../../../../../common/api/detection_engine';
import { loginWithRole, ROLE } from '../../tasks/login';
describe('Form', { tags: '@ess' }, () => {
describe('User with no access can not create an endpoint response action', () => {

View file

@ -5,12 +5,12 @@
* 2.0.
*/
import { generateRandomStringName } from '../../../tasks/utils';
import { indexEndpointHosts } from '../../../tasks/index_endpoint_hosts';
import type { ReturnTypeFromChainable } from '../../../types';
import { indexEndpointRuleAlerts } from '../../../tasks/index_endpoint_rule_alerts';
import { generateRandomStringName } from '../../tasks/utils';
import { indexEndpointHosts } from '../../tasks/index_endpoint_hosts';
import type { ReturnTypeFromChainable } from '../../types';
import { indexEndpointRuleAlerts } from '../../tasks/index_endpoint_rule_alerts';
import { login, ROLE } from '../../../tasks/login';
import { login, ROLE } from '../../tasks/login';
describe('Response actions history page', { tags: '@ess' }, () => {
let endpointData: ReturnTypeFromChainable<typeof indexEndpointHosts> | undefined;

View file

@ -5,15 +5,15 @@
* 2.0.
*/
import { disableExpandableFlyoutAdvancedSettings } from '../../../tasks/common';
import { APP_ALERTS_PATH } from '../../../../../../common/constants';
import { closeAllToasts } from '../../../tasks/toasts';
import { fillUpNewRule } from '../../../tasks/response_actions';
import { login, loginWithRole, ROLE } from '../../../tasks/login';
import { generateRandomStringName } from '../../../tasks/utils';
import type { ReturnTypeFromChainable } from '../../../types';
import { indexEndpointHosts } from '../../../tasks/index_endpoint_hosts';
import { indexEndpointRuleAlerts } from '../../../tasks/index_endpoint_rule_alerts';
import { disableExpandableFlyoutAdvancedSettings } from '../../tasks/common';
import { APP_ALERTS_PATH } from '../../../../../common/constants';
import { closeAllToasts } from '../../tasks/toasts';
import { fillUpNewRule } from '../../tasks/response_actions';
import { login, loginWithRole, ROLE } from '../../tasks/login';
import { generateRandomStringName } from '../../tasks/utils';
import type { ReturnTypeFromChainable } from '../../types';
import { indexEndpointHosts } from '../../tasks/index_endpoint_hosts';
import { indexEndpointRuleAlerts } from '../../tasks/index_endpoint_rule_alerts';
describe('No License', { tags: '@ess', env: { ftrConfig: { license: 'basic' } } }, () => {
describe('User cannot use endpoint action in form', () => {

View file

@ -5,15 +5,15 @@
* 2.0.
*/
import { disableExpandableFlyoutAdvancedSettings } from '../../../tasks/common';
import { generateRandomStringName } from '../../../tasks/utils';
import { APP_ALERTS_PATH } from '../../../../../../common/constants';
import { closeAllToasts } from '../../../tasks/toasts';
import { indexEndpointHosts } from '../../../tasks/index_endpoint_hosts';
import type { ReturnTypeFromChainable } from '../../../types';
import { indexEndpointRuleAlerts } from '../../../tasks/index_endpoint_rule_alerts';
import { disableExpandableFlyoutAdvancedSettings } from '../../tasks/common';
import { generateRandomStringName } from '../../tasks/utils';
import { APP_ALERTS_PATH } from '../../../../../common/constants';
import { closeAllToasts } from '../../tasks/toasts';
import { indexEndpointHosts } from '../../tasks/index_endpoint_hosts';
import type { ReturnTypeFromChainable } from '../../types';
import { indexEndpointRuleAlerts } from '../../tasks/index_endpoint_rule_alerts';
import { login, ROLE } from '../../../tasks/login';
import { login, ROLE } from '../../tasks/login';
describe('Results', { tags: '@ess' }, () => {
let endpointData: ReturnTypeFromChainable<typeof indexEndpointHosts> | undefined;

View file

@ -5,19 +5,19 @@
* 2.0.
*/
import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data';
import { getAlertsTableRows, navigateToAlertsList } from '../../screens/alerts';
import { waitForEndpointAlerts } from '../../tasks/alerts';
import { request } from '../../tasks/common';
import { createAgentPolicyTask, getEndpointIntegrationVersion } from '../../tasks/fleet';
import { createEndpointHost } from '../../tasks/create_endpoint_host';
import type { IndexedFleetEndpointPolicyResponse } from '../../../../../common/endpoint/data_loaders/index_fleet_endpoint_policy';
import { enableAllPolicyProtections } from '../../tasks/endpoint_policy';
import type { PolicyData, ResponseActionApiResponse } from '../../../../../common/endpoint/types';
import type { CreateAndEnrollEndpointHostResponse } from '../../../../../scripts/endpoint/common/endpoint_host_services';
import { login } from '../../tasks/login';
import { EXECUTE_ROUTE } from '../../../../../common/endpoint/constants';
import { waitForActionToComplete } from '../../tasks/response_actions';
import { deleteAllLoadedEndpointData } from '../tasks/delete_all_endpoint_data';
import { getAlertsTableRows, navigateToAlertsList } from '../screens/alerts';
import { waitForEndpointAlerts } from '../tasks/alerts';
import { request } from '../tasks/common';
import { createAgentPolicyTask, getEndpointIntegrationVersion } from '../tasks/fleet';
import { createEndpointHost } from '../tasks/create_endpoint_host';
import type { IndexedFleetEndpointPolicyResponse } from '../../../../common/endpoint/data_loaders/index_fleet_endpoint_policy';
import { enableAllPolicyProtections } from '../tasks/endpoint_policy';
import type { PolicyData, ResponseActionApiResponse } from '../../../../common/endpoint/types';
import type { CreateAndEnrollEndpointHostResponse } from '../../../../scripts/endpoint/common/endpoint_host_services';
import { login } from '../tasks/login';
import { EXECUTE_ROUTE } from '../../../../common/endpoint/constants';
import { waitForActionToComplete } from '../tasks/response_actions';
describe(
'Endpoint generated alerts',

View file

@ -5,9 +5,9 @@
* 2.0.
*/
import { closeAllToasts } from '../../tasks/toasts';
import { login } from '../../tasks/login';
import { loadPage } from '../../tasks/common';
import { closeAllToasts } from '../tasks/toasts';
import { login } from '../tasks/login';
import { loadPage } from '../tasks/common';
describe('When defining a kibana role for Endpoint security access', { tags: '@ess' }, () => {
const getAllSubFeatureRows = (): Cypress.Chainable<JQuery<HTMLElement>> => {

View file

@ -18,6 +18,7 @@ import {
describe(
'When on the Endpoint List in Security Essentials PLI',
{
tags: ['@serverless', '@brokenInServerless'],
env: {
ftrConfig: {
productTypes: [{ product_line: 'security', product_tier: 'essentials' }],

View file

@ -14,6 +14,7 @@ import { getEndpointManagementPageList } from '../../../screens';
describe(
'App Features for Security Complete PLI',
{
tags: ['@serverless', '@brokenInServerless'],
env: {
ftrConfig: { productTypes: [{ product_line: 'security', product_tier: 'complete' }] },
},

View file

@ -17,6 +17,7 @@ import {
describe(
'App Features for Security Complete PLI with Endpoint Complete Addon',
{
tags: ['@serverless', '@brokenInServerless'],
env: {
ftrConfig: {
productTypes: [

View file

@ -14,6 +14,7 @@ import { getEndpointManagementPageList } from '../../../screens';
describe(
'App Features for Security Essential PLI',
{
tags: ['@serverless', '@brokenInServerless'],
env: {
ftrConfig: {
productTypes: [{ product_line: 'security', product_tier: 'essentials' }],

View file

@ -17,6 +17,7 @@ import {
describe(
'App Features for Security Essentials PLI with Endpoint Essentials Addon',
{
tags: ['@serverless', '@brokenInServerless'],
env: {
ftrConfig: {
productTypes: [

View file

@ -12,6 +12,7 @@ import type { IndexedFleetEndpointPolicyResponse } from '../../../../../common/e
describe(
'When displaying the Policy Details in Security Essentials PLI',
{
tags: ['@serverless', '@brokenInServerless'],
env: {
ftrConfig: {
productTypes: [{ product_line: 'security', product_tier: 'essentials' }],

View file

@ -33,6 +33,7 @@ import {
describe(
'User Roles for Security Complete PLI with Endpoint Complete addon',
{
tags: ['@serverless', '@brokenInServerless'],
env: {
ftrConfig: {
productTypes: [

View file

@ -26,6 +26,7 @@ import {
describe(
'Roles for Security Essential PLI with Endpoint Essentials addon',
{
tags: ['@serverless', '@brokenInServerless'],
env: {
ftrConfig: {
productTypes: [

View file

@ -93,7 +93,7 @@ ${JSON.stringify(argv, null, 2)}
----------------------------------------------
`);
const isOpen = argv._[0] === 'open';
const isOpen = argv._.includes('open');
const cypressConfigFilePath = require.resolve(`../../${argv.configFile}`) as string;
const cypressConfigFile = await import(cypressConfigFilePath);

View file

@ -17,7 +17,6 @@
"exclude": [
"target/**/*",
"**/cypress/**",
"public/management/cypress_endpoint.config.ts",
"public/management/cypress.config.ts"
],
"kbn_references": [