diff --git a/.github/workflows/cypress_workflow.yml b/.github/workflows/cypress_workflow.yml index ef985cfa9065..3d3b0b79b027 100644 --- a/.github/workflows/cypress_workflow.yml +++ b/.github/workflows/cypress_workflow.yml @@ -3,7 +3,7 @@ name: Run cypress tests # trigger on every PR for all branches on: pull_request: - branches: [ '**' ] + branches: ['**'] paths-ignore: - '**/*.md' - '.lycheeignore' @@ -32,8 +32,6 @@ env: TEST_REPO: ${{ inputs.test_repo != '' && inputs.test_repo || 'opensearch-project/opensearch-dashboards-functional-test' }} TEST_BRANCH: "${{ inputs.test_branch != '' && inputs.test_branch || github.base_ref }}" FTR_PATH: 'ftr' - START_CMD: 'node ../scripts/opensearch_dashboards --dev --no-base-path --no-watch --savedObjects.maxImportPayloadBytes=10485760 --server.maxPayloadBytes=1759977 --logging.json=false --data.search.aggs.shardDelay.enabled=true --csp.warnLegacyBrowsers=false --uiSettings.overrides["query:enhancements:enabled"]=false' - OPENSEARCH_SNAPSHOT_CMD: 'node ../scripts/opensearch snapshot -E cluster.routing.allocation.disk.threshold_enabled=false' CYPRESS_BROWSER: 'chromium' CYPRESS_VISBUILDER_ENABLED: true CYPRESS_DATASOURCE_MANAGEMENT_ENABLED: false @@ -42,6 +40,7 @@ env: COMMENT_TAG: '[MANUAL CYPRESS TEST RUN RESULTS]' COMMENT_SUCCESS_MSG: ':white_check_mark: Cypress test run succeeded!' COMMENT_FAILURE_MSG: ':x: Cypress test run failed!' + LATEST_VERSION: '2.17.0' jobs: cypress-tests: @@ -49,11 +48,57 @@ jobs: strategy: fail-fast: false matrix: - group: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + include: + # Standard test configs (groups 1-9) + - group: 1 + config: standard + test_location: ftr + - group: 2 + config: standard + test_location: ftr + - group: 3 + config: standard + test_location: ftr + - group: 4 + config: standard + test_location: ftr + - group: 5 + config: standard + test_location: ftr + - group: 6 + config: standard + test_location: ftr + - group: 7 + config: standard + test_location: ftr + - group: 8 + config: standard + test_location: ftr + - group: 9 + config: standard + test_location: ftr + # Query enhanced tests + - group: 10 + config: query_enhanced + test_location: ftr + # Dashboard tests + - group: 11 + config: dashboard + test_location: source container: image: docker://opensearchstaging/ci-runner:ci-runner-rockylinux8-opensearch-dashboards-integtest-v2 options: --user 1001 env: + START_CMD: ${{ matrix.config == 'query_enhanced' && + 'node ../scripts/opensearch_dashboards --dev --no-base-path --no-watch --savedObjects.maxImportPayloadBytes=10485760 --server.maxPayloadBytes=1759977 --logging.json=false --data.search.aggs.shardDelay.enabled=true --csp.warnLegacyBrowsers=false --uiSettings.overrides["query:enhancements:enabled"]=true --uiSettings.overrides[''home:useNewHomePage'']=true --data_source.enabled=true --opensearch.ignoreVersionMismatch=true' || + matrix.config == 'dashboard' && + 'node scripts/opensearch_dashboards --dev --no-base-path --no-watch --savedObjects.maxImportPayloadBytes=10485760 --server.maxPayloadBytes=1759977 --logging.json=false --data.search.aggs.shardDelay.enabled=true' || + 'node ../scripts/opensearch_dashboards --dev --no-base-path --no-watch --savedObjects.maxImportPayloadBytes=10485760 --server.maxPayloadBytes=1759977 --logging.json=false --data.search.aggs.shardDelay.enabled=true --csp.warnLegacyBrowsers=false --uiSettings.overrides["query:enhancements:enabled"]=false' }} + OPENSEARCH_SNAPSHOT_CMD: ${{ matrix.config == 'query_enhanced' && + '/bin/bash -c "./opensearch-2.17.0/opensearch-tar-install.sh &"' || + matrix.config == 'dashboard' && + 'node scripts/opensearch snapshot -E cluster.routing.allocation.disk.threshold_enabled=false' || + 'node ../scripts/opensearch snapshot -E cluster.routing.allocation.disk.threshold_enabled=false' }} # prevents extra Cypress installation progress messages CI: 1 # avoid warnings like "tput: No value for $TERM and no -T specified" @@ -117,7 +162,7 @@ jobs: # Setup spec files for existing Functional Test repo cypress tests - name: Setup spec files - if: ${{ inputs.specs == '' && matrix.group < 10 }} + if: ${{ inputs.specs == '' && matrix.test_location == 'ftr' }} working-directory: ${{ env.FTR_PATH }} shell: bash run: | @@ -128,14 +173,26 @@ jobs: done echo "SPEC=${FORMATTED_SPEC}" >> $GITHUB_ENV + # Setup spec files for Dashboards in-house cypress tests + - name: Setup spec files for Dashboards tests + if: ${{ inputs.specs == '' && matrix.test_location == 'source' }} + shell: bash + run: | + IFS="," read -a SPEC_ARRAY <<< $(yarn --silent osd:ciGroup${{ matrix.group }}) + DASHBOARDS_SPEC='' + for i in "${SPEC_ARRAY[@]}"; do + DASHBOARDS_SPEC+="cypress/integration/core_opensearch_dashboards/${i}," + done + echo "DASHBOARDS_SPEC=${DASHBOARDS_SPEC}" >> $GITHUB_ENV + - name: Get Cypress version - if: ${{ matrix.group < 10 }} + if: ${{ matrix.test_location == 'ftr' }} id: cypress_version run: | echo "name=cypress_version::$(cat ./${{ env.FTR_PATH }}/package.json | jq '.devDependencies.cypress' | tr -d '"')" >> $GITHUB_OUTPUT - + - name: Cache Cypress - if: ${{ matrix.group < 10 }} + if: ${{ matrix.test_location == 'ftr' }} id: cache-cypress uses: actions/cache@v1 with: @@ -146,47 +203,70 @@ jobs: - run: npx cypress cache list - run: npx cypress cache path - # Setup spec files for Dashboards in-house cypress tests - - name: Setup spec files for Dashboards tests - if: ${{ inputs.specs == '' && matrix.group > 9 }} + # Run tests based on configuration + - name: Run FT repo tests with no query enhancements + if: matrix.test_location == 'ftr' && matrix.config == 'standard' + uses: cypress-io/github-action@v2 + with: + working-directory: ${{ env.FTR_PATH }} + start: ${{ env.OPENSEARCH_SNAPSHOT_CMD }}, ${{ env.START_CMD }} + wait-on: 'http://localhost:9200, http://localhost:5601' + command: yarn cypress:run-without-security --browser ${{ env.CYPRESS_BROWSER }} --spec ${{ env.SPEC }} + + - name: Download OpenSearch + if: matrix.test_location == 'ftr' && matrix.config == 'query_enhanced' + uses: suisei-cn/actions-download-file@v1.4.0 + with: + url: https://artifacts.opensearch.org/releases/bundle/opensearch/${{ env.LATEST_VERSION }}/opensearch-${{ env.LATEST_VERSION }}-linux-x64.tar.gz + + - name: Extract OpenSearch + if: matrix.test_location == 'ftr' && matrix.config == 'query_enhanced' + run: | + tar -xzf opensearch-*.tar.gz + rm -f opensearch-*.tar.gz shell: bash + + - name: Remove security plugin + if: matrix.test_location == 'ftr' && matrix.config == 'query_enhanced' run: | - IFS="," read -a SPEC_ARRAY <<< $(yarn --silent osd:ciGroup${{ matrix.group }}) - DASHBOARDS_SPEC='' - for i in "${SPEC_ARRAY[@]}"; do - DASHBOARDS_SPEC+="cypress/integration/core_opensearch_dashboards/${i}," - done - echo "DASHBOARDS_SPEC=${DASHBOARDS_SPEC}" >> $GITHUB_ENV + /bin/bash -c "yes | ./opensearch-${{ env.LATEST_VERSION }}/bin/opensearch-plugin remove opensearch-security" + shell: bash - # Run FT repo tests - - name: Run FT repo tests - if: ${{ matrix.group < 10 }} + - name: Run OpenSearch + if: matrix.test_location == 'ftr' && matrix.config == 'query_enhanced' + run: | + /bin/bash -c "./opensearch-2.17.0/opensearch-tar-install.sh &" + sleep 30 + shell: bash + + - name: Run FT repo tests with query enhancements + if: matrix.test_location == 'ftr' && matrix.config == 'query_enhanced' uses: cypress-io/github-action@v2 with: working-directory: ${{ env.FTR_PATH }} - start: ${{ env.OPENSEARCH_SNAPSHOT_CMD }}, ${{ env.START_CMD }} + start: ${{ env.START_CMD }} wait-on: 'http://localhost:9200, http://localhost:5601' command: yarn cypress:run-without-security --browser ${{ env.CYPRESS_BROWSER }} --spec ${{ env.SPEC }} - + # Clear Cypress Cache before running Dashboards tests - name: Clear Cypress Cache - if: ${{ matrix.group > 9 }} + if: matrix.test_location == 'source' run: npx cypress cache clear # Run Dashboards Cypress tests within the source repo - name: Run Dashboards Cypress tests - if: ${{ matrix.group > 9 }} + if: matrix.test_location == 'source' uses: cypress-io/github-action@v6 with: install-command: npx cypress install --force - start: node scripts/opensearch snapshot -E cluster.routing.allocation.disk.threshold_enabled=false, node scripts/opensearch_dashboards --dev --no-base-path --no-watch --savedObjects.maxImportPayloadBytes=10485760 --server.maxPayloadBytes=1759977 --logging.json=false --data.search.aggs.shardDelay.enabled=true + start: ${{ env.OPENSEARCH_SNAPSHOT_CMD }}, ${{ env.START_CMD }} wait-on: 'http://localhost:9200, http://localhost:5601' command: yarn cypress:run-without-security --browser ${{ env.CYPRESS_BROWSER }} --spec ${{ env.DASHBOARDS_SPEC }} # Screenshots are only captured on failure, will change this once we do visual regression tests - name: Upload FT repo screenshots uses: actions/upload-artifact@v3 - if: failure() && (matrix.group < 10) + if: failure() && matrix.test_location == 'ftr' with: name: ftr-cypress-screenshots path: ${{ env.FTR_PATH }}/cypress/screenshots @@ -194,7 +274,7 @@ jobs: - name: Upload FT repo videos uses: actions/upload-artifact@v3 - if: always() && (matrix.group < 10) + if: always() && matrix.test_location == 'ftr' with: name: ftr-cypress-videos path: ${{ env.FTR_PATH }}/cypress/videos @@ -202,14 +282,14 @@ jobs: - name: Upload FT repo results uses: actions/upload-artifact@v3 - if: always() && (matrix.group < 10) + if: always() && matrix.test_location == 'ftr' with: name: ftr-cypress-results path: ${{ env.FTR_PATH }}/cypress/results retention-days: 1 - name: Upload Dashboards screenshots - if: failure() && (matrix.group > 9) + if: failure() && matrix.test_location == 'source' uses: actions/upload-artifact@v3 with: name: dashboards-cypress-screenshots @@ -218,7 +298,7 @@ jobs: - name: Upload Dashboards repo videos uses: actions/upload-artifact@v3 - if: always() && (matrix.group > 9) + if: always() && matrix.test_location == 'source' with: name: dashboards-cypress-videos path: cypress/videos @@ -226,7 +306,7 @@ jobs: - name: Upload Dashboards repo results uses: actions/upload-artifact@v3 - if: always() && (matrix.group > 9) + if: always() && matrix.test_location == 'source' with: name: dashboards-cypress-results path: cypress/results @@ -245,7 +325,7 @@ jobs: with: issue-number: ${{ inputs.pr_number }} comment-author: 'github-actions[bot]' - body-includes: "${{ env.COMMENT_TAG }}" + body-includes: '${{ env.COMMENT_TAG }}' - name: Add comment on the PR uses: peter-evans/create-or-update-comment@v3 diff --git a/package.json b/package.json index b7dcbb23569e..1c6c687eee87 100644 --- a/package.json +++ b/package.json @@ -85,8 +85,7 @@ "release_note:generate": "scripts/use_node scripts/generate_release_note", "cypress:run-without-security": "env TZ=America/Los_Angeles NO_COLOR=1 cypress run --headless --env SECURITY_ENABLED=false", "cypress:run-with-security": "env TZ=America/Los_Angeles NO_COLOR=1 cypress run --headless --env SECURITY_ENABLED=true,openSearchUrl=https://localhost:9200,WAIT_FOR_LOADER_BUFFER_MS=500", - "osd:ciGroup10": "echo \"dashboard_sanity_test_spec.js\"", - "osd:ciGroup11": "echo \"apps/vis_builder/*.js\"", + "osd:ciGroup11": "echo \"dashboard_sanity_test_spec.js\"", "generate:opensearchsqlantlr": "./node_modules/antlr4ng-cli/index.js -Dlanguage=TypeScript -o ./src/plugins/data/public/antlr/opensearch_sql/.generated -visitor -no-listener -Xexact-output-dir ./src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLLexer.g4 ./src/plugins/data/public/antlr/opensearch_sql/grammar/OpenSearchSQLParser.g4", "generate:opensearchpplantlr": "./node_modules/antlr4ng-cli/index.js -Dlanguage=TypeScript -o ./src/plugins/data/public/antlr/opensearch_ppl/.generated -visitor -no-listener -Xexact-output-dir ./src/plugins/data/public/antlr/opensearch_ppl/grammar/OpenSearchPPLLexer.g4 ./src/plugins/data/public/antlr/opensearch_ppl/grammar/OpenSearchPPLParser.g4" }, diff --git a/src/plugins/data/public/ui/dataset_selector/configurator.tsx b/src/plugins/data/public/ui/dataset_selector/configurator.tsx index 2a509eeed288..aa1defba037d 100644 --- a/src/plugins/data/public/ui/dataset_selector/configurator.tsx +++ b/src/plugins/data/public/ui/dataset_selector/configurator.tsx @@ -141,6 +141,7 @@ export const Configurator = ({ setLanguage(e.target.value); setDataset({ ...dataset, language: e.target.value }); }} + data-test-subj="advancedSelectorLanguageSelect" /> {!languageService.getLanguage(language)?.hideDatePicker && diff --git a/src/plugins/data/public/ui/dataset_selector/dataset_selector.tsx b/src/plugins/data/public/ui/dataset_selector/dataset_selector.tsx index 5e1d874d14cc..6e30a5f29c8e 100644 --- a/src/plugins/data/public/ui/dataset_selector/dataset_selector.tsx +++ b/src/plugins/data/public/ui/dataset_selector/dataset_selector.tsx @@ -215,6 +215,7 @@ export const DatasetSelector = ({ appearance={appearance} {...buttonProps} className="datasetSelector__button" + data-test-subj="datasetSelectorButton" iconType="arrowDown" iconSide="right" onClick={togglePopover} @@ -253,6 +254,7 @@ export const DatasetSelector = ({