diff --git a/.github/actions/download-plugin/action.yml b/.github/actions/download-plugin/action.yml new file mode 100644 index 000000000..088077414 --- /dev/null +++ b/.github/actions/download-plugin/action.yml @@ -0,0 +1,53 @@ +name: 'Download Security Plugin' +description: 'Installs OpenSearch Dashboard with a Plugin from github, then checkouts the correct dashboards version for the plugin, configures npm/yarn, and bootstraps Dashboards' + +inputs: + opensearch-version: + description: 'The version of OpenSearch that should be used, e.g "2.6.0"' + required: true + + plugin-name: + description: 'The the name of the plugin to use, such as opensearch-security' + required: true + + plugin-version: + description: 'The version of security plugin that should be used, e.g "2.6.0.0"' + required: true + +runs: + using: "composite" + steps: + - name: Download OpenSearch for Linux + uses: peternied/download-file@v2 + if: ${{ runner.os == 'Linux' }} + with: + url: https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/${{ inputs.opensearch-version }}/latest/linux/x64/tar/builds/opensearch/plugins/${{ inputs.plugin-name }}-${{ inputs.plugin-version }}.zip + + - name: Download OpenSearch for Windows + uses: peternied/download-file@v2 + if: ${{ runner.os == 'Windows' }} + with: + url: https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/${{ inputs.opensearch-version }}/latest/windows/x64/zip/builds/opensearch/plugins/${{ inputs.plugin-name }}-${{ inputs.plugin-version }}.zip + + - name: Rename the Plugin Files + run: mv opensearch-security-${{ inputs.plugin-version }}.zip opensearch-security.zip + shell: bash + + - name: Create Setup Script for Linux + if: ${{ runner.os == 'Linux' }} + run: | + cat > setup.sh <<'EOF' + chmod +x ./opensearch-${{ inputs.opensearch-version}}-SNAPSHOT/plugins/${{ inputs.plugin-name }}/tools/install_demo_configuration.sh + /bin/bash -c "yes | ./opensearch-${{ inputs.opensearch-version}}-SNAPSHOT/plugins/${{ inputs.plugin-name }}/tools/install_demo_configuration.sh" + echo "plugins.security.unsupported.restapi.allow_securityconfig_modification: true" >> ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT/config/opensearch.yml + EOF + shell: bash + + - name: Create Setup Script for Windows + if: ${{ runner.os == 'Windows' }} + run: | + New-Item .\setup.bat -type file + Set-Content .\setup.bat -Value "powershell.exe -noexit -command `".\opensearch-${{ inputs.opensearch-version}}-SNAPSHOT\plugins\${{ inputs.plugin-name }}\tools\install_demo_configuration.bat -y -i -c`"" + Add-Content -Path .\setup.bat -Value "echo plugins.security.unsupported.restapi.allow_securityconfig_modification: true >> .\opensearch-${{ inputs.opensearch-version}}-SNAPSHOT\config\opensearch.yml" + Get-Content .\setup.bat + shell: pwsh diff --git a/.github/actions/install-dashboards/action.yml b/.github/actions/install-dashboards/action.yml index 7dae184e8..77555f326 100644 --- a/.github/actions/install-dashboards/action.yml +++ b/.github/actions/install-dashboards/action.yml @@ -15,7 +15,6 @@ outputs: description: "The directory where the plugin has been configured" value: ${{ steps.determine-plugin-directory.outputs.plugin-directory }} - runs: using: "composite" steps: @@ -25,7 +24,6 @@ runs: - id: determine-plugin-directory run: echo "::set-output name=plugin-directory::./OpenSearch-Dashboards/plugins/${{ inputs.plugin_name }}" - # run: echo "plugin-directory=./OpenSearch-Dashboards/plugins/${{ inputs.plugin_name }}" >> $GITHUB_OUTPUT shell: bash - uses: actions/checkout@v2 @@ -35,17 +33,11 @@ runs: ref: 'main' fetch-depth: 0 - - run: mkdir -p plugins - working-directory: OpenSearch-Dashboards - shell: bash - - uses: actions/checkout@v2 with: path: ${{ steps.determine-plugin-directory.outputs.plugin-directory }} - # ref: ${{ github.ref }} - id: osd-version - continue-on-error: true run: | echo "::set-output name=osd-version::$(cat package.json | jq '.opensearchDashboards.version' | cut -c 2-4)" echo "::set-output name=osd-x-version::$(cat package.json | jq '.opensearchDashboards.version' | cut -c 2-3)" @@ -71,14 +63,18 @@ runs: node-version: ${{ steps.tool-versions.outputs.node_version }} registry-url: 'https://registry.npmjs.org' - - run: | + - name: Setup Opensearch Dashboards + run: | npm uninstall -g yarn echo "Installing yarn ${{ steps.tool-versions.outputs.yarn_version }}" npm i -g yarn@${{ steps.tool-versions.outputs.yarn_version }} + yarn cache clean + yarn add sha.js working-directory: OpenSearch-Dashboards shell: bash - - uses: nick-fields/retry@v2 + - name: Bootstrap the OpenSearch Dashboard + uses: nick-fields/retry@v2 with: timeout_minutes: 20 max_attempts: 2 diff --git a/.github/workflows/cypress-test.yml b/.github/workflows/cypress-test.yml index a0f8d82ba..fa66d8778 100644 --- a/.github/workflows/cypress-test.yml +++ b/.github/workflows/cypress-test.yml @@ -1,6 +1,6 @@ name: Cypress Tests -on: [push, pull_request] +on: [ push, pull_request ] env: TEST_BROWSER_HEADLESS: 1 @@ -9,95 +9,50 @@ env: START_CMD: 'node ../scripts/opensearch_dashboards --dev --no-base-path --no-watch --opensearch_security.multitenancy.enable_aggregation_view=true' OPENSEARCH_SNAPSHOT_CMD: 'node ../scripts/opensearch snapshot' SPEC: 'cypress/integration/plugins/security-dashboards-plugin/aggregation_view.js,' + OPENSEARCH_VERSION: 2.6.0 + PLUGIN_NAME: opensearch-security + PLUGIN_VERSION: 2.6.0.0 jobs: tests: - name: Run aggregation view cypress test - runs-on: ubuntu-latest + name: Run Cypress tests + strategy: + fail-fast: false + matrix: + os: [ ubuntu-latest , windows-latest ] + runs-on: ${{ matrix.os }} + steps: - - name: Download OpenSearch Core - run: | - wget https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/2.6.0/latest/linux/x64/tar/builds/opensearch/dist/opensearch-min-2.6.0-linux-x64.tar.gz - tar -xzf opensearch-*.tar.gz - rm -f opensearch-*.tar.gz - - - name: Download OpenSearch Security Plugin - run: wget -O opensearch-security.zip https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/2.6.0/latest/linux/x64/tar/builds/opensearch/plugins/opensearch-security-2.6.0.0.zip - + - name: Set up JDK + uses: actions/setup-java@v1 + with: + java-version: 11 - - name: Run OpenSearch with plugin - run: | - cat > os-ep.sh <> /opensearch/config/opensearch.yml - chown 1001:1001 -R /opensearch - su -c "/opensearch/bin/opensearch" -s /bin/bash opensearch - EOF - docker build -t opensearch-test:latest -f- . <> ./config/opensearch_dashboards.yml echo 'opensearch.hosts: ["https://localhost:9200"]' >> ./config/opensearch_dashboards.yml echo 'opensearch.ssl.verificationMode: none' >> ./config/opensearch_dashboards.yml @@ -109,23 +64,9 @@ jobs: echo 'opensearch_security.readonly_mode.roles: ["kibana_read_only"]' >> ./config/opensearch_dashboards.yml echo 'opensearch_security.cookie.secure: false' >> ./config/opensearch_dashboards.yml echo 'opensearch_security.multitenancy.enable_aggregation_view: true' >> ./config/opensearch_dashboards.yml - yarn start --no-base-path --no-watch & - sleep 300 - - - name: Checkout - uses: actions/checkout@v2 - with: - path: ${{ env.FTR_PATH }} - repository: opensearch-project/opensearch-dashboards-functional-test - ref: '2.x' - - - name: Get Cypress version - id: cypress_version - run: | - echo "::set-output name=cypress_version::$(cat ./${{ env.FTR_PATH }}/package.json | jq '.devDependencies.cypress' | tr -d '"')" - - - name: Run tests - uses: cypress-io/github-action@v2 - with: - working-directory: ${{ env.FTR_PATH }} - command: yarn cypress:run-with-security-and-aggregation-view --browser chromium --spec ${{ env.SPEC }} + nohup yarn start --no-base-path --no-watch & + sleep 500 + git clone https://github.com/opensearch-project/opensearch-dashboards-functional-test.git + cd opensearch-dashboards-functional-test + npm install cypress --save-dev + yarn cypress:run-with-security-and-aggregation-view --browser chrome --spec "cypress/integration/plugins/security-dashboards-plugin/aggregation_view.js" diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index 11bd154de..e5ee5714d 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -5,65 +5,81 @@ on: [push, pull_request] env: TEST_BROWSER_HEADLESS: 1 CI: 1 + OPENSEARCH_VERSION: 2.6.0 + PLUGIN_NAME: opensearch-security + PLUGIN_VERSION: 2.6.0.0 jobs: tests: name: Run integration tests - runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + os: [ ubuntu-latest , windows-latest ] + runs-on: ${{ matrix.os }} + steps: - - uses: browser-actions/setup-geckodriver@latest + - name: Checkout Branch + uses: actions/checkout@v3 + + - name: Set up JDK + uses: actions/setup-java@v1 + with: + java-version: 11 + + - uses: browser-actions/setup-geckodriver@v0.0.0 - run: geckodriver --version - - uses: browser-actions/setup-firefox@latest + - name: Set up Firefox browser + if: ${{ runner.os == 'Linux' }} + uses: browser-actions/setup-firefox@v1 + - run: firefox --version + if: ${{ runner.os == 'Linux' }} - - name: Download OpenSearch Core - run: | - wget https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/2.6.0/latest/linux/x64/tar/builds/opensearch/dist/opensearch-min-2.6.0-linux-x64.tar.gz - tar -xzf opensearch-*.tar.gz - rm -f opensearch-*.tar.gz - - - name: Download OpenSearch Security Plugin - run: wget -O opensearch-security.zip https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/2.6.0/latest/linux/x64/tar/builds/opensearch/plugins/opensearch-security-2.6.0.0.zip - + # Browser-action version does not work on Windows + - name: Set up Firefox browser for Windows + if: ${{ runner.os == 'Windows' }} + uses: RyanL1997/setup-browser@main + with: + browser: firefox + version: latest - - name: Run OpenSearch with plugin - run: | - cat > os-ep.sh <> /opensearch/config/opensearch.yml - chown 1001:1001 -R /opensearch - su -c "/opensearch/bin/opensearch" -s /bin/bash opensearch - EOF - docker build -t opensearch-test:latest -f- . < { await driver.get(`http://localhost:5601/app/opensearch_dashboards_overview?token=${token}`); const rep = await driver.getPageSource(); - expect(rep).toContain( - '"statusCode":401,"error":"Unauthorized","message":"Authentication Exception"' - ); + expect(rep).toContain('401'); + expect(rep).toContain('Unauthorized'); + expect(rep).toContain('Authentication Exception'); const cookie = await driver.manage().getCookies(); expect(cookie.length).toEqual(0); @@ -311,9 +311,9 @@ describe('start OpenSearch Dashboards server', () => { await driver.get(`http://localhost:5601/app/dev_tools?token=${token}`); const rep = await driver.getPageSource(); - expect(rep).toContain( - '"statusCode":401,"error":"Unauthorized","message":"Authentication Exception"' - ); + expect(rep).toContain('401'); + expect(rep).toContain('Unauthorized'); + expect(rep).toContain('Authentication Exception'); const cookie = await driver.manage().getCookies(); expect(cookie.length).toEqual(0);