diff --git a/web/cypress/e2e/coo/01.coo_ivt.cy.ts b/web/cypress/e2e/coo/01.coo_ivt.cy.ts index 3595cc75..dbb71139 100644 --- a/web/cypress/e2e/coo/01.coo_ivt.cy.ts +++ b/web/cypress/e2e/coo/01.coo_ivt.cy.ts @@ -1,9 +1,15 @@ -import { Classes } from '../../../src/components/data-test'; -import { commonPages } from '../../views/common'; -import { nav } from '../../views/nav'; +import { runBVTMonitoringTests } from '../../support/monitoring/00.bvt_monitoring.cy'; +import { runBVTMonitoringTestsNamespace } from '../../support/monitoring/00.bvt_monitoring_namespace.cy'; import { guidedTour } from '../../views/tour'; +import { alerts } from '../../fixtures/monitoring/alert'; +import { nav } from '../../views/nav'; // Set constants for the operators that need to be installed for tests. +const MP = { + namespace: 'openshift-monitoring', + operatorName: 'Cluster Monitoring Operator', +}; + const KBV = { namespace: 'openshift-cnv', packageName: 'kubevirt-hyperconverged', @@ -18,7 +24,18 @@ const KBV = { } }; -describe('IVT: Monitoring UIPlugin + Virtualization', () => { +describe('Setting up Monitoring Plugin', () => { + + before(() => { + cy.beforeBlock(MP); + }); + + it('1. Setting up Monitoring Plugin', () => { + cy.log('Setting up Monitoring Plugin'); + }); +}); + +describe('Installation: Virtualization', () => { before(() => { cy.beforeBlockVirtualization(KBV); @@ -29,12 +46,55 @@ describe('IVT: Monitoring UIPlugin + Virtualization', () => { cy.switchPerspective('Virtualization'); cy.byAriaLabel('Welcome modal').should('be.visible'); guidedTour.closeKubevirtTour(); - cy.switchPerspective('Administrator'); + }); +}); + +describe('IVT: Monitoring + Virtualization', () => { + before(() => { + cy.beforeBlock(MP); }); - /** - * TODO: To be replaced by COO validation such as Dashboards (Perses) scenarios - */ + beforeEach(() => { + cy.visit('/'); + guidedTour.close(); + cy.validateLogin(); + cy.switchPerspective('Virtualization'); + guidedTour.closeKubevirtTour(); + alerts.getWatchdogAlert(); + nav.sidenav.clickNavLink(['Observe', 'Alerting']); + cy.changeNamespace("All Projects"); + alerts.getWatchdogAlert(); + }); + + // Run tests in Administrator perspective + runBVTMonitoringTests({ + name: 'Virtualization', + }); }); + +describe('IVT: Monitoring + Virtualization - Namespaced', () => { + + before(() => { + cy.beforeBlock(MP); + }); + + beforeEach(() => { + cy.visit('/'); + guidedTour.close(); + cy.validateLogin(); + cy.switchPerspective('Virtualization'); + guidedTour.closeKubevirtTour(); + alerts.getWatchdogAlert(); + nav.sidenav.clickNavLink(['Observe', 'Alerting']); + cy.changeNamespace(MP.namespace); + alerts.getWatchdogAlert(); + }); + + // Run tests in Administrator perspective + runBVTMonitoringTestsNamespace({ + name: 'Virtualization', + }); + +}); \ No newline at end of file diff --git a/web/cypress/e2e/coo/02.coo_ivt_alerts.cy.ts b/web/cypress/e2e/coo/02.coo_ivt_alerts.cy.ts new file mode 100644 index 00000000..300fc756 --- /dev/null +++ b/web/cypress/e2e/coo/02.coo_ivt_alerts.cy.ts @@ -0,0 +1,90 @@ +import { alerts } from '../../fixtures/monitoring/alert'; +import { runAllRegressionAlertsTests } from '../../support/monitoring/01.reg_alerts.cy'; +import { runAllRegressionAlertsTestsNamespace } from '../../support/monitoring/04.reg_alerts_namespace.cy'; +import { nav } from '../../views/nav'; +import { guidedTour } from '../../views/tour'; + +// Set constants for the operators that need to be installed for tests. +const MP = { + namespace: 'openshift-monitoring', + operatorName: 'Cluster Monitoring Operator', +}; + +const KBV = { + namespace: 'openshift-cnv', + packageName: 'kubevirt-hyperconverged', + operatorName: 'kubevirt-hyperconverged-operator.v4.19.6', + config: { + kind: 'HyperConverged', + name: 'kubevirt-hyperconverged', + }, + crd: { + kubevirt: 'kubevirts.kubevirt.io', + hyperconverged: 'hyperconvergeds.hco.kubevirt.io', + } +}; + +describe('Setting up Monitoring Plugin', () => { + + before(() => { + cy.beforeBlock(MP); + }); + + it('1. Setting up Monitoring Plugin', () => { + cy.log('Setting up Monitoring Plugin'); + }); +}); + +describe('IVT: Monitoring UIPlugin + Virtualization', () => { + + before(() => { + cy.beforeBlockVirtualization(KBV); + }); + + it('1. Virtualization perspective - Observe Menu', () => { + cy.log('Virtualization perspective - Observe Menu and verify all submenus'); + cy.switchPerspective('Virtualization'); + cy.byAriaLabel('Welcome modal').should('be.visible'); + guidedTour.closeKubevirtTour(); + }); +}); + +describe('Regression: Monitoring - Alerts (Virtualization)', () => { + + beforeEach(() => { + cy.visit('/'); + cy.validateLogin(); + cy.switchPerspective('Virtualization'); + guidedTour.closeKubevirtTour(); + alerts.getWatchdogAlert(); + nav.sidenav.clickNavLink(['Observe', 'Alerting']); + cy.changeNamespace("All Projects"); + alerts.getWatchdogAlert(); + }); + // Run tests in Virtualization perspective + runAllRegressionAlertsTests({ + name: 'Virtualization', + }); + +}); + +describe('Regression: Monitoring - Alerts Namespaced (Virtualization)', () => { + + beforeEach(() => { + cy.visit('/'); + cy.validateLogin(); + cy.switchPerspective('Virtualization'); + guidedTour.closeKubevirtTour(); + alerts.getWatchdogAlert(); + nav.sidenav.clickNavLink(['Observe', 'Alerting']); + cy.changeNamespace(MP.namespace); + alerts.getWatchdogAlert(); + + }); + // Run tests in Virtualization perspective + runAllRegressionAlertsTestsNamespace({ + name: 'Virtualization', + + }); + +}); \ No newline at end of file diff --git a/web/cypress/e2e/coo/03.coo_ivt_metrics.cy.ts b/web/cypress/e2e/coo/03.coo_ivt_metrics.cy.ts new file mode 100644 index 00000000..57148ec4 --- /dev/null +++ b/web/cypress/e2e/coo/03.coo_ivt_metrics.cy.ts @@ -0,0 +1,88 @@ +import { alerts } from '../../fixtures/monitoring/alert'; +import { runAllRegressionMetricsTests } from '../../support/monitoring/02.reg_metrics.cy'; +import { runAllRegressionMetricsTestsNamespace } from '../../support/monitoring/05.reg_metrics_namespace.cy'; +import { nav } from '../../views/nav'; +import { guidedTour } from '../../views/tour'; + +// Set constants for the operators that need to be installed for tests. +const MP = { + namespace: 'openshift-monitoring', + operatorName: 'Cluster Monitoring Operator', +}; + +const KBV = { + namespace: 'openshift-cnv', + packageName: 'kubevirt-hyperconverged', + operatorName: 'kubevirt-hyperconverged-operator.v4.19.6', + config: { + kind: 'HyperConverged', + name: 'kubevirt-hyperconverged', + }, + crd: { + kubevirt: 'kubevirts.kubevirt.io', + hyperconverged: 'hyperconvergeds.hco.kubevirt.io', + } +}; + +describe('Setting up Monitoring Plugin', () => { + + before(() => { + cy.beforeBlock(MP); + }); + + it('1. Setting up Monitoring Plugin', () => { + cy.log('Setting up Monitoring Plugin'); + }); +}); + +describe('IVT: Monitoring UIPlugin + Virtualization', () => { + + before(() => { + cy.beforeBlockVirtualization(KBV); + }); + + it('1. Virtualization perspective - Observe Menu', () => { + cy.log('Virtualization perspective - Observe Menu and verify all submenus'); + cy.switchPerspective('Virtualization'); + cy.byAriaLabel('Welcome modal').should('be.visible'); + guidedTour.closeKubevirtTour(); + }); +}); + +describe('Regression: Monitoring - Metrics (Virtualization)', () => { + + beforeEach(() => { + cy.visit('/'); + cy.validateLogin(); + cy.switchPerspective('Virtualization'); + guidedTour.closeKubevirtTour(); + alerts.getWatchdogAlert(); + nav.sidenav.clickNavLink(['Observe', 'Metrics']); + cy.changeNamespace("All Projects"); + alerts.getWatchdogAlert(); + }); + + runAllRegressionMetricsTests({ + name: 'Virtualization', + }); + +}); + +describe('Regression: Monitoring - Metrics Namespaced (Virtualization)', () => { + + beforeEach(() => { + cy.visit('/'); + cy.validateLogin(); + cy.switchPerspective('Virtualization'); + guidedTour.closeKubevirtTour(); + alerts.getWatchdogAlert(); + nav.sidenav.clickNavLink(['Observe', 'Metrics']); + cy.changeNamespace(MP.namespace); + alerts.getWatchdogAlert(); + }); + + runAllRegressionMetricsTestsNamespace({ + name: 'Virtualization', + }); + +}); \ No newline at end of file diff --git a/web/cypress/e2e/coo/04.coo_ivt_legacy_dashboards.cy.ts b/web/cypress/e2e/coo/04.coo_ivt_legacy_dashboards.cy.ts new file mode 100644 index 00000000..e63231a9 --- /dev/null +++ b/web/cypress/e2e/coo/04.coo_ivt_legacy_dashboards.cy.ts @@ -0,0 +1,83 @@ +import { alerts } from '../../fixtures/monitoring/alert'; +import { runAllRegressionLegacyDashboardsTests } from '../../support/monitoring/03.reg_legacy_dashboards.cy'; +import { runAllRegressionLegacyDashboardsTestsNamespace } from '../../support/monitoring/06.reg_legacy_dashboards_namespace.cy'; +import { nav } from '../../views/nav'; +import { guidedTour } from '../../views/tour'; + +// Set constants for the operators that need to be installed for tests. +const MP = { + namespace: 'openshift-monitoring', + operatorName: 'Cluster Monitoring Operator', +}; + +const KBV = { + namespace: 'openshift-cnv', + packageName: 'kubevirt-hyperconverged', + operatorName: 'kubevirt-hyperconverged-operator.v4.19.6', + config: { + kind: 'HyperConverged', + name: 'kubevirt-hyperconverged', + }, + crd: { + kubevirt: 'kubevirts.kubevirt.io', + hyperconverged: 'hyperconvergeds.hco.kubevirt.io', + } +}; + +describe('Setting up Monitoring Plugin', () => { + + before(() => { + cy.beforeBlock(MP); + }); + + it('1. Setting up Monitoring Plugin', () => { + cy.log('Setting up Monitoring Plugin'); + }); +}); + +describe('IVT: Monitoring UIPlugin + Virtualization', () => { + + before(() => { + cy.beforeBlockVirtualization(KBV); + }); + + it('1. Virtualization perspective - Observe Menu', () => { + cy.log('Virtualization perspective - Observe Menu and verify all submenus'); + cy.switchPerspective('Virtualization'); + cy.byAriaLabel('Welcome modal').should('be.visible'); + guidedTour.closeKubevirtTour(); + }); +}); + +describe('Regression: Monitoring - Legacy Dashboards (Virtualization)', () => { + + beforeEach(() => { + cy.visit('/'); + cy.validateLogin(); + cy.switchPerspective('Virtualization'); + guidedTour.closeKubevirtTour(); + nav.sidenav.clickNavLink(['Observe', 'Dashboards']); + cy.changeNamespace("All Projects"); + }); + + runAllRegressionLegacyDashboardsTests({ + name: 'Virtualization', + }); + +}); + +describe('Regression: Monitoring - Legacy Dashboards Namespaced (Virtualization)', () => { + + beforeEach(() => { + cy.visit('/'); + cy.validateLogin(); + cy.switchPerspective('Virtualization'); + guidedTour.closeKubevirtTour(); + nav.sidenav.clickNavLink(['Observe', 'Dashboards']); + cy.changeNamespace(MP.namespace); + }); + + runAllRegressionLegacyDashboardsTestsNamespace({ + name: 'Virtualization', + }); +}); \ No newline at end of file diff --git a/web/cypress/e2e/monitoring/00.bvt_admin.cy.ts b/web/cypress/e2e/monitoring/00.bvt_admin.cy.ts new file mode 100644 index 00000000..538cc5fe --- /dev/null +++ b/web/cypress/e2e/monitoring/00.bvt_admin.cy.ts @@ -0,0 +1,141 @@ +import { nav } from '../../views/nav'; +import { alerts } from '../../fixtures/monitoring/alert'; +import { guidedTour } from '../../views/tour'; +import { runBVTMonitoringTests } from '../../support/monitoring/00.bvt_monitoring.cy'; +import { runBVTMonitoringTestsNamespace } from '../../support/monitoring/00.bvt_monitoring_namespace.cy'; +import { commonPages } from '../../views/common'; +import { overviewPage } from '../../views/overview-page'; +// Set constants for the operators that need to be installed for tests. +const MP = { + namespace: 'openshift-monitoring', + operatorName: 'Cluster Monitoring Operator', +}; + +describe('BVT: Monitoring', () => { + + before(() => { + cy.beforeBlock(MP); + }); + + beforeEach(() => { + cy.visit('/'); + guidedTour.close(); + cy.validateLogin(); + alerts.getWatchdogAlert(); + nav.sidenav.clickNavLink(['Observe', 'Alerting']); + alerts.getWatchdogAlert(); + cy.changeNamespace("All Projects"); + }); + + it(`1. Admin perspective - Observe Menu`, () => { + cy.log(`Admin perspective - Observe Menu and verify all submenus`); + nav.sidenav.clickNavLink(['Administration', 'Cluster Settings']); + commonPages.detailsPage.administration_clusterSettings(); + nav.sidenav.clickNavLink(['Observe', 'Alerting']); + commonPages.titleShouldHaveText('Alerting'); + cy.changeNamespace('All Projects'); + nav.tabs.switchTab('Silences'); + nav.sidenav.clickNavLink(['Observe', 'Metrics']); + commonPages.titleShouldHaveText('Metrics'); + nav.sidenav.clickNavLink(['Observe', 'Dashboards']); + commonPages.titleShouldHaveText('Dashboards'); + nav.sidenav.clickNavLink(['Observe', 'Targets']); + commonPages.titleShouldHaveText('Metrics targets'); + + + }); + // TODO: Intercept Bell GET request to inject an alert (Watchdog to have it opened in Alert Details page?) + // it('Admin perspective - Bell > Alert details > Alerting rule details > Metrics flow', () => { + // cy.visit('/'); + // commonPages.clickBellIcon(); + // commonPages.bellIconClickAlert('TargetDown'); + // commonPages.titleShouldHaveText('TargetDown') + + // }); + + + it(`2. Admin perspective - Overview Page > Status - View alerts`, () => { + nav.sidenav.clickNavLink(['Home', 'Overview']); + overviewPage.clickStatusViewAlerts(); + commonPages.titleShouldHaveText('Alerting'); + }); + + //TODO: Intercept and inject a valid alert into status-card to be opened correctly to Alerting / Alerts page + // I couldn't make Watchdog working on status-card + // it('3. Admin perspective - Overview Page > Status - View details', () => { + // cy.visit('/'); + // nav.sidenav.clickNavLink(['Home', 'Overview']); + // overviewPage.clickStatusViewDetails(0); + // detailsPage.sectionHeaderShouldExist('Alert details'); + // }); + + it(`3. Admin perspective - Cluster Utilization - Metrics`, () => { + nav.sidenav.clickNavLink(['Home', 'Overview']); + overviewPage.clickClusterUtilizationViewCPU(); + commonPages.titleShouldHaveText('Metrics'); + commonPages.projectDropdownShouldExist(); + }); + + // Run tests in Administrator perspective + runBVTMonitoringTests({ + name: 'Administrator', + }); + +}); + +describe('BVT: Monitoring - Namespaced', () => { + + before(() => { + cy.beforeBlock(MP); + }); + + beforeEach(() => { + cy.visit('/'); + guidedTour.close(); + cy.validateLogin(); + alerts.getWatchdogAlert(); + nav.sidenav.clickNavLink(['Observe', 'Alerting']); + alerts.getWatchdogAlert(); + cy.changeNamespace(MP.namespace); + }); + + it(`Admin perspective - Observe Menu`, () => { + cy.log(`Admin perspective - Observe Menu and verify all submenus`); + nav.sidenav.clickNavLink(['Administration', 'Cluster Settings']); + commonPages.detailsPage.administration_clusterSettings(); + nav.sidenav.clickNavLink(['Observe', 'Alerting']); + commonPages.titleShouldHaveText('Alerting'); + nav.tabs.switchTab('Silences'); + commonPages.projectDropdownShouldExist(); + nav.tabs.switchTab('Alerting rules'); + commonPages.projectDropdownShouldExist(); + nav.sidenav.clickNavLink(['Observe', 'Metrics']); + commonPages.titleShouldHaveText('Metrics'); + commonPages.projectDropdownShouldExist(); + nav.sidenav.clickNavLink(['Observe', 'Dashboards']); + commonPages.titleShouldHaveText('Dashboards'); + commonPages.projectDropdownShouldExist(); + nav.sidenav.clickNavLink(['Observe', 'Targets']); + commonPages.titleShouldHaveText('Metrics targets'); + commonPages.projectDropdownShouldNotExist(); + + }); + + it(`Admin perspective - Overview Page > Status - View alerts`, () => { + nav.sidenav.clickNavLink(['Home', 'Overview']); + overviewPage.clickStatusViewAlerts(); + commonPages.titleShouldHaveText('Alerting'); + }); + + it(`Admin perspective - Cluster Utilization - Metrics`, () => { + nav.sidenav.clickNavLink(['Home', 'Overview']); + overviewPage.clickClusterUtilizationViewCPU(); + commonPages.titleShouldHaveText('Metrics'); + }); + + // Run tests in Administrator perspective + runBVTMonitoringTestsNamespace({ + name: 'Administrator', + }); + +}); \ No newline at end of file diff --git a/web/cypress/e2e/monitoring/regression/01.reg_alerts_admin.cy.ts b/web/cypress/e2e/monitoring/regression/01.reg_alerts_admin.cy.ts new file mode 100644 index 00000000..14361f3f --- /dev/null +++ b/web/cypress/e2e/monitoring/regression/01.reg_alerts_admin.cy.ts @@ -0,0 +1,58 @@ +import { alerts } from '../../../fixtures/monitoring/alert'; +import { runAllRegressionAlertsTests } from '../../../support/monitoring/01.reg_alerts.cy'; +import { runAllRegressionAlertsTestsNamespace } from '../../../support/monitoring/04.reg_alerts_namespace.cy'; +import { nav } from '../../../views/nav'; +import { guidedTour } from '../../../views/tour'; + +const MP = { + namespace: 'openshift-monitoring', + operatorName: 'Cluster Monitoring Operator', +}; + +// Test suite for Administrator perspective +describe('Regression: Monitoring - Alerts (Administrator)', () => { + + before(() => { + cy.beforeBlock(MP); + }); + + beforeEach(() => { + cy.visit('/'); + guidedTour.close(); + cy.validateLogin(); + alerts.getWatchdogAlert(); + nav.sidenav.clickNavLink(['Observe', 'Alerting']); + alerts.getWatchdogAlert(); + cy.changeNamespace("All Projects"); + }); + + // Run tests in Administrator perspective + runAllRegressionAlertsTests({ + name: 'Administrator', + }); + +}); + +describe('Regression: Monitoring - Alerts Namespaced (Administrator)', () => { + + before(() => { + cy.beforeBlock(MP); + }); + + beforeEach(() => { + cy.visit('/'); + guidedTour.close(); + cy.validateLogin(); + alerts.getWatchdogAlert(); + nav.sidenav.clickNavLink(['Observe', 'Alerting']); + alerts.getWatchdogAlert(); + cy.changeNamespace(MP.namespace); + }); + + // Run tests in Administrator perspective + runAllRegressionAlertsTestsNamespace({ + name: 'Administrator', + }); + +}); + diff --git a/web/cypress/e2e/monitoring/regression/02.reg_metrics_admin.cy.ts b/web/cypress/e2e/monitoring/regression/02.reg_metrics_admin.cy.ts new file mode 100644 index 00000000..b51d8f0e --- /dev/null +++ b/web/cypress/e2e/monitoring/regression/02.reg_metrics_admin.cy.ts @@ -0,0 +1,54 @@ +import { runAllRegressionMetricsTests } from '../../../support/monitoring/02.reg_metrics.cy'; +import { runAllRegressionMetricsTestsNamespace } from '../../../support/monitoring/05.reg_metrics_namespace.cy'; +import { nav } from '../../../views/nav'; +import { guidedTour } from '../../../views/tour'; + +const MP = { + namespace: 'openshift-monitoring', + operatorName: 'Cluster Monitoring Operator', +}; + +// Test suite for Administrator perspective +describe('Regression: Monitoring - Metrics (Administrator)', () => { + + before(() => { + cy.beforeBlock(MP); + }); + + beforeEach(() => { + cy.visit('/'); + guidedTour.close(); + cy.validateLogin(); + nav.sidenav.clickNavLink(['Observe', 'Metrics']); + cy.changeNamespace("All Projects"); + }); + + // Run tests in Administrator perspective + runAllRegressionMetricsTests({ + name: 'Administrator', + }); + +}); + +// Test suite for Administrator perspective +describe('Regression: Monitoring - Metrics Namespaced (Administrator)', () => { + + before(() => { + cy.beforeBlock(MP); + }); + + beforeEach(() => { + cy.visit('/'); + guidedTour.close(); + cy.validateLogin(); + nav.sidenav.clickNavLink(['Observe', 'Metrics']); + cy.changeNamespace(MP.namespace); + }); + + // Run tests in Administrator perspective + runAllRegressionMetricsTestsNamespace({ + name: 'Administrator', + }); + +}); + diff --git a/web/cypress/e2e/monitoring/regression/03.reg_legacy_dashboards_admin.cy.ts b/web/cypress/e2e/monitoring/regression/03.reg_legacy_dashboards_admin.cy.ts new file mode 100644 index 00000000..ead6765b --- /dev/null +++ b/web/cypress/e2e/monitoring/regression/03.reg_legacy_dashboards_admin.cy.ts @@ -0,0 +1,54 @@ +import { runAllRegressionLegacyDashboardsTests } from '../../../support/monitoring/03.reg_legacy_dashboards.cy'; +import { runAllRegressionLegacyDashboardsTestsNamespace } from '../../../support/monitoring/06.reg_legacy_dashboards_namespace.cy'; +import { nav } from '../../../views/nav'; +import { guidedTour } from '../../../views/tour'; + +const MP = { + namespace: 'openshift-monitoring', + operatorName: 'Cluster Monitoring Operator', +}; + +// Test suite for Administrator perspective +describe('Regression: Monitoring - Legacy Dashboards (Administrator)', () => { + + before(() => { + cy.beforeBlock(MP); + }); + + beforeEach(() => { + cy.visit('/'); + guidedTour.close(); + cy.validateLogin(); + nav.sidenav.clickNavLink(['Observe', 'Dashboards']); + cy.changeNamespace("All Projects"); + }); + + // Run tests in Administrator perspective + runAllRegressionLegacyDashboardsTests({ + name: 'Administrator', + }); + +}); + +// Test suite for Administrator perspective +describe('Regression: Monitoring - Legacy Dashboards Namespaced (Administrator)', () => { + + before(() => { + cy.beforeBlock(MP); + }); + + beforeEach(() => { + cy.visit('/'); + guidedTour.close(); + cy.validateLogin(); + nav.sidenav.clickNavLink(['Observe', 'Dashboards']); + cy.changeNamespace(MP.namespace); + }); + + // Run tests in Administrator perspective + runAllRegressionLegacyDashboardsTestsNamespace({ + name: 'Administrator', + }); + +}); + diff --git a/web/cypress/fixtures/monitoring/alert.ts b/web/cypress/fixtures/monitoring/alert.ts index 1b4c7826..dd1b2e85 100644 --- a/web/cypress/fixtures/monitoring/alert.ts +++ b/web/cypress/fixtures/monitoring/alert.ts @@ -18,6 +18,7 @@ export const alerts = { labels: { // namespace: `${NAMESPACE}`, prometheus: 'openshift-monitoring/k8s', + namespace: `${WatchdogAlert.NAMESPACE}`, severity: `${WatchdogAlert.SEVERITY}`, }, annotations: { diff --git a/web/cypress/fixtures/monitoring/constants.ts b/web/cypress/fixtures/monitoring/constants.ts index b75402fc..772a2f79 100644 --- a/web/cypress/fixtures/monitoring/constants.ts +++ b/web/cypress/fixtures/monitoring/constants.ts @@ -110,6 +110,16 @@ export enum MetricsPageQueryInput { RATE_OF_TRANSMITTED_PACKETS_DROPPED = 'OpenShift_Metrics_QueryTable_sum(irate(container_network_transmit_packets_dropped_total[2h])) by (pod).csv', QUERY_WITH_ALERT = 'vector1)', API_REQUEST_DURATION_BY_VERB_99TH_PERCENTILE_QUERY = 'histogram_quantile(0.99, sum(resource_verb:apiserver_request_duration_seconds_bucket:rate:5m{apiserver="kube-apiserver"}) by (verb, le))', + //queries where we should escape the curly braces when typing in the query input + CPU_USAGE_QUERY = 'sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate) by (pod)', + MEMORY_USAGE_QUERY = 'sum(container_memory_working_set_bytes{{}container!=""{}}) by (pod)', + FILESYSTEM_USAGE_QUERY = 'topk(25, sort_desc(sum(pod:container_fs_usage_bytes:sum{{}container="",pod!=""{}}) BY (pod, namespace)))', + RECEIVE_BANDWIDTH_QUERY = 'sum(irate(container_network_receive_bytes_total[2h])) by (pod)', + TRANSMIT_BANDWIDTH_QUERY = 'sum(irate(container_network_transmit_bytes_total[2h])) by (pod)', + RATE_OF_RECEIVED_PACKETS_QUERY = 'sum(irate(container_network_receive_packets_total[2h])) by (pod)', + RATE_OF_TRANSMITTED_PACKETS_QUERY = 'sum(irate(container_network_transmit_packets_total[2h])) by (pod)', + RATE_OF_RECEIVED_PACKETS_DROPPED_QUERY = 'sum(irate(container_network_receive_packets_dropped_total[2h])) by (pod)', + RATE_OF_TRANSMITTED_PACKETS_DROPPED_QUERY = 'sum(irate(container_network_transmit_packets_dropped_total[2h])) by (pod)', } export enum MetricsPageQueryInputByNamespace { diff --git a/web/cypress/support/commands/utility-commands.ts b/web/cypress/support/commands/utility-commands.ts index 927a9596..a634fbbb 100644 --- a/web/cypress/support/commands/utility-commands.ts +++ b/web/cypress/support/commands/utility-commands.ts @@ -57,15 +57,19 @@ Cypress.Commands.add('waitUntilWithCustomTimeout', ( Cypress.Commands.add('changeNamespace', (namespace: string) => { cy.log('Changing Namespace to: ' + namespace); - cy.byLegacyTestID('namespace-bar-dropdown').find('button').scrollIntoView().should('be.visible').click(); - cy.get('[data-test="showSystemSwitch"]').then(($element)=> { - if ($element.attr('data-checked-state') !== 'true') { - cy.byTestID('showSystemSwitch').siblings('span').eq(0).should('be.visible').click(); + cy.byLegacyTestID('namespace-bar-dropdown').invoke('text').then((text) => { + if (text !== 'Project: '+namespace) { + cy.byLegacyTestID('namespace-bar-dropdown').find('button').scrollIntoView().should('be.visible').click(); + cy.get('[data-test="showSystemSwitch"]').then(($element)=> { + if ($element.attr('data-checked-state') !== 'true') { + cy.byTestID('showSystemSwitch').siblings('span').eq(0).should('be.visible').click(); + } + }); + cy.byTestID('dropdown-text-filter').type(namespace); + cy.byTestID('dropdown-menu-item-link').contains(namespace).should('be.visible').click(); + cy.log('Namespace changed to: ' + namespace); } }); - cy.byTestID('dropdown-text-filter').type(namespace); - cy.byTestID('dropdown-menu-item-link').contains(namespace).should('be.visible').click(); - cy.log('Namespace changed to: ' + namespace); }); Cypress.Commands.add('aboutModal', () => { @@ -97,14 +101,25 @@ Cypress.Commands.add('waitUntilWithCustomTimeout', ( cy.log('Get pod image'); cy.clickNavLink(['Workloads', 'Pods']); cy.changeNamespace(namespace); - cy.byTestID('name-filter-input').should('be.visible').type(pod); - cy.get(`a[data-test^="${pod}"]`).eq(0).as('podLink').click(); - cy.get('@podLink').should('be.visible').click(); - cy.byPFRole('rowgroup').find('td').eq(1).scrollIntoView().should('be.visible').then(($td) => { - cy.log('Pod image: ' + $td.text()); - + cy.byTestID('page-heading').contains('Pods').should('be.visible'); + cy.wait(5000); + // Check for DataViewFilters component using Cypress's built-in retry-ability + cy.get('body').then(($body) => { + const hasDataViewFilters = $body.find('[data-ouia-component-id="DataViewFilters"]').length > 0; + if (hasDataViewFilters) { + cy.byOUIAID('DataViewFilters').find('button').contains('Status').scrollIntoView().should('be.visible').click(); + cy.byOUIAID('OUIA-Generated-Menu').find('button').contains('Name').scrollIntoView().should('be.visible').click(); + cy.byAriaLabel('Name filter').scrollIntoView().should('be.visible').type(pod); + } else { + cy.byTestID('name-filter-input').should('be.visible').type(pod); + } }); - cy.log('Get pod image completed'); + cy.get(`a[data-test^="${pod}"]`).eq(0).as('podLink').click(); + cy.get('@podLink').should('be.visible').click(); + cy.byPFRole('rowgroup').find('td').eq(1).scrollIntoView().should('be.visible').then(($td) => { + cy.log('Pod image: ' + $td.text()); + }); + cy.log('Get pod image completed'); }); diff --git a/web/cypress/e2e/monitoring/01.bvt_monitoring.cy.ts b/web/cypress/support/monitoring/00.bvt_monitoring.cy.ts similarity index 67% rename from web/cypress/e2e/monitoring/01.bvt_monitoring.cy.ts rename to web/cypress/support/monitoring/00.bvt_monitoring.cy.ts index b035114f..8822dafe 100644 --- a/web/cypress/e2e/monitoring/01.bvt_monitoring.cy.ts +++ b/web/cypress/support/monitoring/00.bvt_monitoring.cy.ts @@ -7,79 +7,22 @@ import { silenceDetailsPage } from '../../views/silence-details-page'; import { silencesListPage } from '../../views/silences-list-page'; import { getValFromElement } from '../../views/utils'; import { overviewPage } from '../../views/overview-page'; -import common = require('mocha/lib/interfaces/common'); import { AlertsAlertState, SilenceComment, SilenceState, WatchdogAlert } from '../../fixtures/monitoring/constants'; -import { alerts } from '../../fixtures/monitoring/alert'; import { alertingRuleListPage } from '../../views/alerting-rule-list-page'; -// Set constants for the operators that need to be installed for tests. -const MP = { - namespace: 'openshift-monitoring', - operatorName: 'Cluster Monitoring Operator', -}; -describe('BVT: Monitoring', () => { +export interface PerspectiveConfig { + name: string; + beforeEach?: () => void; +} - before(() => { - cy.beforeBlock(MP); - }); - - it('1. Admin perspective - Observe Menu', () => { - cy.visit('/'); - cy.log('Admin perspective - Observe Menu and verify all submenus'); - nav.sidenav.clickNavLink(['Administration', 'Cluster Settings']); - commonPages.detailsPage.administration_clusterSettings(); - nav.sidenav.clickNavLink(['Observe', 'Alerting']); - commonPages.titleShouldHaveText('Alerting'); - cy.changeNamespace('All Projects'); - nav.tabs.switchTab('Silences'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); - commonPages.titleShouldHaveText('Metrics'); - nav.sidenav.clickNavLink(['Observe', 'Dashboards']); - commonPages.titleShouldHaveText('Dashboards'); - nav.sidenav.clickNavLink(['Observe', 'Targets']); - commonPages.titleShouldHaveText('Metrics targets'); - - - }); - // TODO: Intercept Bell GET request to inject an alert (Watchdog to have it opened in Alert Details page?) - // it('Admin perspective - Bell > Alert details > Alerting rule details > Metrics flow', () => { - // cy.visit('/'); - // commonPages.clickBellIcon(); - // commonPages.bellIconClickAlert('TargetDown'); - // commonPages.titleShouldHaveText('TargetDown') - - // }); +export function runBVTMonitoringTests(perspective: PerspectiveConfig) { + testBVTMonitoring(perspective); +} +export function testBVTMonitoring(perspective: PerspectiveConfig) { - it('2. Admin perspective - Overview Page > Status - View alerts', () => { - cy.visit('/'); - nav.sidenav.clickNavLink(['Home', 'Overview']); - overviewPage.clickStatusViewAlerts(); - commonPages.titleShouldHaveText('Alerting'); - }); - - //TODO: Intercept and inject a valid alert into status-card to be opened correctly to Alerting / Alerts page - // I couldn't make Watchdog working on status-card - // it('3. Admin perspective - Overview Page > Status - View details', () => { - // cy.visit('/'); - // nav.sidenav.clickNavLink(['Home', 'Overview']); - // overviewPage.clickStatusViewDetails(0); - // detailsPage.sectionHeaderShouldExist('Alert details'); - // }); - - it('4. Admin perspective - Cluster Utilization - Metrics', () => { - cy.visit('/'); - nav.sidenav.clickNavLink(['Home', 'Overview']); - overviewPage.clickClusterUtilizationViewCPU(); - commonPages.titleShouldHaveText('Metrics'); - commonPages.projectDropdownShouldExist(); - }); - - - it('5. Admin perspective - Alerting > Alerting Details page > Alerting Rule > Metrics', () => { - cy.visit('/'); + it(`${perspective.name} perspective - Alerting > Alerting Details page > Alerting Rule > Metrics`, () => { cy.log('5.1. use sidebar nav to go to Observe > Alerting'); - nav.sidenav.clickNavLink(['Observe', 'Alerting']); commonPages.titleShouldHaveText('Alerting'); listPage.tabShouldHaveText('Alerts'); listPage.tabShouldHaveText('Silences'); @@ -137,23 +80,18 @@ describe('BVT: Monitoring', () => { }); }); - it('6. Admin perspective - Creates and expires a Silence', () => { - cy.visit('/'); - cy.log('6.1 use sidebar nav to go to Observe > Alerting'); - nav.sidenav.clickNavLink(['Observe', 'Alerting']); - alerts.getWatchdogAlert(); - - cy.log('6.3 filter to Watchdog alert'); + it(`${perspective.name} perspective - Creates and expires a Silence`, () => { + cy.log('6.1 filter to Watchdog alert'); nav.tabs.switchTab('Alerts'); listPage.ARRows.shouldBeLoaded(); listPage.filter.byName(`${WatchdogAlert.ALERTNAME}`); listPage.ARRows.countShouldBe(1); - cy.log('6.4 silence alert'); + cy.log('6.2 silence alert'); listPage.ARRows.expandRow(); listPage.ARRows.silenceAlert(); - cy.log('6.5 silence alert page'); + cy.log('6.3 silence alert page'); commonPages.titleShouldHaveText('Silence alert'); // Launches create silence form @@ -181,22 +119,22 @@ describe('BVT: Monitoring', () => { silenceAlertPage.clickSubmit(); // After creating the Silence, should be redirected to its details page - cy.log('6.6 Assert Silence details page'); + cy.log('6.4 Assert Silence details page'); silenceDetailsPage.assertSilenceDetailsPage(`${WatchdogAlert.ALERTNAME}`, 'Silence details', 'alertname=Watchdog'); - cy.log('6.7 Click on Firing alerts'); + cy.log('6.5 Click on Firing alerts'); silenceDetailsPage.clickOnFiringAlerts(`${WatchdogAlert.ALERTNAME}`); commonPages.titleShouldHaveText(`${WatchdogAlert.ALERTNAME}`); detailsPage.sectionHeaderShouldExist('Alert details'); detailsPage.labelShouldExist('alertname=Watchdog'); - cy.log('6.8 Click on Silenced by'); + cy.log('6.6 Click on Silenced by'); detailsPage.clickOnSilencedBy(`${WatchdogAlert.ALERTNAME}`); commonPages.titleShouldHaveText(`${WatchdogAlert.ALERTNAME}`); detailsPage.sectionHeaderShouldExist('Silence details'); detailsPage.labelShouldExist('alertname=Watchdog'); - cy.log('6.9 shows the silenced Alert in the Silenced Alerts list'); + cy.log('6.7 shows the silenced Alert in the Silenced Alerts list'); nav.sidenav.clickNavLink(['Observe', 'Alerting']); nav.tabs.switchTab('Silences'); silencesListPage.shouldBeLoaded(); @@ -207,31 +145,31 @@ describe('BVT: Monitoring', () => { listPage.filter.selectFilterOption(false, SilenceState.ACTIVE, true); silencesListPage.rows.shouldBe(`${WatchdogAlert.ALERTNAME}`, SilenceState.ACTIVE); - cy.log('6.9.1 verify on Alerting Rules list page again'); + cy.log('6.8 verify on Alerting Rules list page again'); nav.sidenav.clickNavLink(['Observe', 'Alerting']); nav.tabs.switchTab('Alerting rules'); listPage.filter.byName(`${WatchdogAlert.ALERTNAME}`); alertingRuleListPage.ARShouldBe(`${WatchdogAlert.ALERTNAME}`, `${WatchdogAlert.SEVERITY}`, 1, AlertsAlertState.SILENCED); - cy.log('6.10 verify on Alerts list page again'); + cy.log('6.9 verify on Alerts list page again'); nav.sidenav.clickNavLink(['Observe', 'Alerting']); listPage.filter.clearAllFilters(); listPage.filter.selectFilterOption(true, AlertsAlertState.SILENCED, true); listPage.filter.byName(`${WatchdogAlert.ALERTNAME}`); listPage.ARRows.ARShouldBe(`${WatchdogAlert.ALERTNAME}`, `${WatchdogAlert.SEVERITY}`, 1, AlertsAlertState.SILENCED); - cy.log('6.11 expires the Silence'); + cy.log('6.10 expires the Silence'); listPage.ARRows.expandRow(); listPage.ARRows.clickAlert(); detailsPage.clickOnSilencedBy(`${WatchdogAlert.ALERTNAME}`); silenceDetailsPage.expireSilence(true, true); - cy.log('6.12 verify on Alerts list page again'); + cy.log('6.11 verify on Alerts list page again'); nav.sidenav.clickNavLink(['Observe', 'Alerting']); listPage.filter.clearAllFilters(); listPage.filter.byName(`${WatchdogAlert.ALERTNAME}`); listPage.ARRows.ARShouldBe(`${WatchdogAlert.ALERTNAME}`, `${WatchdogAlert.SEVERITY}`, 1, AlertsAlertState.FIRING); }); -}); +} diff --git a/web/cypress/e2e/monitoring/02.bvt_monitoring_namespace.cy.ts b/web/cypress/support/monitoring/00.bvt_monitoring_namespace.cy.ts similarity index 70% rename from web/cypress/e2e/monitoring/02.bvt_monitoring_namespace.cy.ts rename to web/cypress/support/monitoring/00.bvt_monitoring_namespace.cy.ts index 290ca3d2..a3ee750f 100644 --- a/web/cypress/e2e/monitoring/02.bvt_monitoring_namespace.cy.ts +++ b/web/cypress/support/monitoring/00.bvt_monitoring_namespace.cy.ts @@ -7,74 +7,22 @@ import { silenceDetailsPage } from '../../views/silence-details-page'; import { silencesListPage } from '../../views/silences-list-page'; import { getValFromElement } from '../../views/utils'; import { overviewPage } from '../../views/overview-page'; -import common = require('mocha/lib/interfaces/common'); import { AlertsAlertState, SilenceComment, SilenceState, WatchdogAlert } from '../../fixtures/monitoring/constants'; -import { alerts } from '../../fixtures/monitoring/alert'; import { alertingRuleListPage } from '../../views/alerting-rule-list-page'; -// Set constants for the operators that need to be installed for tests. -const MP = { - namespace: 'openshift-monitoring', - operatorName: 'Cluster Monitoring Operator', -}; -describe('BVT: Monitoring - namespaced', () => { +export interface PerspectiveConfig { + name: string; + beforeEach?: () => void; +} - before(() => { - cy.beforeBlock(MP); - }); - - beforeEach(() => { - nav.sidenav.clickNavLink(['Observe', 'Alerting']); - cy.changeNamespace(MP.namespace); - }); +export function runBVTMonitoringTestsNamespace(perspective: PerspectiveConfig) { + testBVTMonitoringTestsNamespace(perspective); +} - afterEach(() => { - nav.sidenav.clickNavLink(['Observe', 'Alerting']); - cy.changeNamespace('All Projects'); - }); +export function testBVTMonitoringTestsNamespace(perspective: PerspectiveConfig) { - it('1. Admin perspective - Observe Menu', () => { - cy.visit('/'); - cy.log('Admin perspective - Observe Menu and verify all submenus'); - nav.sidenav.clickNavLink(['Administration', 'Cluster Settings']); - commonPages.detailsPage.administration_clusterSettings(); - nav.sidenav.clickNavLink(['Observe', 'Alerting']); - commonPages.titleShouldHaveText('Alerting'); - nav.tabs.switchTab('Silences'); - commonPages.projectDropdownShouldExist(); - nav.tabs.switchTab('Alerting rules'); - commonPages.projectDropdownShouldExist(); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); - commonPages.titleShouldHaveText('Metrics'); - commonPages.projectDropdownShouldExist(); - nav.sidenav.clickNavLink(['Observe', 'Dashboards']); - commonPages.titleShouldHaveText('Dashboards'); - commonPages.projectDropdownShouldExist(); - nav.sidenav.clickNavLink(['Observe', 'Targets']); - commonPages.titleShouldHaveText('Metrics targets'); - commonPages.projectDropdownShouldNotExist(); - - }); - - it('2. Admin perspective - Overview Page > Status - View alerts', () => { - cy.visit('/'); - nav.sidenav.clickNavLink(['Home', 'Overview']); - overviewPage.clickStatusViewAlerts(); - commonPages.titleShouldHaveText('Alerting'); - }); - - it('3. Admin perspective - Cluster Utilization - Metrics', () => { - cy.visit('/'); - nav.sidenav.clickNavLink(['Home', 'Overview']); - overviewPage.clickClusterUtilizationViewCPU(); - commonPages.titleShouldHaveText('Metrics'); - }); - - - it('4. Admin perspective - Alerting > Alerting Details page > Alerting Rule > Metrics', () => { - cy.visit('/'); + it(`${perspective.name} perspective - Alerting > Alerting Details page > Alerting Rule > Metrics`, () => { cy.log('4.1. use sidebar nav to go to Observe > Alerting'); - nav.sidenav.clickNavLink(['Observe', 'Alerting']); commonPages.titleShouldHaveText('Alerting'); listPage.tabShouldHaveText('Alerts'); listPage.tabShouldHaveText('Silences'); @@ -132,23 +80,18 @@ describe('BVT: Monitoring - namespaced', () => { }); }); - it('5. Admin perspective - Creates and expires a Silence', () => { - cy.visit('/'); - cy.log('5.1 use sidebar nav to go to Observe > Alerting'); - nav.sidenav.clickNavLink(['Observe', 'Alerting']); - alerts.getWatchdogAlert(); - - cy.log('5.2 filter to Watchdog alert'); + it(`${perspective.name} perspective - Creates and expires a Silence`, () => { + cy.log('5.1 filter to Watchdog alert'); nav.tabs.switchTab('Alerts'); listPage.ARRows.shouldBeLoaded(); listPage.filter.byName(`${WatchdogAlert.ALERTNAME}`); listPage.ARRows.countShouldBe(1); - cy.log('5.3 silence alert'); + cy.log('5.2 silence alert'); listPage.ARRows.expandRow(); listPage.ARRows.silenceAlert(); - cy.log('5.4 silence alert page'); + cy.log('5.3 silence alert page'); commonPages.titleShouldHaveText('Silence alert'); commonPages.projectDropdownShouldExist(); @@ -178,24 +121,24 @@ describe('BVT: Monitoring - namespaced', () => { silenceAlertPage.clickSubmit(); // After creating the Silence, should be redirected to its details page - cy.log('5.5 Assert Silence details page'); + cy.log('5.4 Assert Silence details page'); silenceDetailsPage.assertSilenceDetailsPage(`${WatchdogAlert.ALERTNAME}`, 'Silence details', 'alertname=Watchdog'); commonPages.projectDropdownShouldNotExist(); - cy.log('5.6 Click on Firing alerts'); + cy.log('5.5 Click on Firing alerts'); silenceDetailsPage.clickOnFiringAlerts(`${WatchdogAlert.ALERTNAME}`); commonPages.titleShouldHaveText(`${WatchdogAlert.ALERTNAME}`); commonPages.projectDropdownShouldNotExist(); detailsPage.sectionHeaderShouldExist('Alert details'); detailsPage.labelShouldExist('alertname=Watchdog'); - cy.log('5.7 Click on Silenced by'); + cy.log('5.6 Click on Silenced by'); detailsPage.clickOnSilencedBy(`${WatchdogAlert.ALERTNAME}`); commonPages.titleShouldHaveText(`${WatchdogAlert.ALERTNAME}`); detailsPage.sectionHeaderShouldExist('Silence details'); detailsPage.labelShouldExist('alertname=Watchdog'); - cy.log('5.8 shows the silenced Alert in the Silenced Alerts list'); + cy.log('5.7 shows the silenced Alert in the Silenced Alerts list'); nav.sidenav.clickNavLink(['Observe', 'Alerting']); nav.tabs.switchTab('Silences'); silencesListPage.shouldBeLoaded(); @@ -206,31 +149,31 @@ describe('BVT: Monitoring - namespaced', () => { listPage.filter.selectFilterOption(false, SilenceState.ACTIVE, true); silencesListPage.rows.shouldBe(`${WatchdogAlert.ALERTNAME}`, SilenceState.ACTIVE); - cy.log('5.9.1 verify on Alerting Rules list page again'); + cy.log('5.8 verify on Alerting Rules list page again'); nav.sidenav.clickNavLink(['Observe', 'Alerting']); nav.tabs.switchTab('Alerting rules'); listPage.filter.byName(`${WatchdogAlert.ALERTNAME}`); alertingRuleListPage.ARShouldBe(`${WatchdogAlert.ALERTNAME}`, `${WatchdogAlert.SEVERITY}`, 1, AlertsAlertState.SILENCED); - cy.log('5.10 verify on Alerts list page again'); + cy.log('5.9 verify on Alerts list page again'); nav.sidenav.clickNavLink(['Observe', 'Alerting']); listPage.filter.clearAllFilters(); listPage.filter.selectFilterOption(true, AlertsAlertState.SILENCED, true); listPage.filter.byName(`${WatchdogAlert.ALERTNAME}`); listPage.ARRows.ARShouldBe(`${WatchdogAlert.ALERTNAME}`, `${WatchdogAlert.SEVERITY}`, 1, AlertsAlertState.SILENCED); - cy.log('5.11 expires the Silence'); + cy.log('5.10 expires the Silence'); listPage.ARRows.expandRow(); listPage.ARRows.clickAlert(); detailsPage.clickOnSilencedBy(`${WatchdogAlert.ALERTNAME}`); silenceDetailsPage.expireSilence(true, true); - cy.log('5.12 verify on Alerts list page again'); + cy.log('5.11 verify on Alerts list page again'); nav.sidenav.clickNavLink(['Observe', 'Alerting']); listPage.filter.clearAllFilters(); listPage.filter.byName(`${WatchdogAlert.ALERTNAME}`); listPage.ARRows.ARShouldBe(`${WatchdogAlert.ALERTNAME}`, `${WatchdogAlert.SEVERITY}`, 1, AlertsAlertState.FIRING); }); -}); +} diff --git a/web/cypress/e2e/monitoring/regression/01.reg_alerts.cy.ts b/web/cypress/support/monitoring/01.reg_alerts.cy.ts similarity index 86% rename from web/cypress/e2e/monitoring/regression/01.reg_alerts.cy.ts rename to web/cypress/support/monitoring/01.reg_alerts.cy.ts index 671fa1b6..c5e10b7d 100644 --- a/web/cypress/e2e/monitoring/regression/01.reg_alerts.cy.ts +++ b/web/cypress/support/monitoring/01.reg_alerts.cy.ts @@ -1,39 +1,29 @@ -import { commonPages } from '../../../views/common'; -import { detailsPage } from '../../../views/details-page'; -import { listPage } from '../../../views/list-page'; -import { silenceAlertPage } from '../../../views/silence-alert-page'; -import { nav } from '../../../views/nav'; -import { silenceDetailsPage } from '../../../views/silence-details-page'; -import { silencesListPage } from '../../../views/silences-list-page'; -import { alertingRuleListPage } from '../../../views/alerting-rule-list-page'; -import { alertingRuleDetailsPage } from '../../../views/alerting-rule-details-page'; -import { alerts } from '../../../fixtures/monitoring/alert'; -import { AlertingRulesAlertState, MainTagState, Severity, SilenceState, Source, SilenceComment, WatchdogAlert } from '../../../fixtures/monitoring/constants'; - -// -import common = require('mocha/lib/interfaces/common'); -// Set constants for the operators that need to be installed for tests. -const MP = { - namespace: 'openshift-monitoring', - operatorName: 'Cluster Monitoring Operator', -}; - -describe('Regression: Monitoring - Alerts', () => { - - before(() => { - cy.beforeBlock(MP); - }); - - beforeEach(() => { - nav.sidenav.clickNavLink(['Observe', 'Alerting']); - cy.changeNamespace("All Projects"); - }); - - it('1. Admin perspective - Alerting > Alerts page - Filtering', () => { +import { commonPages } from '../../views/common'; +import { detailsPage } from '../../views/details-page'; +import { listPage } from '../../views/list-page'; +import { silenceAlertPage } from '../../views/silence-alert-page'; +import { nav } from '../../views/nav'; +import { silenceDetailsPage } from '../../views/silence-details-page'; +import { silencesListPage } from '../../views/silences-list-page'; +import { alertingRuleListPage } from '../../views/alerting-rule-list-page'; +import { alertingRuleDetailsPage } from '../../views/alerting-rule-details-page'; +import { AlertingRulesAlertState, MainTagState, Severity, SilenceState, Source, SilenceComment, WatchdogAlert } from '../../fixtures/monitoring/constants'; + +export interface PerspectiveConfig { + name: string; + beforeEach?: () => void; +} + +export function runAllRegressionAlertsTests(perspective: PerspectiveConfig) { + testAlertsRegression(perspective); +} + +export function testAlertsRegression(perspective: PerspectiveConfig) { + it(`${perspective.name} perspective - Alerting > Alerts page - Filtering`, () => { cy.log('1.1 Header components'); - - nav.sidenav.clickNavLink(['Observe', 'Alerting']); - alerts.getWatchdogAlert(); + // alerts.getWatchdogAlert(); + // nav.sidenav.clickNavLink(['Observe', 'Alerting']); + // alerts.getWatchdogAlert(); listPage.filter.selectFilterOption(true, AlertingRulesAlertState.PENDING, false); listPage.filter.selectFilterOption(false, AlertingRulesAlertState.SILENCED, false); listPage.filter.selectFilterOption(false, Severity.CRITICAL, false); @@ -56,7 +46,7 @@ describe('Regression: Monitoring - Alerts', () => { }); - it('2. Admin perspective - Alerting > Silences page > Create silence', () => { + it(`${perspective.name} perspective - Alerting > Silences page > Create silence`, () => { cy.log('2.1 use sidebar nav to go to Observe > Alerting'); nav.sidenav.clickNavLink(['Observe', 'Alerting']); nav.tabs.switchTab('Silences'); @@ -78,12 +68,11 @@ describe('Regression: Monitoring - Alerts', () => { }); - it('3. Admin perspective - Alerting > Alerts / Silences > Kebab icon on List and Details', () => { - cy.visit('/'); + it(`${perspective.name} perspective - Alerting > Alerts / Silences > Kebab icon on List and Details`, () => { cy.log('3.1 use sidebar nav to go to Observe > Alerting'); - nav.sidenav.clickNavLink(['Observe', 'Alerting']); - alerts.getWatchdogAlert(); - listPage.ARRows.shouldBeLoaded(); + // alerts.getWatchdogAlert(); + // nav.sidenav.clickNavLink(['Observe', 'Alerting']); + // alerts.getWatchdogAlert(); cy.log('3.2 filter to Watchdog alert'); listPage.filter.byName(`${WatchdogAlert.ALERTNAME}`); @@ -130,6 +119,7 @@ describe('Regression: Monitoring - Alerts', () => { cy.changeNamespace('openshift-monitoring'); cy.log('3.8 Assert Kebab on Silence List page for Expired alert'); + silencesListPage.filter.byName(`${WatchdogAlert.ALERTNAME}`); silencesListPage.emptyState(); listPage.filter.removeMainTag(MainTagState.SILENCE_STATE); listPage.filter.selectFilterOption(true, SilenceState.EXPIRED, false); @@ -201,14 +191,13 @@ describe('Regression: Monitoring - Alerts', () => { listPage.ARRows.countShouldBe(1); }); - it('4. Admin perspective - Alerting > Alerting Rules', () => { + it(`${perspective.name} perspective - Alerting > Alerting Rules`, () => { cy.log('4.1 use sidebar nav to go to Observe > Alerting'); nav.sidenav.clickNavLink(['Observe', 'Alerting']); nav.tabs.switchTab('Alerting rules'); alertingRuleListPage.shouldBeLoaded(); cy.log('4.2 clear all filters, verify filters and tags'); - // listPage.filter.clearAllFilters('alerting-rules'); listPage.filter.selectFilterOption(true, AlertingRulesAlertState.FIRING, false); listPage.filter.selectFilterOption(false, AlertingRulesAlertState.PENDING, false); listPage.filter.selectFilterOption(false, AlertingRulesAlertState.SILENCED, false); @@ -278,4 +267,4 @@ describe('Regression: Monitoring - Alerts', () => { }); -}); +} diff --git a/web/cypress/e2e/monitoring/regression/02.reg_metrics.cy.ts b/web/cypress/support/monitoring/02.reg_metrics.cy.ts similarity index 91% rename from web/cypress/e2e/monitoring/regression/02.reg_metrics.cy.ts rename to web/cypress/support/monitoring/02.reg_metrics.cy.ts index 4956b5a7..529dca8b 100644 --- a/web/cypress/e2e/monitoring/regression/02.reg_metrics.cy.ts +++ b/web/cypress/support/monitoring/02.reg_metrics.cy.ts @@ -1,28 +1,21 @@ -import { nav } from '../../../views/nav'; -import { metricsPage } from '../../../views/metrics'; -import { Classes, DataTestIDs, IDs } from '../../../../src/components/data-test'; -import { GraphTimespan, MetricGraphEmptyState, MetricsPagePredefinedQueries, MetricsPageQueryInput, MetricsPageQueryKebabDropdown, MetricsPageUnits } from '../../../fixtures/monitoring/constants'; -import common = require('mocha/lib/interfaces/common'); -// Set constants for the operators that need to be installed for tests. -const MP = { - namespace: 'openshift-monitoring', - operatorName: 'Cluster Monitoring Operator', -}; - -describe('Regression: Monitoring - Metrics', () => { - - before(() => { - cy.beforeBlock(MP); - }); +import { nav } from '../../views/nav'; +import { metricsPage } from '../../views/metrics'; +import { Classes, DataTestIDs } from '../../../src/components/data-test'; +import { GraphTimespan, MetricGraphEmptyState, MetricsPagePredefinedQueries, MetricsPageQueryInput, MetricsPageQueryKebabDropdown } from '../../fixtures/monitoring/constants'; - beforeEach(() => { - nav.sidenav.clickNavLink(['Observe', 'Alerting']); - cy.changeNamespace("All Projects"); - }); +export interface PerspectiveConfig { + name: string; + beforeEach?: () => void; +} + +export function runAllRegressionMetricsTests(perspective: PerspectiveConfig) { + testMetricsRegression(perspective); +} - it('1. Admin perspective - Metrics', () => { +export function testMetricsRegression(perspective: PerspectiveConfig) { + + it(`${perspective.name} perspective - Metrics`, () => { cy.log('1.1 Metrics page loaded'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); metricsPage.shouldBeLoaded(); cy.log('1.2 Units dropdown'); @@ -42,10 +35,8 @@ describe('Regression: Monitoring - Metrics', () => { }); - it('2. Admin perspective - Metrics > Actions - No query added', () => { + it(`${perspective.name} perspective - Metrics > Actions - No query added`, () => { cy.log('2.1 Only one query loaded'); - cy.visit('/'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); cy.byTestID(DataTestIDs.MetricsPageExpandCollapseRowButton).should('have.length', 1); cy.log('2.2 Actions >Add query'); @@ -83,10 +74,8 @@ describe('Regression: Monitoring - Metrics', () => { }); - it('3. Admin perspective - Metrics > Actions - One query added', () => { + it(`${perspective.name} perspective - Metrics > Actions - One query added`, () => { cy.log('3.1 Only one query loaded'); - cy.visit('/'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); metricsPage.clickPredefinedQuery(MetricsPagePredefinedQueries.FILESYSTEM_USAGE); metricsPage.shouldBeLoadedWithGraph(); @@ -140,10 +129,8 @@ describe('Regression: Monitoring - Metrics', () => { }); - it('4. Admin perspective - Metrics > Insert Example Query', () => { + it(`${perspective.name} perspective - Metrics > Insert Example Query`, () => { cy.log('4.1 Insert Example Query'); - cy.visit('/'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); metricsPage.clickInsertExampleQuery(); metricsPage.shouldBeLoadedWithGraph(); cy.get(Classes.MetricsPageQueryInput).eq(0).should('contain', MetricsPageQueryInput.INSERT_EXAMPLE_QUERY); @@ -207,7 +194,7 @@ describe('Regression: Monitoring - Metrics', () => { /** * TODO: uncomment when this bug gets fixed * https://issues.redhat.com/browse/OU-974 - [Metrics] - Units - undefined showing in Y axis and tooltip - it('5. Admin perspective - Metrics > Units', () => { + it(`${perspective.name} perspective - Metrics > Units`, () => { cy.log('5.1 Preparation to test Units dropdown'); cy.visit('/monitoring/query-browser'); metricsPage.clickInsertExampleQuery(); @@ -221,11 +208,8 @@ describe('Regression: Monitoring - Metrics', () => { }); */ - it('6. Admin perspective - Metrics > Add Query - Run Queries - Kebab icon', () => { + it(`${perspective.name} perspective - Metrics > Add Query - Run Queries - Kebab icon`, () => { cy.log('6.1 Preparation to test Add Query button'); - cy.visit('/'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); - metricsPage.shouldBeLoaded(); cy.byTestID(DataTestIDs.MetricsPageExpandCollapseRowButton).should('have.length', 1); metricsPage.clickInsertExampleQuery(); cy.get(Classes.MetricsPageQueryInput).eq(0).should('contain', MetricsPageQueryInput.INSERT_EXAMPLE_QUERY); @@ -275,7 +259,7 @@ describe('Regression: Monitoring - Metrics', () => { metricsPage.expandCollapseRowAssertion(true, 1, true, true); cy.get(Classes.MetricsPageQueryInput).eq(0).should('contain', MetricsPageQueryInput.VECTOR_QUERY); cy.get(Classes.MetricsPageQueryInput).eq(1).should('contain', MetricsPageQueryInput.INSERT_EXAMPLE_QUERY); - cy.byTestID(DataTestIDs.MetricGraph).should('be.visible'); + cy.byTestID(DataTestIDs.MetricGraph).should('exist'); metricsPage.clickKebabDropdown(0); cy.byTestID(DataTestIDs.MetricsPageHideShowAllSeriesDropdownItem).contains(MetricsPageQueryKebabDropdown.HIDE_ALL_SERIES).should('be.visible'); cy.byTestID(DataTestIDs.MetricsPageExportCsvDropdownItem).contains(MetricsPageQueryKebabDropdown.EXPORT_AS_CSV).should('be.visible'); @@ -417,12 +401,9 @@ describe('Regression: Monitoring - Metrics', () => { }); - it('7. Admin perspective - Metrics > Predefined Queries > Export as CSV', () => { + it(`${perspective.name} perspective - Metrics > Predefined Queries > Export as CSV`, () => { //OCPBUGS-54316 - [4.16] Metrics "Export as CSV" is not working for all queries cy.log('7.1 Predefined Queries'); - cy.visit('/'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); - metricsPage.shouldBeLoaded(); metricsPage.clickPredefinedQuery(MetricsPagePredefinedQueries.CPU_USAGE); metricsPage.clickKebabDropdown(0); metricsPage.exportAsCSV(true, MetricsPageQueryInput.CPU_USAGE); @@ -478,17 +459,14 @@ describe('Regression: Monitoring - Metrics', () => { }); - it('8. Admin perspective - Metrics > Ungraphable results', () => { + it(`${perspective.name} perspective - Metrics > Ungraphable results`, () => { cy.log('8.1 Ungraphable results'); - cy.visit('/'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); - metricsPage.shouldBeLoaded(); metricsPage.clickPredefinedQuery(MetricsPagePredefinedQueries.CPU_USAGE); metricsPage.clickPredefinedQuery(MetricsPagePredefinedQueries.MEMORY_USAGE); metricsPage.clickPredefinedQuery(MetricsPagePredefinedQueries.FILESYSTEM_USAGE); metricsPage.clickPredefinedQuery(MetricsPagePredefinedQueries.RECEIVE_BANDWIDTH); metricsPage.clickPredefinedQuery(MetricsPagePredefinedQueries.TRANSMIT_BANDWIDTH); - metricsPage.clickPredefinedQuery(MetricsPagePredefinedQueries.RATE_OF_RECEIVED_PACKETS); + metricsPage.clickPredefinedQuery(MetricsPagePredefinedQueries.RATE_OF_RECEIVED_PACKETS); cy.byLegacyTestID('namespace-bar-dropdown').scrollIntoView(); cy.get(Classes.MetricsPageUngraphableResults).contains(MetricGraphEmptyState.UNGRAPHABLE_RESULTS).should('be.visible'); @@ -496,11 +474,8 @@ describe('Regression: Monitoring - Metrics', () => { }); - it('9. Admin perspective - Metrics > No Datapoints', () => { + it(`${perspective.name} perspective - Metrics > No Datapoints`, () => { cy.log('9.1 No Datapoints'); - cy.visit('/'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); - metricsPage.shouldBeLoaded(); metricsPage.enterQueryInput(0, 'aaaaaaaaaa'); metricsPage.clickRunQueriesButton(); cy.byTestID(DataTestIDs.MetricGraphNoDatapointsFound).scrollIntoView().contains(MetricGraphEmptyState.NO_DATAPOINTS_FOUND).should('be.visible'); @@ -513,15 +488,12 @@ describe('Regression: Monitoring - Metrics', () => { }); - it('10. Admin perspective - Metrics > No Datapoints with alert', () => { + it(`${perspective.name} perspective - Metrics > No Datapoints with alert`, () => { cy.log('10.1 No Datapoints with alert'); - cy.visit('/'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); - metricsPage.shouldBeLoaded(); metricsPage.enterQueryInput(0, MetricsPageQueryInput.QUERY_WITH_ALERT); metricsPage.clickRunQueriesButton(); cy.byOUIAID(DataTestIDs.MetricsGraphAlertDanger).should('be.visible'); }); -}); +} diff --git a/web/cypress/e2e/monitoring/regression/03.reg_legacy_dashboards.cy.ts b/web/cypress/support/monitoring/03.reg_legacy_dashboards.cy.ts similarity index 72% rename from web/cypress/e2e/monitoring/regression/03.reg_legacy_dashboards.cy.ts rename to web/cypress/support/monitoring/03.reg_legacy_dashboards.cy.ts index be932da6..47a40eba 100644 --- a/web/cypress/e2e/monitoring/regression/03.reg_legacy_dashboards.cy.ts +++ b/web/cypress/support/monitoring/03.reg_legacy_dashboards.cy.ts @@ -1,33 +1,26 @@ -import { nav } from '../../../views/nav'; -import common = require('mocha/lib/interfaces/common'); -import { legacyDashboardsPage } from '../../../views/legacy-dashboards'; -import { API_PERFORMANCE_DASHBOARD_PANELS, LegacyDashboardsDashboardDropdown, MetricsPageQueryInput, WatchdogAlert } from '../../../fixtures/monitoring/constants'; -import { Classes, LegacyDashboardPageTestIDs, DataTestIDs } from '../../../../src/components/data-test'; -import { metricsPage } from '../../../views/metrics'; -import { alertingRuleDetailsPage } from '../../../views/alerting-rule-details-page'; -import { alerts } from '../../../fixtures/monitoring/alert'; -import { listPage } from '../../../views/list-page'; -import { commonPages } from '../../../views/common'; -// Set constants for the operators that need to be installed for tests. -const MP = { - namespace: 'openshift-monitoring', - operatorName: 'Cluster Monitoring Operator', -}; - -describe('Regression: Monitoring - Dashboards (Legacy)', () => { - - before(() => { - cy.beforeBlock(MP); - }); - - beforeEach(() => { - nav.sidenav.clickNavLink(['Observe', 'Alerting']); - cy.changeNamespace("All Projects"); - }); - - it('1. Admin perspective - Dashboards (legacy)', () => { +import { nav } from '../../views/nav'; +import { legacyDashboardsPage } from '../../views/legacy-dashboards'; +import { API_PERFORMANCE_DASHBOARD_PANELS, LegacyDashboardsDashboardDropdown, MetricsPageQueryInput, WatchdogAlert } from '../../fixtures/monitoring/constants'; +import { Classes, LegacyDashboardPageTestIDs, DataTestIDs } from '../../../src/components/data-test'; +import { metricsPage } from '../../views/metrics'; +import { alertingRuleDetailsPage } from '../../views/alerting-rule-details-page'; +import { alerts } from '../../fixtures/monitoring/alert'; +import { listPage } from '../../views/list-page'; +import { commonPages } from '../../views/common'; + +export interface PerspectiveConfig { + name: string; + beforeEach?: () => void; +} + +export function runAllRegressionLegacyDashboardsTests(perspective: PerspectiveConfig) { + testLegacyDashboardsRegression(perspective); +} + +export function testLegacyDashboardsRegression(perspective: PerspectiveConfig) { + + it(`${perspective.name} perspective - Dashboards (legacy)`, () => { cy.log('1.1 Dashboards page loaded'); - nav.sidenav.clickNavLink(['Observe', 'Dashboards']); legacyDashboardsPage.shouldBeLoaded(); cy.log('1.2 Time range dropdown'); @@ -51,9 +44,8 @@ describe('Regression: Monitoring - Dashboards (Legacy)', () => { }); - it('2. Admin perspective - Dashboards (legacy) - Inspect and Export as CSV', () => { + it(`${perspective.name} perspective - Dashboards (legacy) - Inspect and Export as CSV`, () => { cy.log('2.1 Kebab dropdown - Export as CSV'); - nav.sidenav.clickNavLink(['Observe', 'Dashboards']); legacyDashboardsPage.clickKebabDropdown(0); cy.byTestID(LegacyDashboardPageTestIDs.ExportAsCsv).should('be.visible'); cy.byPFRole('menuitem').should('not.have.attr', 'disabled'); @@ -65,32 +57,31 @@ describe('Regression: Monitoring - Dashboards (Legacy)', () => { legacyDashboardsPage.clickKebabDropdown(0); cy.byTestID(LegacyDashboardPageTestIDs.ExportAsCsv).should('be.visible'); cy.byPFRole('menuitem').should('have.attr', 'disabled'); - + }); - it('3. Admin perspective - Dashboards (legacy) - No kebab dropdown', () => { + it(`${perspective.name} perspective - Dashboards (legacy) - No kebab dropdown`, () => { cy.log('3.1 Single Stat - No kebab dropdown'); - nav.sidenav.clickNavLink(['Observe', 'Dashboards']); legacyDashboardsPage.clickDashboardDropdown('K8S_COMPUTE_RESOURCES_NAMESPACE_PODS'); - cy.byLegacyTestID('chart-1').find('[data-test="'+DataTestIDs.KebabDropdownButton+'"]').should('not.exist'); + cy.byLegacyTestID('chart-1').find('[data-test="' + DataTestIDs.KebabDropdownButton + '"]').should('not.exist'); cy.log('3.2 Table - No kebab dropdown'); legacyDashboardsPage.clickDashboardDropdown('PROMETHEUS_OVERVIEW'); - cy.byLegacyTestID('chart-1').find('[data-test="'+DataTestIDs.KebabDropdownButton+'"]').should('not.exist'); + cy.byLegacyTestID('chart-1').find('[data-test="' + DataTestIDs.KebabDropdownButton + '"]').should('not.exist'); }); - it('4. Admin perspective - OU-897 - Hide Graph / Show Graph on Metrics, Alert Details and Dashboards', () => { + it(`${perspective.name} perspective - OU-897 - Hide Graph / Show Graph on Metrics, Alert Details and Dashboards`, () => { cy.log('4.1 Observe > Metrics > Hide Graph'); nav.sidenav.clickNavLink(['Observe', 'Metrics']); metricsPage.shouldBeLoaded(); metricsPage.clickHideGraphButton(); cy.byTestID(DataTestIDs.MetricGraph).should('not.exist'); - + cy.log('4.2 Observe > Dashboards - Verify graph is visible'); nav.sidenav.clickNavLink(['Observe', 'Dashboards']); cy.byTestID(DataTestIDs.MetricGraph).should('be.visible'); - + cy.log('4.3 Observe > Alerting rule details - Verify graph is visible'); alerts.getWatchdogAlert(); nav.sidenav.clickNavLink(['Observe', 'Alerting']); @@ -121,16 +112,15 @@ describe('Regression: Monitoring - Dashboards (Legacy)', () => { cy.byTestID(DataTestIDs.MetricGraph).should('be.visible'); cy.byTestID(DataTestIDs.MetricHideShowGraphButton).contains('Hide graph').should('be.visible').click(); cy.byTestID(DataTestIDs.MetricGraph).should('not.exist'); - + cy.log('4.5 Observe > Metrics > Hide Graph'); nav.sidenav.clickNavLink(['Observe', 'Metrics']); metricsPage.shouldBeLoaded(); - + cy.log('4.6 Observe > Dashboards - Verify graph is visible'); nav.sidenav.clickNavLink(['Observe', 'Dashboards']); cy.byTestID(DataTestIDs.MetricGraph).should('be.visible'); }); -}); - +} \ No newline at end of file diff --git a/web/cypress/e2e/monitoring/regression/04.reg_alerts_namespace.cy.ts b/web/cypress/support/monitoring/04.reg_alerts_namespace.cy.ts similarity index 85% rename from web/cypress/e2e/monitoring/regression/04.reg_alerts_namespace.cy.ts rename to web/cypress/support/monitoring/04.reg_alerts_namespace.cy.ts index d6428457..5a749d62 100644 --- a/web/cypress/e2e/monitoring/regression/04.reg_alerts_namespace.cy.ts +++ b/web/cypress/support/monitoring/04.reg_alerts_namespace.cy.ts @@ -1,40 +1,27 @@ -import { commonPages } from '../../../views/common'; -import { detailsPage } from '../../../views/details-page'; -import { listPage } from '../../../views/list-page'; -import { silenceAlertPage } from '../../../views/silence-alert-page'; -import { nav } from '../../../views/nav'; -import { silenceDetailsPage } from '../../../views/silence-details-page'; -import { silencesListPage } from '../../../views/silences-list-page'; -import { alertingRuleListPage } from '../../../views/alerting-rule-list-page'; -import { alertingRuleDetailsPage } from '../../../views/alerting-rule-details-page'; -import { alerts } from '../../../fixtures/monitoring/alert'; -import { AlertingRulesAlertState, MainTagState, Severity, SilenceState, Source, SilenceComment, WatchdogAlert } from '../../../fixtures/monitoring/constants'; -import { Classes } from "../../../../src/components/data-test"; - -// -import common = require('mocha/lib/interfaces/common'); -// Set constants for the operators that need to be installed for tests. -const MP = { - namespace: 'openshift-monitoring', - operatorName: 'Cluster Monitoring Operator', -}; - -describe('Regression: Monitoring - Alerts - namespaced', () => { - - before(() => { - cy.beforeBlock(MP); - }); - - beforeEach(() => { - nav.sidenav.clickNavLink(['Observe', 'Alerting']); - cy.changeNamespace(MP.namespace); - }); - - it('1. Admin perspective - Alerting > Alerts page - Filtering', () => { +import { commonPages } from '../../views/common'; +import { detailsPage } from '../../views/details-page'; +import { listPage } from '../../views/list-page'; +import { silenceAlertPage } from '../../views/silence-alert-page'; +import { nav } from '../../views/nav'; +import { silenceDetailsPage } from '../../views/silence-details-page'; +import { silencesListPage } from '../../views/silences-list-page'; +import { alertingRuleListPage } from '../../views/alerting-rule-list-page'; +import { alertingRuleDetailsPage } from '../../views/alerting-rule-details-page'; +import { AlertingRulesAlertState, MainTagState, Severity, SilenceState, Source, SilenceComment, WatchdogAlert } from '../../fixtures/monitoring/constants'; +import { Classes } from "../../../src/components/data-test"; + +export interface PerspectiveConfig { + name: string; + beforeEach?: () => void; +} + +export function runAllRegressionAlertsTestsNamespace(perspective: PerspectiveConfig) { + testAlertsRegressionNamespace(perspective); +} + +export function testAlertsRegressionNamespace(perspective: PerspectiveConfig) { + it(`${perspective.name} perspective - Alerting > Alerts page - Filtering`, () => { cy.log('1.1 Header components'); - - nav.sidenav.clickNavLink(['Observe', 'Alerting']); - alerts.getWatchdogAlert(); listPage.filter.selectFilterOption(true, AlertingRulesAlertState.PENDING, false); cy.get(Classes.FilterDropdownOption).should('not.contain', Source.USER); cy.get(Classes.FilterDropdownOption).should('not.contain', Source.PLATFORM); @@ -58,9 +45,8 @@ describe('Regression: Monitoring - Alerts - namespaced', () => { }); - it('2. Admin perspective - Alerting > Silences page > Create silence', () => { + it(`${perspective.name} perspective - Alerting > Silences page > Create silence`, () => { cy.log('2.1 use sidebar nav to go to Observe > Alerting'); - nav.sidenav.clickNavLink(['Observe', 'Alerting']); nav.tabs.switchTab('Silences'); silencesListPage.createSilence(); commonPages.projectDropdownShouldExist(); @@ -75,12 +61,8 @@ describe('Regression: Monitoring - Alerts - namespaced', () => { }); - it('3. Admin perspective - Alerting > Alerts / Silences > Kebab icon on List and Details', () => { - cy.visit('/'); + it(`${perspective.name} perspective - Alerting > Alerts / Silences > Kebab icon on List and Details`, () => { cy.log('3.1 use sidebar nav to go to Observe > Alerting'); - nav.sidenav.clickNavLink(['Observe', 'Alerting']); - alerts.getWatchdogAlert(); - listPage.ARRows.shouldBeLoaded(); cy.log('3.2 filter to Watchdog alert'); listPage.filter.byName(`${WatchdogAlert.ALERTNAME}`); @@ -128,6 +110,7 @@ describe('Regression: Monitoring - Alerts - namespaced', () => { cy.changeNamespace('openshift-monitoring'); cy.log('3.8 Assert Kebab on Silence List page for Expired alert'); + silencesListPage.filter.byName(`${WatchdogAlert.ALERTNAME}`); silencesListPage.emptyState(); listPage.filter.removeMainTag(MainTagState.SILENCE_STATE); listPage.filter.selectFilterOption(true, SilenceState.EXPIRED, false); @@ -201,9 +184,8 @@ describe('Regression: Monitoring - Alerts - namespaced', () => { listPage.ARRows.countShouldBe(1); }); - it('4. Admin perspective - Alerting > Alerting Rules', () => { + it(`${perspective.name} perspective - Alerting > Alerting Rules`, () => { cy.log('4.1 use sidebar nav to go to Observe > Alerting'); - nav.sidenav.clickNavLink(['Observe', 'Alerting']); nav.tabs.switchTab('Alerting rules'); alertingRuleListPage.shouldBeLoaded(); @@ -278,9 +260,8 @@ describe('Regression: Monitoring - Alerts - namespaced', () => { }); - it('5. Admin perspective - Alerting > Empty state', () => { + it(`${perspective.name} perspective - Alerting > Empty state`, () => { cy.log('5.1 Empty state'); - nav.sidenav.clickNavLink(['Observe', 'Alerting']); cy.changeNamespace("default"); listPage.emptyState(); nav.tabs.switchTab('Silences'); @@ -290,4 +271,4 @@ describe('Regression: Monitoring - Alerts - namespaced', () => { }); -}); +} diff --git a/web/cypress/e2e/monitoring/regression/05.reg_metrics_namespace.cy.ts b/web/cypress/support/monitoring/05.reg_metrics_namespace.cy.ts similarity index 88% rename from web/cypress/e2e/monitoring/regression/05.reg_metrics_namespace.cy.ts rename to web/cypress/support/monitoring/05.reg_metrics_namespace.cy.ts index 0d070e19..f5e52497 100644 --- a/web/cypress/e2e/monitoring/regression/05.reg_metrics_namespace.cy.ts +++ b/web/cypress/support/monitoring/05.reg_metrics_namespace.cy.ts @@ -1,28 +1,20 @@ -import { nav } from '../../../views/nav'; -import { metricsPage } from '../../../views/metrics'; -import { Classes, DataTestIDs, IDs } from '../../../../src/components/data-test'; -import { GraphTimespan, MetricGraphEmptyState, MetricsPagePredefinedQueries, MetricsPageQueryInput, MetricsPageQueryKebabDropdown, MetricsPageQueryInputByNamespace } from '../../../fixtures/monitoring/constants'; -import common = require('mocha/lib/interfaces/common'); -// Set constants for the operators that need to be installed for tests. -const MP = { - namespace: 'openshift-monitoring', - operatorName: 'Cluster Monitoring Operator', -}; - -describe('Regression: Monitoring - Metrics - namespaced', () => { - - before(() => { - cy.beforeBlock(MP); - }); - - beforeEach(() => { - nav.sidenav.clickNavLink(['Observe', 'Metrics']); - cy.changeNamespace(MP.namespace); - }); - - it('1. Admin perspective - Metrics', () => { +import { nav } from '../../views/nav'; +import { metricsPage } from '../../views/metrics'; +import { Classes, DataTestIDs, IDs } from '../../../src/components/data-test'; +import { GraphTimespan, MetricGraphEmptyState, MetricsPagePredefinedQueries, MetricsPageQueryInput, MetricsPageQueryKebabDropdown, MetricsPageQueryInputByNamespace } from '../../fixtures/monitoring/constants'; + +export interface PerspectiveConfig { + name: string; + beforeEach?: () => void; +} + +export function runAllRegressionMetricsTestsNamespace(perspective: PerspectiveConfig) { + testMetricsRegressionNamespace(perspective); +} + +export function testMetricsRegressionNamespace(perspective: PerspectiveConfig) { + it(`${perspective.name} perspective - Metrics`, () => { cy.log('1.1 Metrics page loaded'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); metricsPage.shouldBeLoaded(); cy.log('1.2 Units dropdown'); @@ -42,10 +34,8 @@ describe('Regression: Monitoring - Metrics - namespaced', () => { }); - it('2. Admin perspective - Metrics > Actions - No query added', () => { + it(`${perspective.name} perspective - Metrics > Actions - No query added`, () => { cy.log('2.1 Only one query loaded'); - cy.visit('/'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); cy.byTestID(DataTestIDs.MetricsPageExpandCollapseRowButton).should('have.length', 1); cy.log('2.2 Actions >Add query'); @@ -83,10 +73,8 @@ describe('Regression: Monitoring - Metrics - namespaced', () => { }); - it('3. Admin perspective - Metrics > Actions - One query added', () => { + it(`${perspective.name} perspective - Metrics > Actions - One query added`, () => { cy.log('3.1 Only one query loaded'); - cy.visit('/'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); metricsPage.clickPredefinedQuery(MetricsPagePredefinedQueries.FILESYSTEM_USAGE); metricsPage.shouldBeLoadedWithGraph(); @@ -140,10 +128,8 @@ describe('Regression: Monitoring - Metrics - namespaced', () => { }); - it('4. Admin perspective - Metrics > Insert Example Query', () => { + it(`${perspective.name} perspective - Metrics > Insert Example Query`, () => { cy.log('4.1 Insert Example Query'); - cy.visit('/'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); metricsPage.clickInsertExampleQuery(); metricsPage.shouldBeLoadedWithGraph(); cy.get(Classes.MetricsPageQueryInput).eq(0).should('contain', MetricsPageQueryInput.INSERT_EXAMPLE_QUERY); @@ -207,7 +193,7 @@ describe('Regression: Monitoring - Metrics - namespaced', () => { /** * TODO: uncomment when this bug gets fixed * https://issues.redhat.com/browse/OU-974 - [Metrics] - Units - undefined showing in Y axis and tooltip - it('5. Admin perspective - Metrics > Units', () => { + it(`${perspective.name} perspective - Metrics > Units`, () => { cy.log('5.1 Preparation to test Units dropdown'); cy.visit('/monitoring/query-browser'); metricsPage.clickInsertExampleQuery(); @@ -221,10 +207,8 @@ describe('Regression: Monitoring - Metrics - namespaced', () => { }); */ - it('6. Admin perspective - Metrics > Add Query - Run Queries - Kebab icon', () => { + it(`${perspective.name} perspective - Metrics > Add Query - Run Queries - Kebab icon`, () => { cy.log('6.1 Preparation to test Add Query button'); - cy.visit('/'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); metricsPage.shouldBeLoaded(); cy.byTestID(DataTestIDs.MetricsPageExpandCollapseRowButton).should('have.length', 1); metricsPage.clickInsertExampleQuery(); @@ -416,12 +400,9 @@ describe('Regression: Monitoring - Metrics - namespaced', () => { cy.byTestID(DataTestIDs.MetricsPageExportCsvDropdownItem).should('not.exist'); }); - it('7. Admin perspective - Metrics > Predefined Queries > Export as CSV', () => { + it(`${perspective.name} perspective - Metrics > Predefined Queries > Export as CSV`, () => { //OCPBUGS-54316 - [4.16] Metrics "Export as CSV" is not working for all queries cy.log('7.1 Predefined Queries'); - cy.visit('/'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); - metricsPage.shouldBeLoaded(); metricsPage.clickPredefinedQuery(MetricsPagePredefinedQueries.CPU_USAGE); metricsPage.clickKebabDropdown(0); metricsPage.exportAsCSV(true, MetricsPageQueryInputByNamespace.CPU_USAGE); @@ -477,29 +458,8 @@ describe('Regression: Monitoring - Metrics - namespaced', () => { }); - it('8. Admin perspective - Metrics > Ungraphable results', () => { - cy.log('8.1 Ungraphable results'); - cy.visit('/'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); - metricsPage.shouldBeLoaded(); - metricsPage.clickPredefinedQuery(MetricsPagePredefinedQueries.CPU_USAGE); - metricsPage.clickPredefinedQuery(MetricsPagePredefinedQueries.MEMORY_USAGE); - metricsPage.clickPredefinedQuery(MetricsPagePredefinedQueries.FILESYSTEM_USAGE); - metricsPage.clickPredefinedQuery(MetricsPagePredefinedQueries.RECEIVE_BANDWIDTH); - metricsPage.clickPredefinedQuery(MetricsPagePredefinedQueries.TRANSMIT_BANDWIDTH); - metricsPage.clickPredefinedQuery(MetricsPagePredefinedQueries.RATE_OF_RECEIVED_PACKETS); - cy.byLegacyTestID('namespace-bar-dropdown').find('button').scrollIntoView(); - - cy.get(Classes.MetricsPageUngraphableResults).should('not.exist'); - cy.get(Classes.MetricsPageUngraphableResultsDescription).should('not.exist'); - - }); - - it('9. Admin perspective - Metrics > No Datapoints', () => { + it(`${perspective.name} perspective - Metrics > No Datapoints`, () => { cy.log('9.1 No Datapoints'); - cy.visit('/'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); - metricsPage.shouldBeLoaded(); metricsPage.enterQueryInput(0, 'aaaaaaaaaa'); metricsPage.clickRunQueriesButton(); metricsPage.noDatapointsFound(); @@ -511,20 +471,15 @@ describe('Regression: Monitoring - Metrics - namespaced', () => { }); - it('10. Admin perspective - Metrics > No Datapoints with alert', () => { + it(`${perspective.name} perspective - Metrics > No Datapoints with alert`, () => { cy.log('10.1 No Datapoints with alert'); - cy.visit('/'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); - metricsPage.shouldBeLoaded(); metricsPage.enterQueryInput(0, MetricsPageQueryInput.QUERY_WITH_ALERT); metricsPage.clickRunQueriesButton(); cy.byOUIAID(DataTestIDs.MetricsGraphAlertDanger).should('be.visible'); }); - it('11. Admin perspective - Metrics > Empty state', () => { + it(`${perspective.name} perspective - Metrics > Empty state`, () => { cy.log('11.1 Insert example query - Empty state'); - cy.visit('/'); - nav.sidenav.clickNavLink(['Observe', 'Metrics']); cy.changeNamespace("default"); metricsPage.clickInsertExampleQuery(); metricsPage.noDatapointsFound(); @@ -536,5 +491,5 @@ describe('Regression: Monitoring - Metrics - namespaced', () => { }); -}); +} diff --git a/web/cypress/e2e/monitoring/regression/06.reg_legacy_dashboards_namespace.cy.ts b/web/cypress/support/monitoring/06.reg_legacy_dashboards_namespace.cy.ts similarity index 75% rename from web/cypress/e2e/monitoring/regression/06.reg_legacy_dashboards_namespace.cy.ts rename to web/cypress/support/monitoring/06.reg_legacy_dashboards_namespace.cy.ts index 42000292..24c2828d 100644 --- a/web/cypress/e2e/monitoring/regression/06.reg_legacy_dashboards_namespace.cy.ts +++ b/web/cypress/support/monitoring/06.reg_legacy_dashboards_namespace.cy.ts @@ -1,33 +1,26 @@ -import { nav } from '../../../views/nav'; -import common = require('mocha/lib/interfaces/common'); -import { legacyDashboardsPage } from '../../../views/legacy-dashboards'; -import { KUBERNETES_COMPUTE_RESOURCES_NAMESPACE_PODS_PANELS, LegacyDashboardsDashboardDropdownNamespace, MetricsPageQueryInput, MetricsPageQueryInputByNamespace, WatchdogAlert } from '../../../fixtures/monitoring/constants'; -import { Classes, LegacyDashboardPageTestIDs, DataTestIDs } from '../../../../src/components/data-test'; -import { metricsPage } from '../../../views/metrics'; -import { alertingRuleDetailsPage } from '../../../views/alerting-rule-details-page'; -import { alerts } from '../../../fixtures/monitoring/alert'; -import { listPage } from '../../../views/list-page'; -import { commonPages } from '../../../views/common'; -// Set constants for the operators that need to be installed for tests. -const MP = { - namespace: 'openshift-monitoring', - operatorName: 'Cluster Monitoring Operator', -}; - -describe('Regression: Monitoring - Dashboards (Legacy) - namespaced', () => { - - before(() => { - cy.beforeBlock(MP); - }); - - beforeEach(() => { - nav.sidenav.clickNavLink(['Observe', 'Dashboards']); - cy.changeNamespace(MP.namespace); - }); - - it('1. Admin perspective - Dashboards (legacy)', () => { +import { nav } from '../../views/nav'; +import { legacyDashboardsPage } from '../../views/legacy-dashboards'; +import { KUBERNETES_COMPUTE_RESOURCES_NAMESPACE_PODS_PANELS, LegacyDashboardsDashboardDropdownNamespace, MetricsPageQueryInput, MetricsPageQueryInputByNamespace, WatchdogAlert } from '../../fixtures/monitoring/constants'; +import { Classes, LegacyDashboardPageTestIDs, DataTestIDs } from '../../../src/components/data-test'; +import { metricsPage } from '../../views/metrics'; +import { alertingRuleDetailsPage } from '../../views/alerting-rule-details-page'; +import { alerts } from '../../fixtures/monitoring/alert'; +import { listPage } from '../../views/list-page'; +import { commonPages } from '../../views/common'; + +export interface PerspectiveConfig { + name: string; + beforeEach?: () => void; +} + +export function runAllRegressionLegacyDashboardsTestsNamespace(perspective: PerspectiveConfig) { + testLegacyDashboardsRegressionNamespace(perspective); +} + +export function testLegacyDashboardsRegressionNamespace(perspective: PerspectiveConfig) { + + it(`${perspective.name} perspective - Dashboards (legacy)`, () => { cy.log('1.1 Dashboards page loaded'); - nav.sidenav.clickNavLink(['Observe', 'Dashboards']); legacyDashboardsPage.shouldBeLoaded(); cy.log('1.2 Time range dropdown'); @@ -51,9 +44,8 @@ describe('Regression: Monitoring - Dashboards (Legacy) - namespaced', () => { }); - it('2. Admin perspective - Dashboards (legacy) - Export as CSV', () => { + it(`${perspective.name} perspective - Dashboards (legacy) - Export as CSV`, () => { cy.log('2.1 Kebab dropdown - Export as CSV'); - nav.sidenav.clickNavLink(['Observe', 'Dashboards']); legacyDashboardsPage.clickKebabDropdown(0); cy.byTestID(LegacyDashboardPageTestIDs.ExportAsCsv).should('be.visible'); cy.byPFRole('menuitem').should('not.have.attr', 'disabled'); @@ -68,7 +60,7 @@ describe('Regression: Monitoring - Dashboards (Legacy) - namespaced', () => { }); - it('3. Admin perspective - Dashboards (legacy) - No kebab dropdown', () => { + it(`${perspective.name} perspective - Dashboards (legacy) - No kebab dropdown`, () => { cy.log('3.1 Single Stat - No kebab dropdown'); cy.byLegacyTestID('chart-1').find('[data-test="'+DataTestIDs.KebabDropdownButton+'"]').should('not.exist'); @@ -77,7 +69,7 @@ describe('Regression: Monitoring - Dashboards (Legacy) - namespaced', () => { }); - it('4. Admin perspective - OU-897 - Hide Graph / Show Graph on Metrics, Alert Details and Dashboards', () => { + it(`${perspective.name} perspective - OU-897 - Hide Graph / Show Graph on Metrics, Alert Details and Dashboards`, () => { cy.log('4.1 Observe > Metrics > Hide Graph'); nav.sidenav.clickNavLink(['Observe', 'Metrics']); metricsPage.shouldBeLoaded(); @@ -123,5 +115,4 @@ describe('Regression: Monitoring - Dashboards (Legacy) - namespaced', () => { }); -}); - +} \ No newline at end of file diff --git a/web/cypress/views/list-page.ts b/web/cypress/views/list-page.ts index 706ae1a2..876c8ce2 100644 --- a/web/cypress/views/list-page.ts +++ b/web/cypress/views/list-page.ts @@ -83,7 +83,7 @@ export const listPage = { cy.byLegacyTestID(LegacyTestIDs.ItemFilter).scrollIntoView() .as('input').should('be.visible'); cy.get('@input', { timeout: 10000 }).scrollIntoView().type(label + '{enter}').should('have.attr', 'value', label); - cy.get(Classes.LabelSuggestion).contains(label).click(); + cy.byTestID(DataTestIDs.LabelSuggestion).contains(label).click(); }, clearAllFilters: () => { diff --git a/web/cypress/views/metrics.ts b/web/cypress/views/metrics.ts index 5f65dc08..5acff540 100644 --- a/web/cypress/views/metrics.ts +++ b/web/cypress/views/metrics.ts @@ -147,7 +147,7 @@ export const metricsPage = { clickAddQueryButton: () => { cy.log('metricsPage.clickAddQuery'); - cy.byTestID(DataTestIDs.MetricsPageAddQueryButton).click(); + cy.byTestID(DataTestIDs.MetricsPageAddQueryButton).scrollIntoView().click(); metricsPage.addQueryAssertion(); }, diff --git a/web/src/components/data-test.ts b/web/src/components/data-test.ts index 0b8223cd..4138c945 100644 --- a/web/src/components/data-test.ts +++ b/web/src/components/data-test.ts @@ -11,6 +11,7 @@ export const DataTestIDs = { AlertingRuleSeverityBadge: 'alerting-rule-severity-badge', AlertingRuleStateBadge: 'alerting-rule-state-badge', AlertingRuleTotalAlertsBadge: 'alerting-rule-total-alerts-badge', + LabelSuggestion: 'suggestion-line', CancelButton: 'cancel-button', Breadcrumb: 'breadcrumb', DownloadCSVButton: 'download-csv-button', @@ -176,7 +177,6 @@ export const Classes = { '.pf-v6-c-alert.pf-m-inline.pf-m-plain.pf-m-info, .pf-v5-c-alert.pf-m-inline.pf-m-plain.pf-m-info.query-browser__reduced-resolution', HorizontalNav: '.pf-v6-c-tabs__item, .co-m-horizontal-nav__menu-item', IndividualTag: '.pf-v6-c-label__text, .pf-v5-c-chip__text', - LabelSuggestion: '.pf-v6-c-label__content.pf-m-clickable, .co-suggestion-line', LabelTag: '.pf-v6-c-label__text, .pf-v5-c-label__text', MainTag: '.pf-v6-c-label-group__label, .pf-v5-c-chip-group__label', MenuItem: '.pf-v6-c-menu__item, .pf-c-dropdown__menu-item',