140 lines
8.7 KiB
TypeScript
140 lines
8.7 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import { BASE_URL } from '../../helpers/auth';
|
|
import { markManual, markPartial, markWrite } from '../../helpers/manual';
|
|
import { attachWriteResult } from '../../helpers/writeResult';
|
|
|
|
const REPO_URL = process.env.REPO_URL ?? `${BASE_URL}/downloads`;
|
|
|
|
test.describe('core-virtualization', () => {
|
|
test('core-virtualization-write-supported_hypervisors_deployment', async ({ page }, testInfo) => {
|
|
testInfo.annotations.push({ type: 'automationStatus', description: 'automated' });
|
|
markWrite();
|
|
testInfo.annotations.push({ type: 'description', description: 'Record the list of supported hypervisors and their deployment methods from official documentation' });
|
|
|
|
const captured: Record<string, unknown> = {};
|
|
|
|
await test.step('Navigate to download / compatibility portal', async () => {
|
|
await page.goto(REPO_URL);
|
|
captured['url'] = page.url();
|
|
});
|
|
|
|
await test.step('Extract hypervisor entries from the page', async () => {
|
|
const items = await page.locator('td, li, .hypervisor-item, .platform-item').allTextContents();
|
|
const hypervisors = items.filter((t) =>
|
|
/vmware|vsphere|hyper-v|hyperv|kvm|proxmox|xen|virtualbox|nutanix/i.test(t),
|
|
);
|
|
captured['hypervisors'] = hypervisors;
|
|
captured['count'] = hypervisors.length;
|
|
});
|
|
|
|
await test.step('Attach hypervisor list to report', async () => {
|
|
await attachWriteResult(testInfo, captured, 'hypervisors');
|
|
});
|
|
|
|
expect(captured['count']).toBeGreaterThan(0);
|
|
});
|
|
|
|
test('core-virtualization-write-guest_agent_integration', async ({ page }, testInfo) => {
|
|
testInfo.annotations.push({ type: 'automationStatus', description: 'manual' });
|
|
markWrite();
|
|
markManual('Requires direct access to hypervisor console (VMware vCenter, Hyper-V Manager, KVM virsh) to inspect guest agent status; not accessible via web admin portal');
|
|
testInfo.annotations.push({ type: 'description', description: 'Record guest agent integration status and version for each supported hypervisor' });
|
|
// Manual steps:
|
|
// 1. For VMware: open vCenter → VM → Summary → VMware Tools status.
|
|
// 2. For Hyper-V: open Hyper-V Manager → VM → Integration Services.
|
|
// 3. For KVM/QEMU: run `virsh qemu-agent-command <vm> '{"execute":"guest-info"}'`.
|
|
// 4. For each hypervisor, record: agent version, status (running/stopped), capabilities.
|
|
// 5. Attach findings to this test.
|
|
});
|
|
|
|
test('core-virtualization-write-resource_allocation_vcpu_vram_vdisk', async ({ page }, testInfo) => {
|
|
testInfo.annotations.push({ type: 'automationStatus', description: 'manual' });
|
|
markWrite();
|
|
markManual('Hypervisor management plane access required (vCenter API, Hyper-V WMI, libvirt) to read vCPU/vRAM/vDisk allocations; these are not exposed in the PBX admin portal');
|
|
testInfo.annotations.push({ type: 'description', description: 'Record vCPU, vRAM, and vDisk resource allocation for each supported deployment template' });
|
|
// Manual steps:
|
|
// 1. Open the OVA/OVF template or deployment documentation.
|
|
// 2. For each supported size (Small/Medium/Large/XL), record: vCPUs, RAM (GB), Disk (GB).
|
|
// 3. Cross-reference with minimum requirements in the Installation Guide.
|
|
// 4. Verify live VM allocations match the template using hypervisor console.
|
|
// 5. Record findings in the test report.
|
|
});
|
|
|
|
test('core-virtualization-write-virtual_networking_configuration', async ({ page }, testInfo) => {
|
|
testInfo.annotations.push({ type: 'automationStatus', description: 'manual' });
|
|
markWrite();
|
|
markManual('Virtual switch and VLAN configuration lives in the hypervisor management plane (VMware DVS, Hyper-V Virtual Switch, OVS on KVM); not accessible via PBX admin portal');
|
|
testInfo.annotations.push({ type: 'description', description: 'Record virtual networking configuration: virtual switches, VLANs, NIC assignments' });
|
|
// Manual steps:
|
|
// 1. In the hypervisor, inspect the virtual switch assigned to the PBX VM.
|
|
// 2. Record: vSwitch name, uplink adapter, MTU, VLAN tagging mode.
|
|
// 3. Verify the PBX NIC is on the correct port group / VLAN.
|
|
// 4. Check that management and voice VLANs are separated if applicable.
|
|
// 5. Record configuration in this test's findings.
|
|
});
|
|
|
|
test('core-virtualization-check-live_migration_and_active_call_preservation', async ({ page }, testInfo) => {
|
|
testInfo.annotations.push({ type: 'automationStatus', description: 'manual' });
|
|
testInfo.annotations.push({ type: 'testType', description: 'check' });
|
|
markManual('Requires HA infrastructure with ≥ 2 hypervisor hosts, active SIP call sessions during migration, and simultaneous call-state monitoring; cannot be performed by Playwright');
|
|
testInfo.annotations.push({ type: 'description', description: 'Verify VM live migration (vMotion / Live Migration) preserves active calls without interruption' });
|
|
// Manual steps:
|
|
// 1. Establish 5+ active SIP calls between extensions.
|
|
// 2. Trigger live migration of the PBX VM to a second hypervisor host.
|
|
// 3. Monitor active calls in the PBX portal during migration.
|
|
// 4. Verify: zero call drops, no audio interruption > 200 ms, migration completes < 30 s.
|
|
// 5. Record migration duration and call preservation result.
|
|
});
|
|
|
|
test('core-virtualization-check-snapshot_backup_restore_and_consistency', async ({ page }, testInfo) => {
|
|
testInfo.annotations.push({ type: 'automationStatus', description: 'partial' });
|
|
testInfo.annotations.push({ type: 'testType', description: 'check' });
|
|
markPartial('Post-restore consistency checks (admin portal loads, config intact, services running) can be automated; the snapshot/restore operation itself requires hypervisor API or manual action');
|
|
testInfo.annotations.push({ type: 'description', description: 'Verify VM snapshot and restore operations maintain full system consistency' });
|
|
|
|
// TODO_MANUAL: Use hypervisor API or console to create a VM snapshot, modify config,
|
|
// then restore the snapshot before running the automated steps below.
|
|
|
|
await test.step('Navigate to admin portal after restore and verify it loads', async () => {
|
|
await page.goto(BASE_URL, { waitUntil: 'domcontentloaded' });
|
|
await expect(page.locator('body')).toBeVisible();
|
|
});
|
|
|
|
await test.step('Verify no error banners are displayed after restore', async () => {
|
|
await expect(page.locator('.alert-danger, .error, [class*="error"]').first()).toHaveCount(0);
|
|
});
|
|
|
|
await test.step('Verify core services are shown as running in the dashboard', async () => {
|
|
await page.goto(`${BASE_URL}/admin/dashboard`);
|
|
await expect(page.locator('body')).not.toContainText(/stopped|offline|unavailable/i);
|
|
});
|
|
});
|
|
|
|
test('core-virtualization-check-hypervisor_level_high_availability', async ({ page }, testInfo) => {
|
|
testInfo.annotations.push({ type: 'automationStatus', description: 'manual' });
|
|
testInfo.annotations.push({ type: 'testType', description: 'check' });
|
|
markManual('Requires physical HA cluster with multiple hypervisor hosts; host failure must be simulated manually (power off host, network isolation); not achievable via Playwright');
|
|
testInfo.annotations.push({ type: 'description', description: 'Verify hypervisor-level HA (VMware HA, Hyper-V Failover Cluster) restarts the PBX VM after a host failure' });
|
|
// Manual steps:
|
|
// 1. Confirm HA is enabled on the cluster hosting the PBX VM.
|
|
// 2. Note the current host where the PBX VM is running.
|
|
// 3. Simulate host failure (power off host or isolate network).
|
|
// 4. Measure time to VM restart on a surviving host.
|
|
// 5. Verify PBX admin portal becomes accessible within the defined RTO (e.g., < 5 min).
|
|
// 6. Record: failover time, target host, any lost registrations.
|
|
});
|
|
|
|
test('core-virtualization-write-storage_thin_vs_thick_provisioning', async ({ page }, testInfo) => {
|
|
testInfo.annotations.push({ type: 'automationStatus', description: 'manual' });
|
|
markWrite();
|
|
markManual('Storage provisioning details (thin/thick/lazy-zeroed) are visible only in the hypervisor storage management interface; not exposed in the PBX admin portal');
|
|
testInfo.annotations.push({ type: 'description', description: 'Record storage provisioning type (thin vs thick) and observed performance implications for each supported hypervisor' });
|
|
// Manual steps:
|
|
// 1. In vCenter/Hyper-V/KVM, open the PBX VM disk properties.
|
|
// 2. Record: provisioning type, allocated size, used size.
|
|
// 3. Run a disk I/O benchmark (fio) on both thin and thick provisioned deployments.
|
|
// 4. Record: sequential read/write IOPS, latency (ms).
|
|
// 5. Document recommended provisioning type based on findings.
|
|
});
|
|
});
|