diff --git a/acceptanceTests/cypress.json b/acceptanceTests/cypress.json index 214245c52..48150bbb3 100644 --- a/acceptanceTests/cypress.json +++ b/acceptanceTests/cypress.json @@ -6,7 +6,8 @@ "screenshotOnRunFailure": false, "testFiles": ["tests/GuiPort.js", - "tests/MultipleNamespaces.js"], + "tests/MultipleNamespaces.js", + "tests/Regex.js"], "env": { "testUrl": "http://localhost:8899/" } diff --git a/acceptanceTests/cypress/integration/page_objects/StatusBar.js b/acceptanceTests/cypress/integration/page_objects/StatusBar.js new file mode 100644 index 000000000..7f3ab13db --- /dev/null +++ b/acceptanceTests/cypress/integration/page_objects/StatusBar.js @@ -0,0 +1,46 @@ +const columns = {podName : 1, namespace : 2, tapping : 3}; +const greenStatusImageSrc = '/static/media/success.662997eb.svg'; + +function getDomPathInStatusBar(line, column) { + return `.expandedStatusBar > :nth-child(2) > > :nth-child(2) > :nth-child(${line}) > :nth-child(${column})`; +} + +export function checkLine(line, expectedValues) { + cy.get(getDomPathInStatusBar(line, columns.podName)).invoke('text').then(podValue => { + const podName = getOnlyPodName(podValue); + expect(podName).to.equal(expectedValues.podName); + + cy.get(getDomPathInStatusBar(line, columns.namespace)).invoke('text').then(namespaceValue => { + expect(namespaceValue).to.equal(expectedValues.namespace); + cy.get(getDomPathInStatusBar(line, columns.tapping)).children().should('have.attr', 'src', greenStatusImageSrc); + }); + }); +} + +export function findLineAndCheck(expectedValues) { + cy.get('.expandedStatusBar > :nth-child(2) > > :nth-child(2) > > :nth-child(1)').then(pods => { + cy.get('.expandedStatusBar > :nth-child(2) > > :nth-child(2) > > :nth-child(2)').then(namespaces => { + // organizing namespaces array + const podObjectsArray = Object.values(pods ?? {}); + const namespacesObjectsArray = Object.values(namespaces ?? {}); + let lineNumber = -1; + namespacesObjectsArray.forEach((namespaceObj, index) => { + const currentLine = index + 1; + lineNumber = (namespaceObj.getAttribute && namespaceObj.innerHTML === expectedValues.namespace && (getOnlyPodName(podObjectsArray[index].innerHTML)) === expectedValues.podName) ? currentLine : lineNumber; + }); + lineNumber === -1 ? throwError(expectedValues) : checkLine(lineNumber, expectedValues); + }); + }); +} + +function throwError(expectedValues) { + throw new Error(`The pod named ${expectedValues.podName} doesn't match any namespace named ${expectedValues.namespace}`); +} + +export function getExpectedDetailsDict(podName, namespace) { + return {podName : podName, namespace : namespace}; +} + +function getOnlyPodName(podElementFullStr) { + return podElementFullStr.substring(0, podElementFullStr.indexOf('-')); +} diff --git a/acceptanceTests/cypress/integration/tests/GuiPort.js b/acceptanceTests/cypress/integration/tests/GuiPort.js index bf0199a4f..b96cf1b40 100644 --- a/acceptanceTests/cypress/integration/tests/GuiPort.js +++ b/acceptanceTests/cypress/integration/tests/GuiPort.js @@ -1,8 +1,8 @@ it('check', function () { - cy.visit(`http://localhost:${Cypress.env('port')}/`) + cy.visit(`http://localhost:${Cypress.env('port')}/`); - cy.get('.header').should('be.visible') - cy.get('.TrafficPageHeader').should('be.visible') - cy.get('.TrafficPage-ListContainer').should('be.visible') - cy.get('.TrafficPage-Container').should('be.visible') -}) + cy.get('.header').should('be.visible'); + cy.get('.TrafficPageHeader').should('be.visible'); + cy.get('.TrafficPage-ListContainer').should('be.visible'); + cy.get('.TrafficPage-Container').should('be.visible'); +}); diff --git a/acceptanceTests/cypress/integration/tests/MultipleNamespaces.js b/acceptanceTests/cypress/integration/tests/MultipleNamespaces.js index ea67b428f..110f9d13f 100644 --- a/acceptanceTests/cypress/integration/tests/MultipleNamespaces.js +++ b/acceptanceTests/cypress/integration/tests/MultipleNamespaces.js @@ -1,67 +1,18 @@ -const columns = {"podName" : 1, "namespace" : 2, "tapping" : 3} -const greenStatusImageSrc = "/static/media/success.662997eb.svg" +import {findLineAndCheck, getExpectedDetailsDict} from '../page_objects/StatusBar'; it('opening', function () { - cy.visit(Cypress.env('testUrl')) - cy.get('.podsCount').trigger('mouseover') + cy.visit(Cypress.env('testUrl')); + cy.get('.podsCount').trigger('mouseover'); }); -[1, 2, 3].map(doItFunc) +[1, 2, 3].map(doItFunc); function doItFunc(number) { - const podName = Cypress.env(`name${number}`) - const namespace = Cypress.env(`namespace${number}`) + const podName = Cypress.env(`name${number}`); + const namespace = Cypress.env(`namespace${number}`); it(`verifying the pod (${podName}, ${namespace})`, function () { - findLineAndCheck({"podName" : podName, "namespace" : namespace}) - }) + findLineAndCheck(getExpectedDetailsDict(podName, namespace)); + }); } -function getDomPathInStatusBar(line, column) { - return `.expandedStatusBar > :nth-child(2) > > :nth-child(2) > :nth-child(${line}) > :nth-child(${column})` -} - -function checkLine(line, expectedValues) { - cy.get(getDomPathInStatusBar(line, columns.podName)).invoke('text').then(podValue => { - const podName = podValue.substring(0, podValue.indexOf('-')) - expect(podName).to.equal(expectedValues.podName) - - cy.get(getDomPathInStatusBar(line, columns.namespace)).invoke('text').then(namespaceValue => { - expect(namespaceValue).to.equal(expectedValues.namespace) - cy.get(getDomPathInStatusBar(line, columns.tapping)).children().should('have.attr', 'src', greenStatusImageSrc) - }) - }) -} - -function findLineAndCheck(expectedValues) { - cy.get('.expandedStatusBar > :nth-child(2) > > :nth-child(2) > > :nth-child(1)').then(pods => { - cy.get('.expandedStatusBar > :nth-child(2) > > :nth-child(2) > > :nth-child(2)').then(namespaces => { - - // organizing namespaces array - const namespacesObjectsArray = Object.values(namespaces) - let namespacesArray = [] - namespacesObjectsArray.forEach(line => { - line.getAttribute ? namespacesArray.push(line.innerHTML) : null - }) - - // organizing pods array - const podObjectsArray = Object.values(pods) - let podsArray = [] - podObjectsArray.forEach(line => { - line.getAttribute ? podsArray.push(line.innerHTML.substring(0, line.innerHTML.indexOf('-'))) : null - }) - - let rightIndex = -1 - podsArray.forEach((element, index) => { - if (element === expectedValues.podName && namespacesArray[index] === expectedValues.namespace) { - rightIndex = index + 1 - } - }) - rightIndex === -1 ? throwError(expectedValues.podName, expectedValues.namespace) : checkLine(rightIndex, expectedValues) - }) - }) -} - -function throwError(pod, namespace) { - throw new Error(`The pod named ${pod} doesn't match any namespace named ${namespace}`) -} diff --git a/acceptanceTests/cypress/integration/tests/Regex.js b/acceptanceTests/cypress/integration/tests/Regex.js new file mode 100644 index 000000000..b11ef2e58 --- /dev/null +++ b/acceptanceTests/cypress/integration/tests/Regex.js @@ -0,0 +1,11 @@ +import {getExpectedDetailsDict, checkLine} from '../page_objects/StatusBar'; + + +it('opening', function () { + cy.visit(Cypress.env('testUrl')); + cy.get('.podsCount').trigger('mouseover'); + + cy.get('.expandedStatusBar > :nth-child(2) > > :nth-child(2) >').should('have.length', 1); // one line + + checkLine(1, getExpectedDetailsDict(Cypress.env('name'), Cypress.env('namespace'))); +}); diff --git a/acceptanceTests/tap_test.go b/acceptanceTests/tap_test.go index 2415fee78..d8f309d11 100644 --- a/acceptanceTests/tap_test.go +++ b/acceptanceTests/tap_test.go @@ -280,30 +280,8 @@ func TestTapRegex(t *testing.T) { return } - podsUrl := fmt.Sprintf("%v/status/tap", apiServerUrl) - requestResult, requestErr := executeHttpGetRequest(podsUrl) - if requestErr != nil { - t.Errorf("failed to get tap status, err: %v", requestErr) - return - } - - pods, err := getPods(requestResult) - if err != nil { - t.Errorf("failed to get pods, err: %v", err) - return - } - - if len(expectedPods) != len(pods) { - t.Errorf("unexpected result - expected pods length: %v, actual pods length: %v", len(expectedPods), len(pods)) - return - } - - for _, expectedPod := range expectedPods { - if !isPodDescriptorInPodArray(pods, expectedPod) { - t.Errorf("unexpected result - expected pod not found, pod namespace: %v, pod name: %v", expectedPod.Namespace, expectedPod.Name) - return - } - } + runCypressTests(t, fmt.Sprintf("npx cypress run --spec \"cypress/integration/tests/Regex.js\" --env name=%v,namespace=%v", + expectedPods[0].Name, expectedPods[0].Namespace)) } func TestTapDryRun(t *testing.T) {