Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

US Tests - Creation of VM from Template tests #2404

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion cleanup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ cleanup () {
oc delete pvc --all -n openshift-virtualization-os-images --wait=false
oc delete secret -n default --all --ignore-not-found --wait=false
oc delete net-attach-def --all -n default --wait=false
oc delete vmcp example --ignore-not-found --wait=false
oc delete VirtualMachinePreference example -n default --ignore-not-found --wait=false
oc delete VirtualMachineClusterPreference example --ignore-not-found --wait=false
oc delete VirtualMachineInstancetype example -n default --ignore-not-found --wait=false
oc delete VirtualMachineClusterInstancetype example --ignore-not-found --wait=false
oc delete MigrationPolicy example --ignore-not-found --wait=false
}
cleanup
2 changes: 1 addition & 1 deletion cypress/.eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"rules": {
"chai-friendly/no-unused-expressions": "off",
"cypress/assertion-before-screenshot": "error",
"cypress/no-force": "error",
"cypress/no-force": "off",
"cypress/no-unnecessary-waiting": "off",
"cypress/unsafe-to-chain-command": "off"
}
Expand Down
12 changes: 12 additions & 0 deletions cypress/fixtures/secret.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export default {
apiVersion: 'v1',
data: {
key: 'c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFCZ1FDdWxRQ0E3VnFENDFGSkMwbXNtbm5pY2luTU5FSEp0ck0xUnp2cGtNRTREdWtUSVZTOENtVUZUengrS3NyNkRCMXVwVmE3K21PRzFVc2RYUlFKQlpET3p6RzJITjRnb1N6cHlwbjNwNWxGM3A3ZXNGU1lmcHc3R0QrZ0V5dnJMeG9uRWlHMUMxb0JwL0l5RGNPYStHY0k1S0IwY25ZeDRUYURidS9la1Z6SVpYZFVPb1UvcHcvYVdCamlSbWJRRXZTZmE4ZWRkZ0l1dkQwQ0hPMlIvSlFObXdocjNneWFlOTh3OGM5bGppRmFQSjNQb25ySHRldHlmdG9maW1wNTIxUEUzd2I2cjRGK1NHZit4cVg1Z1JkOHg4aVRxdkJoL1M2dlJLSGRrZUpmb2crZGhkTmpHbUo0bGJ6Y0ZWTzd5THViKzZyMmROREIvZWVSeUNkQ2ZEcVFTN3haNHI1bXlpWUkya0t2NVNudFpSMDZKKzVLNnVHQ2I1UmltaVBOYkdMTXdOYVJqSzVtL2RoTjZydGNxN29ocWxvd1VzblBBVEN1S25nREFhTHI0NzF3MTJyYzh6dFdYdzlTZ3ZQSjZEUGJWZHlma3l0OTJqazJsYjl3VkJMc3J6NXJFcHRLcXdOV1JPMlFlN3gzTlhRdzFheDRWQWgwakVlVElCR2FHbUU9',
},
kind: 'Secret',
metadata: {
name: 'auto-test-secret',
namespace: 'default',
},
type: 'Opaque',
};
1 change: 0 additions & 1 deletion cypress/support/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import './nav.ts';
import './project.ts';
import './resource.ts';
import './selectors.ts';
import './views.ts';

declare global {
namespace Cypress {
Expand Down
10 changes: 4 additions & 6 deletions cypress/support/login.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { masthead, submitButton } from './views';
import { MINUTE } from '../utils/const/index';
import { submitButton } from '../views/selector-common';

declare global {
// eslint-disable-next-line @typescript-eslint/no-namespace
Expand All @@ -24,7 +25,7 @@ Cypress.Commands.add('login', (provider: string, username: string, password: str
// Make sure we clear the cookie in case a previous test failed to logout.
cy.clearCookie('openshift-session-token');

cy.get('[data-test-id=login]', { timeout: 30000 }).should('be.visible');
cy.get('[data-test-id=login]', { timeout: 5 * MINUTE }).should('be.visible');
const idp = provider || KUBEADMIN_IDP;
cy.task('log', ` Logging in as ${username || KUBEADMIN_USERNAME}`);
cy.byLegacyTestID('login').should('be.visible');
Expand All @@ -36,10 +37,7 @@ Cypress.Commands.add('login', (provider: string, username: string, password: str
cy.get('#inputUsername').type(username || KUBEADMIN_USERNAME);
cy.get('#inputPassword').type(password || Cypress.env('BRIDGE_KUBEADMIN_PASSWORD'));
cy.get(submitButton).click();
masthead.username.shouldBeVisible();

// wait for virtualization page
cy.contains('.pf-v5-c-nav__link', 'Virtualization').should('be.visible');
cy.byTestID('user-dropdown', { timeout: 5 * MINUTE }).should('be.visible');
});
});

Expand Down
76 changes: 61 additions & 15 deletions cypress/support/nav.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,74 +7,120 @@ declare global {
// eslint-disable-next-line @typescript-eslint/no-namespace
namespace Cypress {
interface Chainable {
visitCatalogAdm(): void;
visitCatalog(): void;
visitCatalogVirt(): void;
visitCheckups(): void;
visitCheckupsVirt(): void;
visitITs(): void;
visitITsVirt(): void;
visitMPs(): void;
visitOverviewAdm(): void;
visitMPsVirt(): void;
visitOverview(): void;
visitOverviewVirt(): void;
visitPreferences(): void;
visitPreferencesVirt(): void;
visitTemplates(): void;
visitTemplatesVirt(): void;
visitVMs(): void;
visitVMsVirt(): void;
visitVolumes(): void;
visitVolumesVirt(): void;
}
}
}

Cypress.Commands.add('visitOverviewAdm', () => {
Cypress.Commands.add('visitOverview', () => {
cy.clickVirtLink(nav.overviewNav);
cy.contains(nav.resourceTitle, 'Virtualization', { timeout: 3 * MINUTE }).should('be.visible');
cy.contains(nav.resourceTitle, 'Virtualization', { timeout: 5 * MINUTE }).should('be.visible');
});

Cypress.Commands.add('visitOverviewVirt', () => {
cy.get(nav.overviewNav, { timeout: 3 * MINUTE }).click();
cy.contains(nav.resourceTitle, 'Virtualization', { timeout: 3 * MINUTE }).should('be.visible');
cy.get(nav.overviewNav, { timeout: 5 * MINUTE }).click();
cy.contains(nav.resourceTitle, 'Virtualization', { timeout: 5 * MINUTE }).should('be.visible');
});

Cypress.Commands.add('visitCatalogAdm', () => {
Cypress.Commands.add('visitCatalog', () => {
cy.clickVirtLink(nav.catalogNav);
cy.contains('Create new VirtualMachine', { timeout: 3 * MINUTE }).should('be.visible');
cy.contains('Create new VirtualMachine', { timeout: 5 * MINUTE }).should('be.visible');
});

Cypress.Commands.add('visitCatalogVirt', () => {
cy.get(nav.catalogNav, { timeout: 3 * MINUTE }).click();
cy.contains('Select volume to boot from', { timeout: 3 * MINUTE }).should('be.visible');
cy.get(nav.catalogNav, { timeout: 5 * MINUTE }).click();
cy.checkTitle('Create new VirtualMachine', 5 * MINUTE);
cy.contains('Select volume to boot from', { timeout: 5 * MINUTE }).should('be.visible');
});

Cypress.Commands.add('visitVMs', () => {
cy.clickVirtLink(nav.vmNav);
cy.contains(nav.resourceTitle, 'VirtualMachines', { timeout: 3 * MINUTE }).should('be.visible');
cy.contains(nav.resourceTitle, 'VirtualMachines', { timeout: 5 * MINUTE }).should('be.visible');
});

Cypress.Commands.add('visitVMsVirt', () => {
cy.get(nav.vmNav, { timeout: 5 * MINUTE }).click();
cy.checkTitle('VirtualMachines', 5 * MINUTE);
cy.contains(nav.resourceTitle, 'VirtualMachines', { timeout: 5 * MINUTE }).should('be.visible');
});

Cypress.Commands.add('visitTemplates', () => {
cy.clickVirtLink(nav.templateNav);
cy.contains(nav.resourceTitle, 'VirtualMachine Templates', { timeout: 3 * MINUTE }).should(
cy.contains(nav.resourceTitle, 'VirtualMachine Templates', { timeout: 5 * MINUTE }).should(
'be.visible',
);
});

Cypress.Commands.add('visitTemplatesVirt', () => {
cy.get(nav.templateNav, { timeout: 5 * MINUTE }).click();
cy.checkTitle('VirtualMachine Templates', 5 * MINUTE);
});

Cypress.Commands.add('visitITs', () => {
cy.clickVirtLink(nav.itNav);
cy.byLegacyTestID('cx1.2xlarge').should('exist');
});

Cypress.Commands.add('visitITsVirt', () => {
cy.get(nav.itNav, { timeout: 5 * MINUTE }).click();
cy.checkTitle('VirtualMachineClusterInstanceTypes', 5 * MINUTE);
cy.byLegacyTestID('cx1.2xlarge').should('exist');
});

Cypress.Commands.add('visitPreferences', () => {
cy.clickVirtLink(nav.preferenceNav);
cy.byLegacyTestID('fedora').should('exist');
});

Cypress.Commands.add('visitPreferencesVirt', () => {
cy.get(nav.preferenceNav, { timeout: 5 * MINUTE }).click();
cy.checkTitle('VirtualMachineClusterPreferences', 5 * MINUTE);
cy.byLegacyTestID('alpine').should('exist');
});

Cypress.Commands.add('visitVolumes', () => {
cy.clickVirtLink(nav.volumeNav);
cy.contains(nav.resourceTitle, 'Bootable volumes', { timeout: 3 * MINUTE }).should('be.visible');
cy.contains(nav.resourceTitle, 'Bootable volumes', { timeout: 5 * MINUTE }).should('be.visible');
});

Cypress.Commands.add('visitVolumesVirt', () => {
cy.get(nav.volumeNav, { timeout: 5 * MINUTE }).click();
cy.checkTitle('Bootable volumes', 5 * MINUTE);
});

Cypress.Commands.add('visitMPs', () => {
cy.clickVirtLink(nav.mpNav);
cy.contains(nav.resourceTitle, 'MigrationPolicies', { timeout: 3 * MINUTE }).should('be.visible');
cy.contains(nav.resourceTitle, 'MigrationPolicies', { timeout: 5 * MINUTE }).should('be.visible');
});

Cypress.Commands.add('visitMPsVirt', () => {
cy.get(nav.mpNav, { timeout: 5 * MINUTE }).click();
cy.checkTitle('MigrationPolicies', 5 * MINUTE);
});

Cypress.Commands.add('visitCheckups', () => {
cy.clickVirtLink(nav.checkupNav);
cy.contains(nav.resourceTitle, 'Checkups', { timeout: 3 * MINUTE }).should('be.visible');
cy.contains(nav.resourceTitle, 'Checkups', { timeout: 5 * MINUTE }).should('be.visible');
});

Cypress.Commands.add('visitCheckupsVirt', () => {
cy.get(nav.checkupNav, { timeout: 5 * MINUTE }).click();
cy.checkTitle('Checkups', 5 * MINUTE);
});
19 changes: 16 additions & 3 deletions cypress/support/selectors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import Loggable = Cypress.Loggable;
import Timeoutable = Cypress.Timeoutable;
import Withinable = Cypress.Withinable;
import Shadow = Cypress.Shadow;
import { MINUTE, SECOND } from '../utils/const/index';
import { Perspective, switchPerspective } from '../views/perspective';

export {};
Expand All @@ -23,6 +24,8 @@ declare global {
options?: Partial<Loggable & Timeoutable & Withinable & Shadow>,
): Chainable;
byTestRows(selector: string): Chainable;
checkSubTitle(title: string, timeout?: number): void;
checkTitle(title: string, timeout?: number): void;
clickApplyBtn(): void;
clickNavLink(path: [string, string?]): Chainable;
clickSaveBtn(): void;
Expand Down Expand Up @@ -56,8 +59,8 @@ Cypress.Commands.add('byTestOperatorRow', (selector: string, options?: object) =
cy.get(`[data-test-operator-row="${selector}"]`, options),
);
Cypress.Commands.add('clickNavLink', (path: [string, string?]) => {
cy.byTestID('nav', { timeout: 10000 })
.contains(path[0], { timeout: 10000 })
cy.byTestID('nav', { timeout: 10 * SECOND })
.contains(path[0], { timeout: 10 * SECOND })
.should(($el) => {
if ($el.attr('aria-expanded') == 'false') {
$el.click();
Expand All @@ -74,7 +77,7 @@ Cypress.Commands.add('byButtonText', (selector: string) =>

Cypress.Commands.add('clickVirtLink', (navItemSelector: string) => {
cy.contains('Virtualization').should('be.visible');
cy.get('[data-test-id="virtualization-nav-item"]', { timeout: 10000 }).should(($el) => {
cy.get('[data-test-id="virtualization-nav-item"]', { timeout: 10 * SECOND }).should(($el) => {
if ($el.attr('aria-expanded') == 'false') {
$el.click();
}
Expand All @@ -88,3 +91,13 @@ Cypress.Commands.add('clickApplyBtn', () => cy.contains('button[type="button"]',
Cypress.Commands.add('switchToVirt', () => {
switchPerspective(Perspective.Virtualization);
});

Cypress.Commands.add('checkTitle', (title: string, timeout?: number) => {
const t_o = timeout ? timeout : 3 * MINUTE;
cy.contains('h1', title, { timeout: t_o }).should('exist');
});

Cypress.Commands.add('checkSubTitle', (subTitle: string, timeout?: number) => {
const t_o = timeout ? timeout : 3 * MINUTE;
cy.contains('h2', subTitle, { timeout: t_o }).should('exist');
});
16 changes: 0 additions & 16 deletions cypress/support/views.ts

This file was deleted.

6 changes: 4 additions & 2 deletions cypress/tests/all.cy.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
import './e2e/login.cy.ts';
import './e2e/check-tab-yaml.cy.ts';
import './e2e/a-setup.cy.ts';
import './e2e/b-overview.cy.ts';
// import './e2e/check-tab-yaml.cy.ts';
// import './e2e/create-vm.cy.ts';
44 changes: 44 additions & 0 deletions cypress/tests/e2e/a-setup.cy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import secretFixture from '../../fixtures/secret';
import { CLEANUP_SCRIPT, MINUTE, TEST_NS } from '../../utils/const/index';
import { brandImage } from '../../views/selector';

const WELCOME_OFF_CMD = `oc patch configmap -n openshift-cnv kubevirt-user-settings --type=merge --patch '{"data": {"kube-admin": "{\\"quickStart\\":{\\"dontShowWelcomeModal\\":true}}"}, }'`;
const TREEVIEW_ON_CMD = `oc patch configmap -n openshift-cnv kubevirt-ui-features --type=merge --patch '{"data": {"treeView": "true", "treeViewFolders": "true"}}'`;

describe('Prepare the cluster for test', () => {
before(() => {
cy.login();
cy.exec('oc whoami').then((result) => {
cy.task('log', `Running as: [${result.stderr}],[${result.stdout}]`);
});
});

it('clean cluster of shared resources', () => {
cy.exec(CLEANUP_SCRIPT, { timeout: 3 * MINUTE });
});

it('create test secret', () => {
cy.exec(`echo '${JSON.stringify(secretFixture)}' | oc create -f -`);
});

it('close the welcome modal', () => {
cy.exec(WELCOME_OFF_CMD).then((result) => {
cy.task('log', `WELCOME_OFF_CMD: [${result.stderr}],[${result.stdout}]`);
});
});

it('enable treeview and folders', () => {
cy.exec(TREEVIEW_ON_CMD).then((result) => {
cy.task('log', `TREEVIEW_ON_CMD: [${result.stderr}],[${result.stdout}]`);
});
});

xit('switch to Virtualization perspective and default project', () => {
cy.task('log', ` Switch to Virtualization perspective`);
cy.get(brandImage).scrollIntoView();
cy.switchToVirt();

// needed because of https://issues.redhat.com/browse/CNV-51570
cy.switchProject(TEST_NS);
});
});
Original file line number Diff line number Diff line change
@@ -1,33 +1,12 @@
import { welcomeCheckbox } from '../../views/selector';
import { tab } from '../../views/tab';

const tickWelcomeModal = () => {
cy.get('body').then(($body) => {
if ($body.text().includes('Do not show this again')) {
cy.get(welcomeCheckbox).check();
}
});
};

describe('Close the welcome modal', () => {
describe('Test Virtualization Overview', () => {
before(() => {
cy.visit('');
cy.wait(20000);
});

it('close the welcome modal', () => {
// sometimes the welcome is presenting before move to Overview
tickWelcomeModal();

cy.wait(5000);
cy.visitOverviewVirt();
cy.wait(10000);
tickWelcomeModal();
cy.contains('Do not show this again').should('not.exist');
});

it('overview page is loaded', () => {
cy.visitOverviewVirt();
cy.visitOverview();
cy.contains('VirtualMachine statuses').should('exist');
});

Expand Down
Loading