Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added Integration Tests Workflow #426

Merged
merged 4 commits into from
Oct 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
169 changes: 169 additions & 0 deletions .github/workflows/remote-integ-tests-workflow.yml
Original file line number Diff line number Diff line change
@@ -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<<EOF'
find cypress/integration/plugins/dashboards-flow-framework -name '*.js' -print
echo EOF
} >> "$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
Original file line number Diff line number Diff line change
Expand Up @@ -202,13 +202,15 @@ export function SourceData(props: SourceDataProps) {
id={SOURCE_OPTIONS.MANUAL}
hasActiveFilters={selectedOption === SOURCE_OPTIONS.MANUAL}
onClick={() => setSelectedOption(SOURCE_OPTIONS.MANUAL)}
data-testid="manualEditSourceDataButton"
>
Manual
</EuiSmallFilterButton>
<EuiSmallFilterButton
id={SOURCE_OPTIONS.UPLOAD}
hasActiveFilters={selectedOption === SOURCE_OPTIONS.UPLOAD}
onClick={() => setSelectedOption(SOURCE_OPTIONS.UPLOAD)}
data-testid="uploadSourceDataButton"
>
Upload
</EuiSmallFilterButton>
Expand All @@ -220,6 +222,7 @@ export function SourceData(props: SourceDataProps) {
onClick={() =>
setSelectedOption(SOURCE_OPTIONS.EXISTING_INDEX)
}
data-testid="selectIndexSourceDataButton"
>
Existing index
</EuiSmallFilterButton>
Expand Down Expand Up @@ -281,6 +284,7 @@ export function SourceData(props: SourceDataProps) {
onClick={() => setIsEditModalOpen(false)}
fill={false}
color="primary"
data-testid="closeSourceDataButton"
>
Close
</EuiSmallButton>
Expand All @@ -306,6 +310,7 @@ export function SourceData(props: SourceDataProps) {
fill={false}
style={{ width: '100px' }}
onClick={() => setIsEditModalOpen(true)}
data-testid="editSourceDataButton"
>
{docsPopulated ? `Edit` : `Select data`}
</EuiSmallButton>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,14 @@ export function EditQueryModal(props: EditQueryModalProps) {
<EuiModal
onClose={() => props.setModalOpen(false)}
style={{ width: '70vw' }}
data-testid="editQueryModal"
>
<EuiModalHeader>
<EuiModalHeaderTitle>
<p>{`Edit query`}</p>
</EuiModalHeaderTitle>
</EuiModalHeader>
<EuiModalBody>
<EuiModalBody data-testid="editQueryModalBody">
<EuiPopover
button={
<EuiSmallButton
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ export function ImportWorkflowModal(props: ImportWorkflowModalProps) {
onModalClose();
});
}}
data-testid="importJSONButton"
fill={true}
color="primary"
>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ export function QuickConfigureInputs(props: QuickConfigureInputsProps) {
id="optionalConfiguration"
buttonContent="Optional configuration"
initialIsOpen={false}
data-testid="optionalConfigurationButton"
>
<EuiSpacer size="m" />
<EuiCompressedFormRow
Expand All @@ -180,6 +181,7 @@ export function QuickConfigureInputs(props: QuickConfigureInputsProps) {
}
>
<EuiCompressedSuperSelect
data-testid="selectDeployedModel"
fullWidth={true}
options={deployedModels.map(
(option) =>
Expand Down Expand Up @@ -228,6 +230,7 @@ export function QuickConfigureInputs(props: QuickConfigureInputsProps) {
}`}
>
<EuiCompressedFieldText
data-testid="textFieldQuickConfigure"
fullWidth={true}
value={fieldValues?.textField || ''}
onChange={(e) => {
Expand Down
Loading