From 8dd678144044970c807cdfdb02f18bb775f171fe Mon Sep 17 00:00:00 2001 From: AWSHurneyt Date: Thu, 6 Mar 2025 15:26:41 -0800 Subject: [PATCH 01/11] Fix cypress configuration for 3.0-alpha1. Signed-off-by: AWSHurneyt --- cypress.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cypress.config.js b/cypress.config.js index e234d283e..f89ca96f4 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -8,7 +8,7 @@ module.exports = defineConfig({ responseTimeout: 300000, env: { opensearch_url: 'localhost:9200', - opensearch_dashboards: 'http://localhost:5601', + opensearch_dashboards: 'localhost:5601', security_enabled: false, }, fixturesFolder: '.cypress/fixtures', From b5d59ec263a941ea5ae77baad5dd5290a8319ad8 Mon Sep 17 00:00:00 2001 From: AWSHurneyt Date: Thu, 6 Mar 2025 16:08:41 -0800 Subject: [PATCH 02/11] Fix cypress configuration for 3.0-alpha1. Signed-off-by: AWSHurneyt --- cypress.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cypress.config.js b/cypress.config.js index f89ca96f4..4df7a42d8 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -18,7 +18,7 @@ module.exports = defineConfig({ // We've imported your old cypress plugins here. // You may want to clean this up later by importing these. setupNodeEvents(on, config) { - return require('./.cypress/plugins/index.js')(on, config); + return require('./.cypress/plugins/index.ts')(on, config); }, specPattern: '.cypress/integration/*.spec.js', supportFile: '.cypress/support/index.js', From 541bf0397bf700356ed276ab1785b6381f60f6e4 Mon Sep 17 00:00:00 2001 From: AWSHurneyt Date: Fri, 7 Mar 2025 10:00:33 -0800 Subject: [PATCH 03/11] Fixed cypress tests. Signed-off-by: AWSHurneyt --- .cypress/integration/1_detectors.spec.js | 24 +++++++++++++++--------- .cypress/integration/2_rules.spec.js | 2 +- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/.cypress/integration/1_detectors.spec.js b/.cypress/integration/1_detectors.spec.js index 8a18db2c7..42a9355bc 100644 --- a/.cypress/integration/1_detectors.spec.js +++ b/.cypress/integration/1_detectors.spec.js @@ -207,16 +207,22 @@ describe('Detectors', () => { // Create test index cy.createIndex(cypressIndexDns, sample_dns_index_settings).then(() => cy - .request('POST', '_plugins/_security_analytics/rules/_search?prePackaged=true', { - from: 0, - size: 5000, - query: { - nested: { - path: 'rule', - query: { bool: { must: [{ match: { 'rule.category': 'dns' } }] } }, + .request( + 'POST', + `${Cypress.env( + 'opensearch_url' + )}/_plugins/_security_analytics/rules/_search?pre_packaged=true`, + { + from: 0, + size: 5000, + query: { + nested: { + path: 'rule', + query: { bool: { must: [{ match: { 'rule.category': 'dns' } }] } }, + }, }, - }, - }) + } + ) .should('have.property', 'status', 200) ); diff --git a/.cypress/integration/2_rules.spec.js b/.cypress/integration/2_rules.spec.js index a7d2271fd..fae4c028a 100644 --- a/.cypress/integration/2_rules.spec.js +++ b/.cypress/integration/2_rules.spec.js @@ -576,7 +576,7 @@ describe('Rules', () => { it('...can be imported with log type', () => { getImportButton().click({ force: true }); - getImportRuleFilePicker().selectFile('./cypress/fixtures/sample_aws_s3_rule_to_import.yml'); + getImportRuleFilePicker().selectFile('./.cypress/fixtures/sample_aws_s3_rule_to_import.yml'); // Check that AWS S3 log type is set. cy.contains('AWS S3'); }); From 87ca9d5a6404a1b3bf5f2fc937d629a8ec145f23 Mon Sep 17 00:00:00 2001 From: AWSHurneyt Date: Fri, 7 Mar 2025 12:21:44 -0800 Subject: [PATCH 04/11] Reconfigure cypress workflow. Signed-off-by: AWSHurneyt --- .github/workflows/cypress-workflow.yml | 31 +++++++++++++++++--------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/.github/workflows/cypress-workflow.yml b/.github/workflows/cypress-workflow.yml index c6cb0d8bc..ab8f495f2 100644 --- a/.github/workflows/cypress-workflow.yml +++ b/.github/workflows/cypress-workflow.yml @@ -10,28 +10,38 @@ env: OPENSEARCH_DASHBOARDS_VERSION: 'main' OPENSEARCH_VERSION: '3.0.0-alpha1-SNAPSHOT' SECURITY_ANALYTICS_BRANCH: 'main' - GRADLE_VERSION: '7.6.1' jobs: tests: - name: Run Cypress E2E tests strategy: + # This setting says that all jobs should finish, even if one fails + fail-fast: false matrix: os: [ubuntu-latest, windows-latest] include: - os: windows-latest + os_build_args: -x integTest -x jacocoTestReport + working_directory: X:\ + os_java_options: -Xmx4096M cypress_cache_folder: ~/AppData/Local/Cypress/Cache - os: ubuntu-latest + os_build_args: -x integTest -x jacocoTestReport + jest_test_args: --coverage cypress_cache_folder: ~/.cache/Cypress - runs-on: ${{ matrix.os }} env: # prevents extra Cypress installation progress messages CI: 1 # avoid warnings like "tput: No value for $TERM and no -T specified" TERM: xterm + WORKING_DIR: ${{ matrix.working_directory }}. + + name: Run Cypress E2E tests on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + steps: - name: Set up JDK - uses: actions/setup-java@v1 + uses: actions/setup-java@v2 with: + distribution: temurin # Temurin is a distribution of adoptium # TODO: Parse this from security analytics plugin (https://github.com/opensearch-project/security-analytics/issues/170) java-version: 21 @@ -39,19 +49,22 @@ jobs: if: ${{ matrix.os == 'windows-latest' }} run: git config --system core.longpaths true - - name: Checkout security analytics + - name: Checkout security analytics backend uses: actions/checkout@v2 with: path: security-analytics repository: opensearch-project/security-analytics ref: ${{ env.SECURITY_ANALYTICS_BRANCH }} - - name: Run opensearch with plugin + - name: Run OpenSearch with plugin run: | cd security-analytics ./gradlew run -Dopensearch.version=${{ env.OPENSEARCH_VERSION }} & sleep 300 shell: bash + env: + _JAVA_OPTIONS: ${{ matrix.os_java_options }} + - name: Checkout OpenSearch-Dashboards uses: actions/checkout@v2 @@ -122,12 +135,10 @@ jobs: uses: actions/cache@v4 with: path: ${{ matrix.cypress_cache_folder }} - key: cypress-cache-v2-${{ runner.os }}-${{ hashFiles('OpenSearch-Dashboards/plugins/security-analytics-dashboards-plugin/package.json') }} - restore-keys: | - cypress-cache-v2-${{ runner.os }}-${{ hashFiles('OpenSearch-Dashboards/plugins/security-analytics-dashboards-plugin/package.json') }} + key: cypress-cache-v4-${{ runner.os }}-${{ hashFiles('OpenSearch-Dashboards/plugins/security-analytics-dashboards-plugin/package.json') }} # for now just chrome, use matrix to do all browsers later - - name: Cypress tests + - name: Run cypress tests uses: cypress-io/github-action@v5 with: working-directory: OpenSearch-Dashboards/plugins/security-analytics-dashboards-plugin From ad1b1bab4d22f6beb9e1d521e314fbf434af7222 Mon Sep 17 00:00:00 2001 From: AWSHurneyt Date: Fri, 7 Mar 2025 12:22:52 -0800 Subject: [PATCH 05/11] Reconfigure cypress workflow. Signed-off-by: AWSHurneyt --- .github/workflows/cypress-workflow.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/cypress-workflow.yml b/.github/workflows/cypress-workflow.yml index ab8f495f2..1e56a344b 100644 --- a/.github/workflows/cypress-workflow.yml +++ b/.github/workflows/cypress-workflow.yml @@ -19,13 +19,10 @@ jobs: os: [ubuntu-latest, windows-latest] include: - os: windows-latest - os_build_args: -x integTest -x jacocoTestReport working_directory: X:\ os_java_options: -Xmx4096M cypress_cache_folder: ~/AppData/Local/Cypress/Cache - os: ubuntu-latest - os_build_args: -x integTest -x jacocoTestReport - jest_test_args: --coverage cypress_cache_folder: ~/.cache/Cypress env: # prevents extra Cypress installation progress messages From 5c04c04f4dd2c21054af4350ccf907748052ee66 Mon Sep 17 00:00:00 2001 From: AWSHurneyt Date: Fri, 7 Mar 2025 14:16:23 -0800 Subject: [PATCH 06/11] Reconfigure cypress workflow. Signed-off-by: AWSHurneyt --- .github/workflows/cypress-workflow.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cypress-workflow.yml b/.github/workflows/cypress-workflow.yml index 1e56a344b..1dbe874c1 100644 --- a/.github/workflows/cypress-workflow.yml +++ b/.github/workflows/cypress-workflow.yml @@ -99,7 +99,10 @@ jobs: - name: Run OpenSearch-Dashboards server run: | cd OpenSearch-Dashboards - yarn start --no-base-path --no-watch --server.host="0.0.0.0" & + yarn start --no-base-path --no-watch --server.host="0.0.0.0" --opensearch.requestTimeout=120000 & + timeout 900 bash -c 'while [[ "$(curl -s http://localhost:5601/api/status | jq -r '.status.overall.state')" != "green" ]]; do echo sleeping 5; sleep 5; done' + curl -sk localhost:5601/api/status | jq + netstat -anp tcp | grep LISTEN | grep 5601 || netstat -ntlp | grep 5601 shell: bash # Window is slow so wait longer @@ -132,7 +135,7 @@ jobs: uses: actions/cache@v4 with: path: ${{ matrix.cypress_cache_folder }} - key: cypress-cache-v4-${{ runner.os }}-${{ hashFiles('OpenSearch-Dashboards/plugins/security-analytics-dashboards-plugin/package.json') }} + key: cypress-cache-v2-${{ runner.os }}-${{ hashFiles('OpenSearch-Dashboards/plugins/security-analytics-dashboards-plugin/package.json') }} # for now just chrome, use matrix to do all browsers later - name: Run cypress tests @@ -142,7 +145,6 @@ jobs: command: yarn run cypress run wait-on: 'http://localhost:5601' wait-on-timeout: 300 - browser: chrome env: CYPRESS_CACHE_FOLDER: ${{ matrix.cypress_cache_folder }} From ead51475b8ab7bac692cb3cd0c2915af5324085f Mon Sep 17 00:00:00 2001 From: AWSHurneyt Date: Fri, 7 Mar 2025 14:59:32 -0800 Subject: [PATCH 07/11] Add wait to helper function. Signed-off-by: AWSHurneyt --- .cypress/support/helpers.js | 4 ++++ .github/workflows/cypress-workflow.yml | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.cypress/support/helpers.js b/.cypress/support/helpers.js index e430fb8f0..b6d174ea1 100644 --- a/.cypress/support/helpers.js +++ b/.cypress/support/helpers.js @@ -64,6 +64,10 @@ Cypress.Commands.add( Cypress.log({ message: `Select combobox items: ${items.join(' | ')}` }); items.map((item) => { cy.wrap(subject).type(item); + + // Short wait to reduce flakiness + cy.wait(3000); + cy.get(`[title="${item}"]`).click({ force: true }); }); } diff --git a/.github/workflows/cypress-workflow.yml b/.github/workflows/cypress-workflow.yml index 1dbe874c1..db98bacc4 100644 --- a/.github/workflows/cypress-workflow.yml +++ b/.github/workflows/cypress-workflow.yml @@ -19,7 +19,6 @@ jobs: os: [ubuntu-latest, windows-latest] include: - os: windows-latest - working_directory: X:\ os_java_options: -Xmx4096M cypress_cache_folder: ~/AppData/Local/Cypress/Cache - os: ubuntu-latest From f2f6dd01614a1244b2867e2d52b46424358c2731 Mon Sep 17 00:00:00 2001 From: AWSHurneyt Date: Fri, 7 Mar 2025 15:19:19 -0800 Subject: [PATCH 08/11] Reconfigure cypress workflow. Signed-off-by: AWSHurneyt --- .github/workflows/cypress-workflow.yml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/.github/workflows/cypress-workflow.yml b/.github/workflows/cypress-workflow.yml index db98bacc4..c5ea2ffff 100644 --- a/.github/workflows/cypress-workflow.yml +++ b/.github/workflows/cypress-workflow.yml @@ -19,7 +19,6 @@ jobs: os: [ubuntu-latest, windows-latest] include: - os: windows-latest - os_java_options: -Xmx4096M cypress_cache_folder: ~/AppData/Local/Cypress/Cache - os: ubuntu-latest cypress_cache_folder: ~/.cache/Cypress @@ -28,14 +27,13 @@ jobs: CI: 1 # avoid warnings like "tput: No value for $TERM and no -T specified" TERM: xterm - WORKING_DIR: ${{ matrix.working_directory }}. name: Run Cypress E2E tests on ${{ matrix.os }} runs-on: ${{ matrix.os }} steps: - name: Set up JDK - uses: actions/setup-java@v2 + uses: actions/setup-java@v4 with: distribution: temurin # Temurin is a distribution of adoptium # TODO: Parse this from security analytics plugin (https://github.com/opensearch-project/security-analytics/issues/170) @@ -58,9 +56,6 @@ jobs: ./gradlew run -Dopensearch.version=${{ env.OPENSEARCH_VERSION }} & sleep 300 shell: bash - env: - _JAVA_OPTIONS: ${{ matrix.os_java_options }} - - name: Checkout OpenSearch-Dashboards uses: actions/checkout@v2 @@ -107,7 +102,7 @@ jobs: # Window is slow so wait longer - name: Sleep until OSD server starts - windows if: ${{ matrix.os == 'windows-latest' }} - run: Start-Sleep -s 450 + run: Start-Sleep -s 600 shell: powershell - name: Sleep until OSD server starts - non-windows From 0b8db3052b1c66ed5f9813c16b4e2786458d47b3 Mon Sep 17 00:00:00 2001 From: AWSHurneyt Date: Fri, 7 Mar 2025 15:31:45 -0800 Subject: [PATCH 09/11] Reconfigure cypress workflow. Signed-off-by: AWSHurneyt --- .github/workflows/cypress-workflow.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cypress-workflow.yml b/.github/workflows/cypress-workflow.yml index c5ea2ffff..2a4157a53 100644 --- a/.github/workflows/cypress-workflow.yml +++ b/.github/workflows/cypress-workflow.yml @@ -53,7 +53,7 @@ jobs: - name: Run OpenSearch with plugin run: | cd security-analytics - ./gradlew run -Dopensearch.version=${{ env.OPENSEARCH_VERSION }} & + ./gradlew run -Dopensearch.version=${{ env.OPENSEARCH_VERSION }} -x jacocoTestReport & sleep 300 shell: bash From 1b491f24a3222a97bc1b35c37649c5af757afe4e Mon Sep 17 00:00:00 2001 From: AWSHurneyt Date: Fri, 7 Mar 2025 15:53:17 -0800 Subject: [PATCH 10/11] Reconfigure cypress workflow. Signed-off-by: AWSHurneyt --- .github/workflows/cypress-workflow.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/cypress-workflow.yml b/.github/workflows/cypress-workflow.yml index 2a4157a53..4a29e4353 100644 --- a/.github/workflows/cypress-workflow.yml +++ b/.github/workflows/cypress-workflow.yml @@ -10,6 +10,7 @@ env: OPENSEARCH_DASHBOARDS_VERSION: 'main' OPENSEARCH_VERSION: '3.0.0-alpha1-SNAPSHOT' SECURITY_ANALYTICS_BRANCH: 'main' + GRADLE_VERSION: '7.6.1' jobs: tests: strategy: @@ -50,6 +51,11 @@ jobs: repository: opensearch-project/security-analytics ref: ${{ env.SECURITY_ANALYTICS_BRANCH }} + - name: Set up Gradle + uses: gradle/gradle-build-action@v2 + with: + gradle-version: ${{ env.GRADLE_VERSION }} + - name: Run OpenSearch with plugin run: | cd security-analytics From 169adb1e0aa9a5a57e067c6aad2276611e276459 Mon Sep 17 00:00:00 2001 From: AWSHurneyt Date: Fri, 7 Mar 2025 16:15:17 -0800 Subject: [PATCH 11/11] Reconfigure cypress workflow. Signed-off-by: AWSHurneyt --- .github/workflows/cypress-workflow.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/cypress-workflow.yml b/.github/workflows/cypress-workflow.yml index 4a29e4353..a1a8e7e6a 100644 --- a/.github/workflows/cypress-workflow.yml +++ b/.github/workflows/cypress-workflow.yml @@ -20,7 +20,10 @@ jobs: os: [ubuntu-latest, windows-latest] include: - os: windows-latest + os_build_args: -x integTest cypress_cache_folder: ~/AppData/Local/Cypress/Cache + working_directory: X:\ + os_java_options: -Xmx4096M - os: ubuntu-latest cypress_cache_folder: ~/.cache/Cypress env: