diff --git a/.github/workflows/remote-integ-tests-workflow.yml b/.github/workflows/remote-integ-tests-workflow.yml new file mode 100644 index 00000000..ced1d7ee --- /dev/null +++ b/.github/workflows/remote-integ-tests-workflow.yml @@ -0,0 +1,169 @@ +name: FTR E2E FF Workbench Test + +on: [pull_request, push] + +env: + CI: 1 + TERM: xterm + OPENSEARCH_DASHBOARDS_VERSION: 'main' + OPENSEARCH_VERSION: '3.0.0' + OPENSEARCH_PLUGIN_VERSION: '3.0.0.0' + +jobs: + tests: + name: Run FTR E2E FF Workbench Tests + strategy: + fail-fast: false + matrix: + os: [ ubuntu-latest ] + jdk: [ 21 ] + runs-on: ${{ matrix.os }} + + steps: + - name: Set up JDK + uses: actions/setup-java@v1 + with: + java-version: ${{ matrix.jdk }} + + - name: Checkout Flow-Framework + uses: actions/checkout@v2 + with: + path: flow-framework + repository: opensearch-project/flow-framework + ref: '${{ github.base_ref }}' + + - name: Run OpenSearch with plugin + run: | + cd flow-framework + ./gradlew run & + timeout 300 bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:9200)" != "200" ]]; do sleep 5; done' + shell: bash + + - name: Check OpenSearch Running on Linux + if: ${{ runner.os != 'Windows'}} + run: curl http://localhost:9200/ + shell: bash + + - name: Checkout OpenSearch Dashboards + uses: actions/checkout@v2 + with: + path: OpenSearch-Dashboards + repository: opensearch-project/OpenSearch-Dashboards + ref: ${{ env.OPENSEARCH_DASHBOARDS_VERSION }} + fetch-depth: 0 + filter: | + cypress + test + + - name: Checkout FF in OpenSearch Dashboards Plugins Dir + uses: actions/checkout@v2 + with: + path: OpenSearch-Dashboards/plugins/dashboards-flow-framework + + - id: tool-versions + run: | + echo "node_version=$(cat .node-version)" >> $GITHUB_OUTPUT + echo "yarn_version=$(jq -r '.engines.yarn' package.json)" >> $GITHUB_OUTPUT + working-directory: OpenSearch-Dashboards + shell: bash + + - uses: actions/setup-node@v1 + with: + node-version: ${{ steps.tool-versions.outputs.node_version }} + registry-url: 'https://registry.npmjs.org' + + - 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 + + - name: Bootstrap Opensearch Dashboards + run: | + yarn osd bootstrap --single-version=loose + working-directory: OpenSearch-Dashboards/plugins/dashboards-flow-framework + + - name: Run Opensearch Dashboards with FF Installed + run: | + nohup yarn start --no-base-path --no-watch --server.host="0.0.0.0" | tee dashboard.log & + sleep 60 + working-directory: OpenSearch-Dashboards + + - name : Check If OpenSearch Dashboards Is Ready + if: ${{ runner.os == 'Linux' }} + run: | + if timeout 600 grep -q "bundles compiled successfully after" <(tail -n0 -f dashboard.log); then + echo "OpenSearch Dashboards compiled successfully." + else + echo "Timeout for 600 seconds reached. OpenSearch Dashboards did not finish compiling." + exit 1 + fi + working-directory: OpenSearch-Dashboards + + - name: Show OpenSearch Dashboards Logs + if: always() + run: cat dashboard.log + working-directory: OpenSearch-Dashboards + + - name: Health check + run: | + timeout 600 bash -c 'while [[ "$(curl -k http://localhost:5601/api/status | jq -r '.status.overall.state')" != "green" ]]; do sleep 5; done' + shell: bash + + - name: Check OpenSearch Dashboards Running on Linux + if: ${{ runner.os != 'Windows'}} + run: curl http://localhost:5601/api/status + shell: bash + + - name: Checkout Dashboards Functional Test Repo + uses: actions/checkout@v2 + with: + path: opensearch-dashboards-functional-test + repository: opensearch-project/opensearch-dashboards-functional-test + ref: ${{ env.OPENSEARCH_DASHBOARDS_VERSION }} + fetch-depth: 0 + + - name: Install Cypress + run: | + npm install cypress --save-dev + shell: bash + working-directory: opensearch-dashboards-functional-test + + - name: Get Cypress version + id: cypress_version + run: | + echo "::set-output name=cypress_version::$(cat ./package.json | jq '.dependencies.cypress' | tr -d '"')" + working-directory: opensearch-dashboards-functional-test + + - name: Finding spec files and store to output + id: finding-files + run: | + { + echo 'FILELIST<> "$GITHUB_ENV" + working-directory: opensearch-dashboards-functional-test + + - name: Run spec files from output + run: | + env CYPRESS_NO_COMMAND_LOG=1 yarn cypress:run-without-security --browser chromium --spec 'cypress/integration/plugins/dashboards-flow-framework/*' + working-directory: opensearch-dashboards-functional-test + + - name: Capture failure screenshots + uses: actions/upload-artifact@v4 + if: failure() + with: + name: cypress-screenshots-${{ matrix.os }} + path: opensearch-dashboards-functional-test/cypress/screenshots + + - name: Capture failure test video + uses: actions/upload-artifact@v4 + if: failure() + with: + name: cypress-videos-${{ matrix.os }} + path: opensearch-dashboards-functional-test/cypress/videos \ No newline at end of file diff --git a/public/pages/workflow_detail/workflow_inputs/ingest_inputs/source_data.tsx b/public/pages/workflow_detail/workflow_inputs/ingest_inputs/source_data.tsx index f99f8d9a..e0418986 100644 --- a/public/pages/workflow_detail/workflow_inputs/ingest_inputs/source_data.tsx +++ b/public/pages/workflow_detail/workflow_inputs/ingest_inputs/source_data.tsx @@ -202,6 +202,7 @@ export function SourceData(props: SourceDataProps) { id={SOURCE_OPTIONS.MANUAL} hasActiveFilters={selectedOption === SOURCE_OPTIONS.MANUAL} onClick={() => setSelectedOption(SOURCE_OPTIONS.MANUAL)} + data-testid="manualEditSourceDataButton" > Manual @@ -209,6 +210,7 @@ export function SourceData(props: SourceDataProps) { id={SOURCE_OPTIONS.UPLOAD} hasActiveFilters={selectedOption === SOURCE_OPTIONS.UPLOAD} onClick={() => setSelectedOption(SOURCE_OPTIONS.UPLOAD)} + data-testid="uploadSourceDataButton" > Upload @@ -220,6 +222,7 @@ export function SourceData(props: SourceDataProps) { onClick={() => setSelectedOption(SOURCE_OPTIONS.EXISTING_INDEX) } + data-testid="selectIndexSourceDataButton" > Existing index @@ -281,6 +284,7 @@ export function SourceData(props: SourceDataProps) { onClick={() => setIsEditModalOpen(false)} fill={false} color="primary" + data-testid="closeSourceDataButton" > Close @@ -306,6 +310,7 @@ export function SourceData(props: SourceDataProps) { fill={false} style={{ width: '100px' }} onClick={() => setIsEditModalOpen(true)} + data-testid="editSourceDataButton" > {docsPopulated ? `Edit` : `Select data`} diff --git a/public/pages/workflow_detail/workflow_inputs/search_inputs/edit_query_modal.tsx b/public/pages/workflow_detail/workflow_inputs/search_inputs/edit_query_modal.tsx index 4a639977..4549b715 100644 --- a/public/pages/workflow_detail/workflow_inputs/search_inputs/edit_query_modal.tsx +++ b/public/pages/workflow_detail/workflow_inputs/search_inputs/edit_query_modal.tsx @@ -45,13 +45,14 @@ export function EditQueryModal(props: EditQueryModalProps) { props.setModalOpen(false)} style={{ width: '70vw' }} + data-testid="editQueryModal" >

{`Edit query`}

- + diff --git a/public/pages/workflows/new_workflow/quick_configure_inputs.tsx b/public/pages/workflows/new_workflow/quick_configure_inputs.tsx index d83cd2f2..f7d85761 100644 --- a/public/pages/workflows/new_workflow/quick_configure_inputs.tsx +++ b/public/pages/workflows/new_workflow/quick_configure_inputs.tsx @@ -159,6 +159,7 @@ export function QuickConfigureInputs(props: QuickConfigureInputsProps) { id="optionalConfiguration" buttonContent="Optional configuration" initialIsOpen={false} + data-testid="optionalConfigurationButton" > @@ -228,6 +230,7 @@ export function QuickConfigureInputs(props: QuickConfigureInputsProps) { }`} > {