diff --git a/.cypress/integration/7_app_analytics.spec.js b/.cypress/integration/app_analytics_test/app_analytics.spec.js
similarity index 99%
rename from .cypress/integration/7_app_analytics.spec.js
rename to .cypress/integration/app_analytics_test/app_analytics.spec.js
index 1e50d76aac..b875d4f3b5 100644
--- a/.cypress/integration/7_app_analytics.spec.js
+++ b/.cypress/integration/app_analytics_test/app_analytics.spec.js
@@ -4,7 +4,7 @@
*/
///
-import { suppressResizeObserverIssue } from '../utils/constants';
+import { suppressResizeObserverIssue } from '../../utils/constants';
import {
delay,
@@ -33,7 +33,7 @@ import {
newName,
TYPING_DELAY,
timeoutDelay
-} from '../utils/app_constants';
+} from '../../utils/app_constants';
suppressResizeObserverIssue();//needs to be in file once
diff --git a/.cypress/integration/10_datasources.spec.js b/.cypress/integration/datasources_test/datasources.spec.js
similarity index 100%
rename from .cypress/integration/10_datasources.spec.js
rename to .cypress/integration/datasources_test/datasources.spec.js
diff --git a/.cypress/integration/1_event_analytics.spec.js b/.cypress/integration/event_analytics_test/event_analytics.spec.js
similarity index 99%
rename from .cypress/integration/1_event_analytics.spec.js
rename to .cypress/integration/event_analytics_test/event_analytics.spec.js
index f25987f4fb..c018a00602 100644
--- a/.cypress/integration/1_event_analytics.spec.js
+++ b/.cypress/integration/event_analytics_test/event_analytics.spec.js
@@ -24,8 +24,8 @@ import {
VIS_TYPE_VBAR,
FIELD_HOST,
FIELD_AGENT
-} from '../utils/event_analytics/constants';
-import { suppressResizeObserverIssue, COMMAND_TIMEOUT_LONG } from '../utils/constants';
+} from '../../utils/event_analytics/constants';
+import { suppressResizeObserverIssue, COMMAND_TIMEOUT_LONG } from '../../utils/constants';
import {
querySearch,
@@ -34,7 +34,7 @@ import {
landOnEventVisualizations,
landOnPanels,
clearQuerySearchBoxText,
-} from '../utils/event_analytics/helpers';
+} from '../../utils/event_analytics/helpers';
describe('Adding sample data and visualization', () => {
it('Adds sample flights data for event analytics', () => {
diff --git a/.cypress/integration/9_integrations.spec.js b/.cypress/integration/integrations_test/integrations.spec.js
similarity index 98%
rename from .cypress/integration/9_integrations.spec.js
rename to .cypress/integration/integrations_test/integrations.spec.js
index 18a4c15ada..3ae5db17c6 100644
--- a/.cypress/integration/9_integrations.spec.js
+++ b/.cypress/integration/integrations_test/integrations.spec.js
@@ -7,7 +7,7 @@
import {
TEST_INTEGRATION_INSTANCE, TEST_SAMPLE_INSTANCE,
-} from '../utils/constants';
+} from '../../utils/constants';
let testInstanceSuffix = (Math.random() + 1).toString(36).substring(7);
let testInstance = `${TEST_INTEGRATION_INSTANCE}_${testInstanceSuffix}`;
@@ -66,7 +66,7 @@ describe('Basic sanity test for integrations plugin', () => {
moveToAvailableNginxIntegration();
cy.get('.euiFilterGroup').trigger('mouseover').click();
cy.get('.euiFilterSelectItem').contains('visualization').click();
- cy.get('.euiTableRow').should('have.length', 4);//Filters correctly to visualization types
+ cy.get('.euiTableRow').should('have.length', 6);//Filters correctly to visualization types
})
});
diff --git a/.cypress/integration/8_metrics_analytics.spec.js b/.cypress/integration/metrics_analytics_test/metrics_analytics.spec.js
similarity index 98%
rename from .cypress/integration/8_metrics_analytics.spec.js
rename to .cypress/integration/metrics_analytics_test/metrics_analytics.spec.js
index 255a354341..d7898ba5ad 100644
--- a/.cypress/integration/8_metrics_analytics.spec.js
+++ b/.cypress/integration/metrics_analytics_test/metrics_analytics.spec.js
@@ -11,9 +11,9 @@ import {
PPL_METRICS_NAMES,
VIS_TYPE_LINE,
TESTING_PANEL,
-} from '../utils/metrics_constants';
-import { suppressResizeObserverIssue, COMMAND_TIMEOUT_LONG } from '../utils/constants';
-import { landOnPanels, clearQuerySearchBoxText } from '../utils/event_analytics/helpers';
+} from '../../utils/metrics_constants';
+import { suppressResizeObserverIssue, COMMAND_TIMEOUT_LONG } from '../../utils/constants';
+import { landOnPanels, clearQuerySearchBoxText } from '../../utils/event_analytics/helpers';
describe('Metrics Analytics', () => {
beforeEach(() => {
diff --git a/.cypress/integration/2_notebooks.spec.js b/.cypress/integration/notebooks_test/notebooks.spec.js
similarity index 99%
rename from .cypress/integration/2_notebooks.spec.js
rename to .cypress/integration/notebooks_test/notebooks.spec.js
index 46aab9b519..e23d706673 100644
--- a/.cypress/integration/2_notebooks.spec.js
+++ b/.cypress/integration/notebooks_test/notebooks.spec.js
@@ -15,9 +15,9 @@ import {
NOTEBOOK_TEXT,
OPENSEARCH_URL,
COMMAND_TIMEOUT_LONG,
-} from '../utils/constants';
+} from '../../utils/constants';
-import { SAMPLE_PANEL } from '../utils/panel_constants';
+import { SAMPLE_PANEL } from '../../utils/panel_constants';
import { skipOn } from '@cypress/skip-test';
diff --git a/.cypress/integration/3_panels.spec.ts b/.cypress/integration/panels_test/panels.spec.ts
similarity index 99%
rename from .cypress/integration/3_panels.spec.ts
rename to .cypress/integration/panels_test/panels.spec.ts
index 7096f5aa86..3750c2e02e 100644
--- a/.cypress/integration/3_panels.spec.ts
+++ b/.cypress/integration/panels_test/panels.spec.ts
@@ -5,7 +5,7 @@
///
-import { suppressResizeObserverIssue } from '../utils/constants';
+import { suppressResizeObserverIssue } from '../../utils/constants';
import {
delay,
NEW_VISUALIZATION_NAME,
@@ -14,7 +14,7 @@ import {
PPL_VISUALIZATIONS,
PPL_VISUALIZATIONS_NAMES,
TEST_PANEL,
-} from '../utils/panel_constants';
+} from '../../utils/panel_constants';
describe('Panels testing with Sample Data', () => {
suppressResizeObserverIssue();//needs to be in file once
diff --git a/.cypress/integration/4_trace_analytics_dashboard.spec.js b/.cypress/integration/trace_analytics_test/trace_analytics_dashboard.spec.js
similarity index 99%
rename from .cypress/integration/4_trace_analytics_dashboard.spec.js
rename to .cypress/integration/trace_analytics_test/trace_analytics_dashboard.spec.js
index be31f21833..5edf0d33a2 100644
--- a/.cypress/integration/4_trace_analytics_dashboard.spec.js
+++ b/.cypress/integration/trace_analytics_test/trace_analytics_dashboard.spec.js
@@ -5,8 +5,8 @@
///
-import { testDataSet, delay, setTimeFilter, jaegerTestDataSet } from '../utils/constants';
-import { suppressResizeObserverIssue } from '../utils/constants';
+import { testDataSet, delay, setTimeFilter, jaegerTestDataSet } from '../../utils/constants';
+import { suppressResizeObserverIssue } from '../../utils/constants';
suppressResizeObserverIssue();//needs to be in file once
diff --git a/.cypress/integration/5_trace_analytics_services.spec.js b/.cypress/integration/trace_analytics_test/trace_analytics_services.spec.js
similarity index 99%
rename from .cypress/integration/5_trace_analytics_services.spec.js
rename to .cypress/integration/trace_analytics_test/trace_analytics_services.spec.js
index f09b92426c..1f278c2b34 100644
--- a/.cypress/integration/5_trace_analytics_services.spec.js
+++ b/.cypress/integration/trace_analytics_test/trace_analytics_services.spec.js
@@ -5,8 +5,8 @@
///
-import { delay, SERVICE_NAME, SERVICE_SPAN_ID, setTimeFilter, verify_traces_spans_data_grid_cols_exists, count_table_row, AUTH_SERVICE_SPAN_ID } from '../utils/constants';
-import { suppressResizeObserverIssue } from '../utils/constants';
+import { delay, SERVICE_NAME, SERVICE_SPAN_ID, setTimeFilter, verify_traces_spans_data_grid_cols_exists, count_table_row, AUTH_SERVICE_SPAN_ID } from '../../utils/constants';
+import { suppressResizeObserverIssue } from '../../utils/constants';
suppressResizeObserverIssue();//needs to be in file once
diff --git a/.cypress/integration/6_trace_analytics_traces.spec.js b/.cypress/integration/trace_analytics_test/trace_analytics_traces.spec.js
similarity index 98%
rename from .cypress/integration/6_trace_analytics_traces.spec.js
rename to .cypress/integration/trace_analytics_test/trace_analytics_traces.spec.js
index 336f5b6ffe..843e6640ad 100644
--- a/.cypress/integration/6_trace_analytics_traces.spec.js
+++ b/.cypress/integration/trace_analytics_test/trace_analytics_traces.spec.js
@@ -5,7 +5,7 @@
///
-import { delay, setTimeFilter, SPAN_ID, TRACE_ID } from '../utils/constants';
+import { delay, setTimeFilter, SPAN_ID, TRACE_ID } from '../../utils/constants';
describe('Testing traces table empty state', () => {
beforeEach(() => {
diff --git a/.github/workflows/integration-tests-workflow.yml b/.github/workflows/integration-tests-workflow.yml
new file mode 100644
index 0000000000..b82200a93a
--- /dev/null
+++ b/.github/workflows/integration-tests-workflow.yml
@@ -0,0 +1,173 @@
+name: Dashboards observability plugin E2E test
+
+on: [pull_request, push]
+
+env:
+ PLUGIN_NAME: dashboards-observability
+ OPENSEARCH_DASHBOARDS_VERSION: '2.x'
+ OPENSEARCH_VERSION: '2.12.0'
+ OPENSEARCH_PLUGIN_VERSION: '2.12.0.0'
+
+jobs:
+ tests:
+ name: Run test group of ${{ matrix.testgroups }}
+ env:
+ # Prevents extra Cypress installation progress messages
+ CI: 1
+ # Avoid warnings like "tput: No value for $TERM and no -T specified"
+ TERM: xterm
+ WORKING_DIR: ${{ matrix.working_directory }}.
+
+ strategy:
+ fail-fast: false
+ matrix:
+ os: [ubuntu-latest]
+ java: [11]
+ testgroups: [
+ app_analytics_test,
+ datasources_test,
+ event_analytics_test,
+ integrations_test,
+ metrics_analytics_test,
+ notebooks_test,
+ panels_test,
+ trace_analytics_test
+ ]
+ include:
+ - os: ubuntu-latest
+ cypress_cache_folder: ~/.cache/Cypress
+ runs-on: ${{ matrix.os }}
+
+ steps:
+ - name: Set up Java 11
+ uses: actions/setup-java@v3
+ with:
+ distribution: 'corretto'
+ java-version: '11'
+
+ - name: Download observability artifact
+ uses: suisei-cn/actions-download-file@v1.4.0
+ with:
+ url: https://aws.oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=org.opensearch.plugin&a=opensearch-observability&v=${{ env.OPENSEARCH_PLUGIN_VERSION }}-SNAPSHOT&p=zip
+ target: plugin-artifacts/
+ filename: observability.zip
+
+ - name: Download SQL artifact
+ uses: suisei-cn/actions-download-file@v1.4.0
+ with:
+ url: https://aws.oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=org.opensearch.plugin&a=opensearch-sql-plugin&v=${{ env.OPENSEARCH_PLUGIN_VERSION }}-SNAPSHOT&p=zip
+ target: plugin-artifacts/
+ filename: sql.zip
+
+ - name: Download OpenSearch
+ uses: peternied/download-file@v2
+ with:
+ url: https://artifacts.opensearch.org/snapshots/core/opensearch/${{ env.OPENSEARCH_VERSION }}-SNAPSHOT/opensearch-min-${{ env.OPENSEARCH_VERSION }}-SNAPSHOT-linux-x64-latest.tar.gz
+
+ - name: Extract OpenSearch
+ run: |
+ tar -xzf opensearch-*.tar.gz
+ rm -f opensearch-*.tar.gz
+ shell: bash
+
+ - name: Install observability plugin
+ run: |
+ /bin/bash -c "yes | ./opensearch-${{ env.OPENSEARCH_VERSION }}-SNAPSHOT/bin/opensearch-plugin install file:$(pwd)/plugin-artifacts/observability.zip"
+ shell: bash
+
+ - name: Install SQL plugin
+ run: |
+ /bin/bash -c "yes | ./opensearch-${{ env.OPENSEARCH_VERSION }}-SNAPSHOT/bin/opensearch-plugin install file:$(pwd)/plugin-artifacts/sql.zip"
+ shell: bash
+
+ - name: Run OpenSearch
+ run: /bin/bash -c "./opensearch-${{ env.OPENSEARCH_VERSION }}-SNAPSHOT/bin/opensearch &"
+ shell: bash
+
+ - name: Checkout OpenSearch Dashboards
+ uses: actions/checkout@v2
+ with:
+ repository: opensearch-project/Opensearch-Dashboards
+ ref: ${{ env.OPENSEARCH_DASHBOARDS_VERSION }}
+ path: OpenSearch-Dashboards
+
+ - name: Checkout dashboards observability
+ uses: actions/checkout@v2
+ with:
+ path: OpenSearch-Dashboards/plugins/dashboards-observability
+
+ - name: Get node and yarn versions
+ working-directory: ${{ env.WORKING_DIR }}
+ id: versions_step
+ run: |
+ echo "::set-output name=node_version::$(cat ./OpenSearch-Dashboards/.nvmrc | cut -d"." -f1)"
+ echo "::set-output name=yarn_version::$(node -p "(require('./OpenSearch-Dashboards/package.json').engines.yarn).match(/[.0-9]+/)[0]")"
+
+ - name: Setup node
+ uses: actions/setup-node@v1
+ with:
+ node-version: ${{ steps.versions_step.outputs.node_version }}
+ registry-url: 'https://registry.npmjs.org'
+
+ - name: Install correct yarn version for OpenSearch Dashboards
+ run: |
+ npm uninstall -g yarn
+ echo "Installing yarn ${{ steps.versions_step.outputs.yarn_version }}"
+ npm i -g yarn@${{ steps.versions_step.outputs.yarn_version }}
+
+ - name: Bootstrap the plugin
+ run: |
+ cd OpenSearch-Dashboards/plugins/dashboards-observability
+ yarn osd bootstrap
+
+ - name: Run OpenSearch Dashboards server
+ run: |
+ cd OpenSearch-Dashboards
+ nohup yarn start --no-base-path --no-watch | tee dashboard.log &
+
+ - name : Check If OpenSearch Dashboards Is Ready
+ if: ${{ runner.os == 'Linux' }}
+ run: |
+ cd ./OpenSearch-Dashboards
+ 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
+
+ - name: Install Cypress
+ run: |
+ cd ./OpenSearch-Dashboards/plugins/dashboards-observability
+ npx cypress install
+ shell: bash
+
+ - name: Get Cypress version
+ id: cypress_version
+ run: |
+ cd ./OpenSearch-Dashboards/plugins/dashboards-observability
+ echo "::set-output name=cypress_version::$(cat ./package.json | jq '.dependencies.cypress' | tr -d '"')"
+
+ - name: Reset npm's script shell
+ if: ${{ matrix.os == 'windows-latest' }}
+ run: |
+ npm config delete script-shell
+
+ - name: Run Cypress tests for test group of ${{ matrix.testgroups }}
+ run: |
+ cd ./OpenSearch-Dashboards/plugins/dashboards-observability
+ yarn cypress:run --browser chrome --headless --spec '.cypress/integration/${{ matrix.testgroups }}/*'
+
+ - name: Capture failure screenshots
+ uses: actions/upload-artifact@v1
+ if: failure()
+ with:
+ name: cypress-screenshots-${{ matrix.os }}
+ path: OpenSearch-Dashboards/plugins/dashboards-observability/.cypress/screenshots
+
+ - name: Capture test video
+ uses: actions/upload-artifact@v1
+ if: always()
+ with:
+ name: cypress-videos-${{ matrix.os }}
+ path: OpenSearch-Dashboards/plugins/dashboards-observability/.cypress/videos
\ No newline at end of file