diff --git a/web/cypress/integration-tests/dns_dashboards.cy.ts b/web/cypress/integration-tests/dns_dashboards.cy.ts index 94cba9ec8..e9e9cf396 100644 --- a/web/cypress/integration-tests/dns_dashboards.cy.ts +++ b/web/cypress/integration-tests/dns_dashboards.cy.ts @@ -57,7 +57,7 @@ describe('(OCP-67087 Network_Observability) DNSTracking test', { tags: ['Network cy.contains('Display options').should('exist').click() cy.get('[data-test-id=edge-handler]').should('exist').each((g) => { - expect(g.text()).to.match(/\d* ms/gm); + expect(g.text()).to.match(/\d+\s*ms/); }); // verify Query Summary stats for DNSTracking diff --git a/web/cypress/integration-tests/dns_tracking.cy.ts b/web/cypress/integration-tests/dns_tracking.cy.ts index a8728b17d..b60e99848 100644 --- a/web/cypress/integration-tests/dns_tracking.cy.ts +++ b/web/cypress/integration-tests/dns_tracking.cy.ts @@ -23,7 +23,7 @@ describe('(OCP-67087 Network_Observability) DNSTracking test', { tags: ['Network // open panels modal and verify all relevant panels are listed cy.openPanelsModal() - cy.checkPopupItems(overviewSelectors.panelsModal, overviewSelectors.manageDNSTrackingPanelsList); + cy.checkPopItems(overviewSelectors.panelsModal, overviewSelectors.manageDNSTrackingPanelsList); // select all panels and verify they are rendered cy.get(overviewSelectors.panelsModal).contains('Select all').click(); diff --git a/web/cypress/integration-tests/flowRTT.cy.ts b/web/cypress/integration-tests/flowRTT.cy.ts index 05e6a2d9c..66957f172 100644 --- a/web/cypress/integration-tests/flowRTT.cy.ts +++ b/web/cypress/integration-tests/flowRTT.cy.ts @@ -34,7 +34,7 @@ describe('(OCP-68246 Network_Observability) FlowRTT test', { tags: ['Network_Obs // verify all relevant panels are listed cy.openPanelsModal() - cy.checkPopupItems(overviewSelectors.panelsModal, overviewSelectors.manageFlowRTTPanelsList); + cy.checkPopItems(overviewSelectors.panelsModal, overviewSelectors.manageFlowRTTPanelsList); // select all panels and verify they are rendered cy.get(overviewSelectors.panelsModal).contains('Select all').click(); diff --git a/web/cypress/integration-tests/flowRTT_dashboards.cy.ts b/web/cypress/integration-tests/flowRTT_dashboards.cy.ts index 8a0e832c2..dee4b4e7e 100644 --- a/web/cypress/integration-tests/flowRTT_dashboards.cy.ts +++ b/web/cypress/integration-tests/flowRTT_dashboards.cy.ts @@ -56,7 +56,7 @@ describe('(OCP-68246 Network_Observability) FlowRTT test', { tags: ['Network_Obs cy.get(filterSelectors.filterInput).type("protocol=TCP" + '{enter}').click() cy.get('[data-test-id=edge-handler]').each((g) => { - expect(g.text()).to.match(/\d* ms/gm); + expect(g.text()).to.match(/\d+\s*ms/); }); netflowPage.clearAllFilters() diff --git a/web/cypress/integration-tests/health_dashboards.cy.ts b/web/cypress/integration-tests/health_dashboards.cy.ts index df13acb26..d8a304f9d 100644 --- a/web/cypress/integration-tests/health_dashboards.cy.ts +++ b/web/cypress/integration-tests/health_dashboards.cy.ts @@ -2,7 +2,6 @@ import { Operator } from "@views/netobserv" import { dashboard, dashboardSelectors } from "@views/dashboards-page" const healthPanels = [ - "flows-per-second-chart", "global-sampling-chart", "errors-last-minute-chart", "dropped-flows-per-second-chart" diff --git a/web/cypress/integration-tests/ingress_dashboard.cy.ts b/web/cypress/integration-tests/ingress_dashboard.cy.ts index 8f4787143..ee9549a9d 100644 --- a/web/cypress/integration-tests/ingress_dashboard.cy.ts +++ b/web/cypress/integration-tests/ingress_dashboard.cy.ts @@ -24,7 +24,7 @@ describe('Network_Observability networking dashboards tests', { tags: ['Network_ dashboard.visit() cy.visit(`/monitoring/dashboards/grafana-dashboard-ingress-operator`) - cy.get('[data-test="poll-interval-dropdown"] > .pf-v5-c-menu-toggle').should('exist').then(btn => { + cy.get('[data-test="poll-interval-dropdown"] > .pf-v6-c-menu-toggle').should('exist').then(btn => { cy.wrap(btn).click().then(drop => { cy.contains('15 seconds').should('exist').click() }) diff --git a/web/cypress/integration-tests/netflow_conversations.cy.ts b/web/cypress/integration-tests/netflow_conversations.cy.ts index 034f1819d..d09cd067d 100644 --- a/web/cypress/integration-tests/netflow_conversations.cy.ts +++ b/web/cypress/integration-tests/netflow_conversations.cy.ts @@ -26,10 +26,7 @@ describe('(OCP-71787 Network_Observability) Conversation tracking test', { tags: }) it("(OCP-71787, aramesha, Network_Observability) should verify Query Summary panel", function () { - cy.get('#filter-toolbar-search-filters').contains('Query options').click(); - cy.get('#query-options-dropdown').click(); - cy.get('#recordType-allConnections').click() - cy.get('#filter-toolbar-search-filters').contains('Query options').click(); + cy.changeQueryOption('Conversation') // validate Query Summary panel let warningExists = false diff --git a/web/cypress/integration-tests/netflow_export.cy.ts b/web/cypress/integration-tests/netflow_export.cy.ts index 6882ab739..923a8e554 100644 --- a/web/cypress/integration-tests/netflow_export.cy.ts +++ b/web/cypress/integration-tests/netflow_export.cy.ts @@ -39,7 +39,7 @@ describe('(OCP-72610 Network_Observability) Export automation', { tags: ['Networ cy.byTestID("table-composable").should('exist') cy.showAdvancedOptions(); cy.get('#export-button').should('exist').click() - cy.get('.footer > [data-test="export-button"]').should('exist').then((exportbtn) => { + cy.get('[data-test="export-modal-footer"] > [data-test="export-button"]').should('exist').then((exportbtn) => { cy.wrap(exportbtn).click() // wait for download to complete cy.wait(3000) diff --git a/web/cypress/integration-tests/netflow_external_subnet.cy.ts b/web/cypress/integration-tests/netflow_external_subnet.cy.ts index 779addb35..9a18d2bef 100644 --- a/web/cypress/integration-tests/netflow_external_subnet.cy.ts +++ b/web/cypress/integration-tests/netflow_external_subnet.cy.ts @@ -62,7 +62,7 @@ describe('(OCP-67615, OCP-72874 Network_Observability) Return external traffic a }) after("all tests", function () { - cy.adminCLI('oc delete -f cypress/fixtures/test-pod.yaml') + cy.adminCLI('oc delete -f cypress/fixtures/test-pod.yaml --ignore-not-found') Operator.deleteFlowCollector() cy.adminCLI(`oc adm policy remove-cluster-role-from-user cluster-admin ${Cypress.env('LOGIN_USERNAME')}`) }) diff --git a/web/cypress/integration-tests/network_health.cy.ts b/web/cypress/integration-tests/network_health.cy.ts index 6d2745ebf..af990448c 100644 --- a/web/cypress/integration-tests/network_health.cy.ts +++ b/web/cypress/integration-tests/network_health.cy.ts @@ -81,7 +81,7 @@ describe('(OCP-84821 Network_Observability) Network Health test', { tags: ['Netw }) after("any test", function () { - cy.adminCLI('oc delete -f cypress/fixtures/dns_errors.yaml') + cy.adminCLI('oc delete -f cypress/fixtures/dns_errors.yaml --ignore-not-found') Operator.deleteFlowCollector() cy.adminCLI(`oc adm policy remove-cluster-role-from-user cluster-admin ${Cypress.env('LOGIN_USERNAME')}`) }) diff --git a/web/cypress/integration-tests/overview_page.cy.ts b/web/cypress/integration-tests/overview_page.cy.ts index 37cda51d4..933811db0 100644 --- a/web/cypress/integration-tests/overview_page.cy.ts +++ b/web/cypress/integration-tests/overview_page.cy.ts @@ -90,7 +90,7 @@ describe('(OCP-54839 Network_Observability) Netflow Overview page tests', { tags // verify single focus graph toggle cy.get('#focus-switch').check() // verify 'Top 5 average bytes rates' panel is in focus - cy.get('#overview-absolute-graph').contains('Top 5 average bytes rates'); + cy.get('#overview-sticky-graph').contains('Top 5 average bytes rates'); cy.get('[data-test-metrics]').its('length').should('gt', 0); // verify other panels are scrollable on the right @@ -108,7 +108,7 @@ describe('(OCP-54839 Network_Observability) Netflow Overview page tests', { tags cy.openPanelsModal(); // verify all panels are listed - cy.checkPopupItems(overviewSelectors.panelsModal, overviewSelectors.managePanelsList); + cy.checkPopItems(overviewSelectors.panelsModal, overviewSelectors.managePanelsList); // select all panels cy.get(overviewSelectors.panelsModal).contains('Select all').click(); @@ -126,7 +126,7 @@ describe('(OCP-54839 Network_Observability) Netflow Overview page tests', { tags cy.get(overviewSelectors.panelsModal).contains('Save').should('be.disabled'); // select 1 panel and verify its visible on console - cy.selectPopupItems(overviewSelectors.panelsModal, ['Top X average packets rates (donut)']); + cy.get('.pf-v5-c-data-list__check > #top_avg_packet_rates').click(); cy.get(overviewSelectors.panelsModal).contains('Save').click(); netflowPage.waitForLokiQuery() cy.checkPanel([overviewSelectors.allPanels[2]]) diff --git a/web/cypress/integration-tests/packet_drop.cy.ts b/web/cypress/integration-tests/packet_drop.cy.ts index 4a9b3a69c..a0b9275f2 100644 --- a/web/cypress/integration-tests/packet_drop.cy.ts +++ b/web/cypress/integration-tests/packet_drop.cy.ts @@ -27,7 +27,7 @@ describe('(OCP-66141 Network_Observability) PacketDrop test', { tags: ['Network_ // open panels modal and verify all relevant panels are listed cy.openPanelsModal(); - cy.checkPopupItems(overviewSelectors.panelsModal, overviewSelectors.managePacketDropPanelsList); + cy.checkPopItems(overviewSelectors.panelsModal, overviewSelectors.managePacketDropPanelsList); // select all panels and verify they are rendered cy.get(overviewSelectors.panelsModal).contains('Select all').click(); diff --git a/web/cypress/integration-tests/prom_datasource_only.cy.ts b/web/cypress/integration-tests/prom_datasource_only.cy.ts index 7fa3cb9b0..35b6a7619 100644 --- a/web/cypress/integration-tests/prom_datasource_only.cy.ts +++ b/web/cypress/integration-tests/prom_datasource_only.cy.ts @@ -17,12 +17,12 @@ describe('(OCP-74049, OCP-73875 Network_Observability) Prometheus datasource onl cy.checkNetflowTraffic("Disabled") // verify only prom and auto dataSource is enabled in query options - cy.get('#filter-toolbar-search-filters').contains('Query options').click(); - cy.get('#query-options-dropdown').click(); + cy.byTestID('query-options-dropdown').click(); + cy.get('#query-options-popper').click(); cy.get('#dataSource-loki').should('be.disabled') cy.get('#dataSource-prom').should('not.be.disabled') cy.get('#dataSource-auto').should('not.be.disabled') - cy.get('#filter-toolbar-search-filters').contains('Query options').click(); + cy.byTestID('query-options-dropdown').click(); // verify resource scope is not observed with prom dataSource cy.byTestID("show-view-options-button").should('exist').click().then(views => { diff --git a/web/cypress/integration-tests/static_plugin.cy.ts b/web/cypress/integration-tests/static_plugin.cy.ts index e8b29d98f..dae8f6f16 100644 --- a/web/cypress/integration-tests/static_plugin.cy.ts +++ b/web/cypress/integration-tests/static_plugin.cy.ts @@ -21,7 +21,7 @@ describe('(OCP-84156 Network_Observability) StaticPlugin test', { tags: ['Networ cy.get(pluginSelectors.update).click() // Wait for flowcollector to get ready cy.wait(20000) - cy.get('[id=Ready-row]').each($td => { + cy.get('[id=Ready-row]', { timeout: 60000 }).each($td => { cy.wrap($td).should('have.attr', 'data-test-status', 'True') cy.wrap($td).should('have.attr', "data-test-reason", 'Ready') }) diff --git a/web/cypress/integration-tests/table_queryopts.cy.ts b/web/cypress/integration-tests/table_queryopts.cy.ts index 2653d9a3d..33fa2c6d5 100644 --- a/web/cypress/integration-tests/table_queryopts.cy.ts +++ b/web/cypress/integration-tests/table_queryopts.cy.ts @@ -105,7 +105,15 @@ describe('(OCP-50532, OCP-50531, OCP-50530, OCP-59408 Network_Observability) Net cy.contains('Date').should('exist') }) - it("(OCP-68125, aramesha, Network_Observability)should verify DSCP column is enbaled by default", function () { + it("(OCP-68125, aramesha, Network_Observability) should verify DSCP column", function () { + netflowPage.stopAutoRefresh() + cy.openColumnsModal().then(col => { + cy.get(colSelectors.columnsModal).should('be.visible') + cy.get('#Dscp').check() + cy.byTestID(colSelectors.save).click() + }) + cy.reload() + cy.byTestID('table-composable').should('exist').within(() => { cy.get(colSelectors.dscp).should('exist') }) @@ -114,8 +122,6 @@ describe('(OCP-50532, OCP-50531, OCP-50530, OCP-59408 Network_Observability) Net cy.get(filterSelectors.filterInput).type("dscp=0" + '{enter}').click() cy.get('#dscp-0-toggle > span.pf-v5-c-menu-toggle__text').should('contain.text', 'Standard') - netflowPage.stopAutoRefresh() - // Verify DSCP value is Standard for all rows cy.get('[data-test-td-column-id=Dscp]').each((td) => { expect(td).attr("data-test-td-value").to.contain(0) diff --git a/web/cypress/views/dashboards-page.ts b/web/cypress/views/dashboards-page.ts index db47eeb3e..707eab865 100644 --- a/web/cypress/views/dashboards-page.ts +++ b/web/cypress/views/dashboards-page.ts @@ -46,7 +46,7 @@ export namespace dashboardSelectors { } export const graphSelector = { - graphBody: '.pf-v5-c-card__body > div > div' + graphBody: '.pf-v6-c-card__body > div > div' } export const appsInfra = [ @@ -56,8 +56,25 @@ export const appsInfra = [ Cypress.Commands.add('checkDashboards', (names) => { for (let i = 0; i < names.length; i++) { - cy.byTestID(names[i], { timeout: 120000 }).should('exist') - .find(graphSelector.graphBody, { timeout: 120000 }).should('not.have.class', 'pf-v5-c-empty-state') + // Wait for panel to exist + cy.byTestID(names[i], { timeout: 120000 }).should('exist').first().then($panel => { + // Scroll panel into view to ensure it loads + cy.wrap($panel).scrollIntoView() + }) + + // Add wait to allow metrics to populate + cy.wait(2000) + + // Check that graph body doesn't have empty state - use a custom retry mechanism + cy.byTestID(names[i], { timeout: 120000 }).first().within(() => { + cy.get(graphSelector.graphBody, { timeout: 120000 }).should($body => { + const hasEmptyState = $body.hasClass('pf-v6-c-empty-state') + if (hasEmptyState) { + // Force a retry by throwing an error + throw new Error('Dashboard panel still showing empty state, retrying...') + } + }) + }) } }) diff --git a/web/cypress/views/netflow-page.ts b/web/cypress/views/netflow-page.ts index 7a3acc0fe..3084f637a 100644 --- a/web/cypress/views/netflow-page.ts +++ b/web/cypress/views/netflow-page.ts @@ -6,7 +6,7 @@ declare global { checkPanel(panelName: string[]): Chainable openPanelsModal(): Chainable openColumnsModal(): Chainable - checkPopupItems(id: string, names: string[]): Chainable + checkPopItems(id: string, names: string[]): Chainable checkQuerySummary(metric: JQuery): Chainable checkPerformance(page: string, loadTime: number, memoryUsage: number): Chainable changeQueryOption(name: string): Chainable @@ -51,9 +51,11 @@ export const netflowPage = { stopAutoRefresh: () => { cy.byTestID(genSelectors.refreshDrop).should('exist').then($btn => { // only stop refresh if it's not already OFF - if ($btn.text() != "Refresh off") { - cy.wrap($btn).click({ force: true }) - cy.get('[data-test="OFF_KEY"]').should('exist').click({ force: true }) + if (!$btn.text().includes("Refresh off")) { + cy.byTestID(genSelectors.refreshDrop).click() + // Wait for dropdown menu to be rendered and visible + cy.get('.pf-v5-c-menu').should('be.visible') + cy.get('body').find('[data-test="OFF_KEY"]').click() } }) }, @@ -302,7 +304,7 @@ Cypress.Commands.add('checkPanel', (panelName) => { } }); -Cypress.Commands.add('checkPopupItems', (id, names) => { +Cypress.Commands.add('checkPopItems', (id, names) => { for (let i = 0; i < names.length; i++) { cy.get(id).contains(names[i]) .closest('.pf-v5-c-data-list__item-row').find('.pf-v5-c-data-list__check'); @@ -347,9 +349,9 @@ Cypress.Commands.add('checkQuerySummary', (metric) => { }); Cypress.Commands.add('changeQueryOption', (name: string) => { - cy.get('#filter-toolbar-search-filters').contains('Query options').click(); - cy.get('#query-options-dropdown').contains(name).click(); - cy.get('#filter-toolbar-search-filters').contains('Query options').click(); + cy.byTestID('query-options-dropdown').click(); + cy.get('#query-options-popper').contains(name).click(); + cy.byTestID('query-options-dropdown').click(); }); Cypress.Commands.add('visitNetflowTrafficTab', (page) => { diff --git a/web/cypress/views/netobserv.ts b/web/cypress/views/netobserv.ts index f44d2ff1a..19d2368e9 100644 --- a/web/cypress/views/netobserv.ts +++ b/web/cypress/views/netobserv.ts @@ -142,7 +142,7 @@ export const Operator = { } }) // don't create flowcollector if already exists - cy.get('div.loading-box:nth-child(1)').should('be.visible').then(() => { + cy.get('div.loading-box__loaded:nth-child(2)', { timeout: 60000 }).should('be.visible').then(() => { if (Cypress.$('td[role="gridcell"]').length == 0) { cy.log("Deploying flowcollector") switch (parameters) { diff --git a/web/cypress/views/network-health.ts b/web/cypress/views/network-health.ts index 40fc01844..eb69784dd 100644 --- a/web/cypress/views/network-health.ts +++ b/web/cypress/views/network-health.ts @@ -11,18 +11,18 @@ export namespace networkHealthSelectors { export const networkHealth = { clickOnAlert: (name: string) => { // pick the first from the list - cy.get(`label[for^="health-card-${name}"]`).eq(0).should('be.visible').click() + cy.get(`label[for^="health-card-selectable-${name}"]`).eq(0).should('be.visible').click() }, verifyAlert: (name: string, mode: string = "alert", alertText?: string) => { // click force since node cards are covered - cy.get(`label[for^="health-card-${name}"]`).eq(0).should('be.visible').click({ force: true }).then(() => { + cy.get(`label[for^="health-card-selectable-${name}"]`).eq(0).should('be.visible').click({ force: true }).then(() => { cy.get(networkHealthSelectors.sidePanel).should('be.visible') cy.contains(mode).should('exist') if (alertText) { cy.contains(alertText).should('exist') } - cy.get(`label[for^="health-card-${name}"]`).eq(0).click() + cy.get(`label[for^="health-card-selectable-${name}"]`).eq(0).click() cy.get(networkHealthSelectors.sidePanel).should('not.exist') }) },