diff --git a/frontend/packages/kubevirt-plugin/integration-tests/tests/models/kubevirtDetailView.ts b/frontend/packages/kubevirt-plugin/integration-tests/tests/models/kubevirtDetailView.ts index 42d72b81dbf..1bb7a8e5fb7 100644 --- a/frontend/packages/kubevirt-plugin/integration-tests/tests/models/kubevirtDetailView.ts +++ b/frontend/packages/kubevirt-plugin/integration-tests/tests/models/kubevirtDetailView.ts @@ -11,10 +11,12 @@ import { vmDetailCdEditButton, vmDetailBootOrderEditButton, vmDetailDedicatedResourcesEditButton, + vmDetailStatusEditButton, } from '../../views/virtualMachine.view'; import * as editCD from '../../views/editCDView'; import * as editBootOrder from '../../views/editBootOrderView'; import * as editDedicatedResourcesView from '../../views/editDedicatedResourcesView'; +import * as editStatusView from '../../views/editStatusView'; import { NetworkInterfaceDialog } from '../dialogs/networkInterfaceDialog'; import { DiskDialog } from '../dialogs/diskDialog'; import { DetailView } from './detailView'; @@ -103,4 +105,9 @@ export class KubevirtDetailView extends DetailView { await click(vmDetailDedicatedResourcesEditButton(this.namespace, this.name)); await browser.wait(until.presenceOf(editDedicatedResourcesView.guaranteedPolicyCheckbox)); } + + async modalEditStatus() { + await click(vmDetailStatusEditButton(this.namespace, this.name)); + await browser.wait(until.presenceOf(editStatusView.unpauseVMDialog)); + } } diff --git a/frontend/packages/kubevirt-plugin/integration-tests/tests/models/virtualMachine.ts b/frontend/packages/kubevirt-plugin/integration-tests/tests/models/virtualMachine.ts index a31b9a11c25..32d55635df9 100644 --- a/frontend/packages/kubevirt-plugin/integration-tests/tests/models/virtualMachine.ts +++ b/frontend/packages/kubevirt-plugin/integration-tests/tests/models/virtualMachine.ts @@ -147,6 +147,12 @@ export class VirtualMachine extends KubevirtDetailView { resolveTimeout(timeout, PAGE_LOAD_TIMEOUT_SECS), ); break; + case VM_ACTION.Unpause: + await this.waitForStatus( + VM_STATUS.Running, + resolveTimeout(timeout, VM_ACTIONS_TIMEOUT_SECS), + ); + break; default: throw Error(UNEXPECTED_ACTION_ERROR); } diff --git a/frontend/packages/kubevirt-plugin/integration-tests/tests/utils/consts.ts b/frontend/packages/kubevirt-plugin/integration-tests/tests/utils/consts.ts index fc66de27567..7648f7c6f44 100644 --- a/frontend/packages/kubevirt-plugin/integration-tests/tests/utils/consts.ts +++ b/frontend/packages/kubevirt-plugin/integration-tests/tests/utils/consts.ts @@ -89,6 +89,7 @@ export enum VM_ACTION { Restart = 'Restart Virtual Machine', Start = 'Start Virtual Machine', Stop = 'Stop Virtual Machine', + Unpause = 'Unpause Virtual Machine', } export enum VM_STATUS { @@ -99,6 +100,7 @@ export enum VM_STATUS { Pending = 'Pending', Importing = 'Importing', Migrating = 'Migrating', + Paused = 'Paused', } export enum DISK_SOURCE { diff --git a/frontend/packages/kubevirt-plugin/integration-tests/tests/utils/utils.ts b/frontend/packages/kubevirt-plugin/integration-tests/tests/utils/utils.ts index 5483fd1e224..252efb63700 100644 --- a/frontend/packages/kubevirt-plugin/integration-tests/tests/utils/utils.ts +++ b/frontend/packages/kubevirt-plugin/integration-tests/tests/utils/utils.ts @@ -164,3 +164,7 @@ export const waitFor = async (element, text, count = 1) => { await browser.sleep(5 * SEC); } }; + +export function pauseVM(name: string, namespace: string): void { + execSync(`virtctl pause vmi ${name} -n ${namespace}`); +} diff --git a/frontend/packages/kubevirt-plugin/integration-tests/tests/vm.actions.scenario.ts b/frontend/packages/kubevirt-plugin/integration-tests/tests/vm.actions.scenario.ts index 3885399333b..de3ae83a9bf 100644 --- a/frontend/packages/kubevirt-plugin/integration-tests/tests/vm.actions.scenario.ts +++ b/frontend/packages/kubevirt-plugin/integration-tests/tests/vm.actions.scenario.ts @@ -14,7 +14,7 @@ import { waitForCount, } from '@console/shared/src/test-utils/utils'; import { getVMManifest } from './utils/mocks'; -import { fillInput } from './utils/utils'; +import { fillInput, pauseVM } from './utils/utils'; import { VM_BOOTUP_TIMEOUT_SECS, VM_ACTIONS_TIMEOUT_SECS, @@ -71,6 +71,15 @@ describe('Test VM actions', () => { VM_ACTIONS_TIMEOUT_SECS, ); + it( + 'Unpauses VM', + async () => { + pauseVM(vmName, testName); + await vm.listViewAction(VM_ACTION.Unpause); + }, + VM_ACTIONS_TIMEOUT_SECS, + ); + it('Stops VM', async () => { await vm.listViewAction(VM_ACTION.Stop); }); @@ -112,6 +121,15 @@ describe('Test VM actions', () => { VM_ACTIONS_TIMEOUT_SECS, ); + it( + 'Unpauses VM', + async () => { + pauseVM(vmName, testName); + await vm.action(VM_ACTION.Unpause); + }, + VM_ACTIONS_TIMEOUT_SECS, + ); + it('Stops VM', async () => { await vm.action(VM_ACTION.Stop); }); diff --git a/frontend/packages/kubevirt-plugin/integration-tests/tests/vm.overview.scenario.ts b/frontend/packages/kubevirt-plugin/integration-tests/tests/vm.overview.scenario.ts index f25d9a6d42c..87a795ca804 100644 --- a/frontend/packages/kubevirt-plugin/integration-tests/tests/vm.overview.scenario.ts +++ b/frontend/packages/kubevirt-plugin/integration-tests/tests/vm.overview.scenario.ts @@ -4,7 +4,7 @@ import { resourceTitle } from '@console/internal-integration-tests/views/crud.vi import { asyncForEach, createResource, deleteResource } from '@console/shared/src/test-utils/utils'; import * as vmView from '../views/virtualMachine.view'; import { getVMManifest, basicVMConfig } from './utils/mocks'; -import { exposeServices } from './utils/utils'; +import { exposeServices, pauseVM } from './utils/utils'; import { VirtualMachine } from './models/virtualMachine'; import { TAB, @@ -122,4 +122,12 @@ describe('Test VM overview', () => { ); }); }); + + it('Check unpause VM when VM is running', async () => { + await vm.action(VM_ACTION.Start); + pauseVM(vmName, testName); + expect(await vm.getStatus()).toEqual(VM_STATUS.Paused); + await vm.modalEditStatus(); + expect(await vm.getStatus()).toEqual(VM_STATUS.Running); + }); }); diff --git a/frontend/packages/kubevirt-plugin/integration-tests/views/editStatusView.ts b/frontend/packages/kubevirt-plugin/integration-tests/views/editStatusView.ts new file mode 100644 index 00000000000..fb58c275c35 --- /dev/null +++ b/frontend/packages/kubevirt-plugin/integration-tests/views/editStatusView.ts @@ -0,0 +1,4 @@ +import { $, by } from 'protractor'; + +export const unpauseVMDialog = $(`[aria-label="Edit pause state"]`); +export const saveButton = unpauseVMDialog.element(by.buttonText('Unpause')); diff --git a/frontend/packages/kubevirt-plugin/integration-tests/views/virtualMachine.view.ts b/frontend/packages/kubevirt-plugin/integration-tests/views/virtualMachine.view.ts index 9a4de251464..cdde1f69e71 100644 --- a/frontend/packages/kubevirt-plugin/integration-tests/views/virtualMachine.view.ts +++ b/frontend/packages/kubevirt-plugin/integration-tests/views/virtualMachine.view.ts @@ -53,6 +53,8 @@ export const vmDetailDedicatedResources = (namespace, vmName) => $(vmDetailItemId(namespace, vmName, 'dedicated-resources')); export const vmDetailDedicatedResourcesEditButton = (namespace, vmName) => $(vmDetailItemId(namespace, vmName, 'dedicated-resources-edit')); +export const vmDetailStatusEditButton = (namespace, vmName) => + $(vmDetailItemId(namespace, vmName, 'status-edit')); export const vmDetailLabelValue = async (labelKey) => { const filteredLabel = $$('.co-m-label').filter((elem) => elem