forked from opensearch-project/OpenSearch-Dashboards
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
POC for running cypress tests outside FT repo
Signed-off-by: Manasvini B Suryanarayana <[email protected]>
- Loading branch information
1 parent
b796940
commit 95bf2ee
Showing
15 changed files
with
1,002 additions
and
27 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,150 @@ | ||
name: Orchestrator cypress workflow | ||
run-name: dashboards_cypress_workflow ${{ inputs.UNIQUE_ID != '' && inputs.UNIQUE_ID || '' }} # Unique id number appended to the workflow run-name to reference the run within the orchestrator. | ||
# Trigger on dispatch event sent from FT repo orchestrator and push to the main branch | ||
on: | ||
push: | ||
branches: [ '**' ] | ||
workflow_dispatch: | ||
inputs: | ||
test_repo: | ||
description: 'Cypress test repo' | ||
default: '' | ||
required: false | ||
type: string | ||
test_branch: | ||
description: 'Cypress test branch (default: source branch)' | ||
required: false | ||
type: string | ||
specs: | ||
description: 'Test group to run' | ||
required: false | ||
type: string | ||
build_id: | ||
description: 'Build Id' | ||
required: false | ||
type: string | ||
OS_URL: | ||
description: 'OpenSearch release artifact' | ||
required: false | ||
type: string | ||
OSD_URL: | ||
description: 'OpenSearch Dashboards release artifact' | ||
required: false | ||
type: string | ||
UNIQUE_ID: | ||
description: 'Unique Id for the workflow execution' | ||
required: true | ||
type: string | ||
SECURITY_ENABLED: | ||
required: false | ||
type: string | ||
|
||
env: | ||
TEST_REPO: ${{ inputs.test_repo != '' && inputs.test_repo || github.repository }} | ||
TEST_BRANCH: "${{ inputs.test_branch != '' && inputs.test_branch || github.base_ref }}" | ||
OSD_PATH: 'osd' | ||
CYPRESS_BROWSER: 'chromium' | ||
JOB_ID: ${{ inputs.UNIQUE_ID}} | ||
OPENSEARCH: ${{ inputs.OS_URL != '' && inputs.OS_URL || 'https://artifacts.opensearch.org/releases/bundle/opensearch/2.10.0/opensearch-2.10.0-linux-x64.tar.gz' }} | ||
DASHBOARDS: ${{ inputs.OSD_URL != '' && inputs.OSD_URL || 'https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/2.10.0/opensearch-dashboards-2.10.0-linux-x64.tar.gz' }} | ||
OPENSEARCH_DIR: 'cypress/opensearch' | ||
DASHBOARDS_DIR: 'cypress/opensearch-dashboards' | ||
SECURITY_ENABLED: ${{ inputs.SECURITY_ENABLED != '' && inputs.SECURITY_ENABLED || 'false' }} | ||
SPEC: 'cypress/integration/core_opensearch_dashboards/dashboard_sanity_test_spec.js' | ||
|
||
jobs: | ||
cypress-tests: | ||
runs-on: ubuntu-latest | ||
container: | ||
image: docker://opensearchstaging/ci-runner:ci-runner-rockylinux8-opensearch-dashboards-integtest-v2 | ||
options: --user 1001 | ||
env: | ||
# prevents extra Cypress installation progress messages | ||
CI: 1 | ||
# avoid warnings like "tput: No value for $TERM and no -T specified" | ||
TERM: xterm | ||
name: Run cypress tests ${{ inputs.UNIQUE_ID}} | ||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v2 | ||
with: | ||
path: ./${{ env.OSD_PATH }} | ||
repository: ${{ env.TEST_REPO }} | ||
ref: '${{ env.TEST_BRANCH }}' | ||
|
||
- name: Setup Node | ||
uses: actions/setup-node@v3 | ||
with: | ||
node-version-file: './${{ env.OSD_PATH }}/.nvmrc' | ||
registry-url: 'https://registry.npmjs.org' | ||
|
||
- name: Setup Yarn | ||
run: | | ||
npm uninstall -g yarn | ||
npm i -g [email protected] | ||
yarn config set network-timeout 1000000 -g | ||
- name: Cache Cypress | ||
id: cache-cypress | ||
uses: actions/cache@v1 | ||
with: | ||
path: ~/.cache/Cypress | ||
key: cypress-cache-v2-${{ runner.os }}-${{ hashFiles('**/package.json') }} | ||
- run: npx cypress cache list | ||
- run: npx cypress cache path | ||
|
||
- name: Get package version (Linux) | ||
run: | | ||
echo "VERSION=$(yarn --silent pkg-version)" >> $GITHUB_ENV | ||
echo "VERSION: $VERSION" | ||
- name: Run bootstrap | ||
run: | | ||
cd ${{ env.OSD_PATH }} | ||
yarn osd bootstrap | ||
- name: Download and extract Opensearch artifacts | ||
run: | | ||
CWD=$(pwd) | ||
mkdir -p $CWD/${{ env.OPENSEARCH_DIR }} | ||
source ${{ env.OSD_PATH }}/scripts/common/utils.sh | ||
open_artifact $CWD/${{ env.OPENSEARCH_DIR }} ${{ env.OPENSEARCH }} | ||
- name: Run OpenSearch | ||
run: | | ||
source ${{ env.OSD_PATH }}/scripts/cypress_tests.sh | ||
run_opensearch | ||
- name: Download and extract Opensearch Dashboards artifacts | ||
run: | | ||
CWD=$(pwd) | ||
mkdir -p $CWD/${{ env.DASHBOARDS_DIR }} | ||
source ${{ env.OSD_PATH }}/scripts/common/utils.sh | ||
open_artifact $CWD/${{ env.DASHBOARDS_DIR }} ${{ env.DASHBOARDS }} | ||
- name: Run OpenSearch Dashboards | ||
run: | | ||
source ${{ env.OSD_PATH }}/scripts/cypress_tests.sh | ||
run_dashboards | ||
# Screenshots are only captured on failures | ||
- uses: actions/upload-artifact@v3 | ||
if: failure() | ||
with: | ||
name: osd-cypress-screenshots | ||
path: ${{ env.OSD_PATH }}/cypress/screenshots | ||
retention-days: 1 | ||
|
||
- uses: actions/upload-artifact@v3 | ||
if: always() | ||
with: | ||
name: osd-cypress-videos | ||
path: ${{ env.OSD_PATH }}/cypress/videos | ||
retention-days: 1 | ||
|
||
- uses: actions/upload-artifact@v3 | ||
if: always() | ||
with: | ||
name: osd-cypress-results | ||
path: ${{ env.OSD_PATH }}/cypress/results | ||
retention-days: 1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
/* | ||
* Copyright OpenSearch Contributors | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
const { defineConfig } = require('cypress'); | ||
|
||
module.exports = defineConfig({ | ||
defaultCommandTimeout: 60000, | ||
requestTimeout: 60000, | ||
responseTimeout: 60000, | ||
baseUrl: 'http://localhost:5601', | ||
viewportWidth: 2000, | ||
viewportHeight: 1320, | ||
env: { | ||
openSearchUrl: 'http://localhost:9200', | ||
SECURITY_ENABLED: false, | ||
AGGREGATION_VIEW: false, | ||
username: 'admin', | ||
password: 'myStrongPassword123!', | ||
ENDPOINT_WITH_PROXY: false, | ||
MANAGED_SERVICE_ENDPOINT: false, | ||
VISBUILDER_ENABLED: true, | ||
DATASOURCE_MANAGEMENT_ENABLED: false, | ||
ML_COMMONS_DASHBOARDS_ENABLED: true, | ||
WAIT_FOR_LOADER_BUFFER_MS: 0, | ||
}, | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
{ | ||
"name": "Using fixtures to represent data", | ||
"email": "[email protected]", | ||
"body": "Fixtures are a great way to mock data for responses to routes" | ||
} |
164 changes: 164 additions & 0 deletions
164
cypress/integration/core_opensearch_dashboards/dashboard_sanity_test_spec.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,164 @@ | ||
/* | ||
* Copyright OpenSearch Contributors | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
import { | ||
CommonUI, | ||
MiscUtils, | ||
} from '@opensearch-dashboards-test/opensearch-dashboards-test-library'; | ||
|
||
/** | ||
* dashboard_sample_data test suite description: | ||
* 1) Visit the home page of opensearchdashboard, check key UI elements display | ||
* 2) add sample data of eCommerce, flights, web logs from tutorial page | ||
* 3) check each sample data dashboard key UI elements display | ||
*/ | ||
export function dashboardSanityTests() { | ||
const commonUI = new CommonUI(cy); | ||
const miscUtils = new MiscUtils(cy); | ||
const baseURL = new URL(Cypress.config().baseUrl); | ||
// remove trailing slash | ||
const path = baseURL.pathname.replace(/\/$/, ''); | ||
|
||
describe('dashboard sample data validation', () => { | ||
before(() => {}); | ||
|
||
after(() => {}); | ||
|
||
describe('checking home page', () => { | ||
before(() => { | ||
// Go to the home page | ||
miscUtils.visitPage('app/home#'); | ||
cy.window().then((win) => win.localStorage.setItem('home:welcome:show', false)); | ||
cy.reload(true); | ||
}); | ||
|
||
after(() => { | ||
cy.window().then((win) => win.localStorage.removeItem('home:welcome:show')); | ||
}); | ||
|
||
it('checking opensearch_dashboards_overview display', () => { | ||
// Check that opensearch_dashboards_overview is visable | ||
commonUI.checkElementExists(`a[href="${path}/app/opensearch_dashboards_overview"]`, 1); | ||
}); | ||
|
||
it('checking tutorial_directory display', () => { | ||
// Check that tutorial_directory is visable | ||
commonUI.checkElementExists(`a[href="${path}/app/home#/tutorial_directory"]`, 2); | ||
}); | ||
|
||
it('checking management display', () => { | ||
// Check that management is visable | ||
commonUI.checkElementExists(`a[href="${path}/app/management"]`, 1); | ||
}); | ||
|
||
it('checking dev_tools display', () => { | ||
// Check that dev_tools is visable | ||
commonUI.checkElementExists(`a[href="${path}/app/dev_tools#/console"]`, 2); | ||
}); | ||
|
||
it('settings display', () => { | ||
// Check that settings is visable | ||
commonUI.checkElementExists( | ||
`a[href="${path}/app/management/opensearch-dashboards/settings#defaultRoute"]`, | ||
1 | ||
); | ||
}); | ||
|
||
it('checking feature_directory display', () => { | ||
// Check that feature_directory is visable | ||
commonUI.checkElementExists(`a[href="${path}/app/home#/feature_directory"]`, 1); | ||
}); | ||
|
||
it('checking navigation display', () => { | ||
// Check that navigation is visable | ||
commonUI.checkElementExists('button[data-test-subj="toggleNavButton"]', 1); | ||
}); | ||
|
||
it('checking Help menu display', () => { | ||
// Check that Help menu is visable | ||
commonUI.checkElementExists('button[aria-label="Help menu"]', 1); | ||
}); | ||
}); | ||
|
||
describe('checking Dev Tools', () => { | ||
before(() => { | ||
// Go to the Dev Tools page | ||
miscUtils.visitPage('app/dev_tools#/console'); | ||
}); | ||
|
||
after(() => {}); | ||
|
||
it('checking welcome panel display', () => { | ||
commonUI.checkElementExists('div[data-test-subj="welcomePanel"]', 1); | ||
}); | ||
|
||
it('checking dismiss button display', () => { | ||
commonUI.checkElementExists('button[data-test-subj="help-close-button"]', 1); | ||
}); | ||
|
||
it('checking console input area display', () => { | ||
commonUI.checkElementExists('div[data-test-subj="request-editor"]', 1); | ||
}); | ||
|
||
it('checking console output area display', () => { | ||
commonUI.checkElementExists('div[data-test-subj="response-editor"]', 1); | ||
}); | ||
}); | ||
|
||
describe('adding sample data', () => { | ||
before(() => { | ||
miscUtils.addSampleData(); | ||
}); | ||
|
||
after(() => { | ||
miscUtils.removeSampleData(); | ||
}); | ||
|
||
it('checking ecommerce dashboards displayed', () => { | ||
miscUtils.viewData('ecommerce'); | ||
commonUI.checkElementContainsValue( | ||
'span[title="[eCommerce] Revenue Dashboard"]', | ||
1, | ||
'\\[eCommerce\\] Revenue Dashboard' | ||
); | ||
commonUI.checkElementContainsValue( | ||
'div[data-test-subj="markdownBody"] > h3', | ||
1, | ||
'Sample eCommerce Data' | ||
); | ||
}); | ||
|
||
it('checking flights dashboards displayed', () => { | ||
miscUtils.viewData('flights'); | ||
commonUI.checkElementContainsValue( | ||
'span[title="[Flights] Global Flight Dashboard"]', | ||
1, | ||
'\\[Flights\\] Global Flight Dashboard' | ||
); | ||
commonUI.checkElementContainsValue( | ||
'div[data-test-subj="markdownBody"] > h3', | ||
1, | ||
'Sample Flight data' | ||
); | ||
}); | ||
|
||
it('checking web logs dashboards displayed', () => { | ||
miscUtils.viewData('logs'); | ||
commonUI.checkElementContainsValue( | ||
'span[title="[Logs] Web Traffic"]', | ||
1, | ||
'\\[Logs\\] Web Traffic' | ||
); | ||
commonUI.checkElementContainsValue( | ||
'div[data-test-subj="markdownBody"] > h3', | ||
1, | ||
'Sample Logs Data' | ||
); | ||
}); | ||
}); | ||
}); | ||
} | ||
|
||
dashboardSanityTests(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
/* | ||
* Copyright OpenSearch Contributors | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
// *********************************************** | ||
// This example commands.js shows you how to | ||
// create various custom commands and overwrite | ||
// existing commands. | ||
// | ||
// For more comprehensive examples of custom | ||
// commands please read more here: | ||
// https://on.cypress.io/custom-commands | ||
// *********************************************** | ||
// | ||
// | ||
// -- This is a parent command -- | ||
// Cypress.Commands.add('login', (email, password) => { ... }) | ||
// | ||
// | ||
// -- This is a child command -- | ||
// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) | ||
// | ||
// | ||
// -- This is a dual command -- | ||
// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) | ||
// | ||
// | ||
// -- This will overwrite an existing command -- | ||
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) |
Oops, something went wrong.