- Add skills/uat/SKILL.md with concrete testing procedures for all 7 Headlamp plugins - Update SDLC skill to reference the new uat skill for detailed procedures - Fix namespace reference: UAT runs in headlamp-uat namespace, not privilegedescalation Co-Authored-By: Paperclip <noreply@paperclip.ing>
6.6 KiB
name, description
| name | description |
|---|---|
| uat | Functional UAT procedures for Privileged Escalation Headlamp plugins. Concrete testing steps, pass/fail criteria, and artifact requirements for each plugin. |
UAT Procedures
Purpose
This skill defines functional User Acceptance Testing for all Privileged Escalation Headlamp plugins. UAT validates that plugins work correctly in the deployed environment — by loading plugins in a running Headlamp instance and exercising their features, not by browsing GitHub or inspecting PR diffs.
What UAT Is NOT
- Browsing GitHub PRs and taking screenshots of code diffs
- Checking CI status on GitHub
- Reading commit messages or PR descriptions
- Approving based on QA's review alone
If your test evidence is screenshots of GitHub pages, you are not performing UAT.
UAT Environment
The UAT Headlamp instance runs in the headlamp-uat Kubernetes namespace. Navigate to the Headlamp UAT URL using your Playwright browser. The plugin under test must be deployed to UAT before testing.
General Process
For every uat→main promotion:
- Open the Headlamp UAT instance in the browser
- Confirm the plugin appears in the sidebar or app bar
- Run the plugin-specific test steps below
- Capture screenshots of the running plugin at each verification step
- Check the browser console for errors
- Post a structured test report (see Artifacts section)
Plugin Test Procedures
headlamp-polaris-plugin — Kubernetes Best Practices
Access: Sidebar → Polaris section
| Step | Action | Expected Result |
|---|---|---|
| 1 | Navigate to the Polaris dashboard | Cluster score loads with a numeric value |
| 2 | Verify workload list populates | Shows deployments/pods with individual scores |
| 3 | Click into any workload | Detail view shows pass/fail/warning checks with descriptions |
| 4 | Cross-check one score against kubectl |
Polaris CLI output matches plugin display |
Pass: Dashboard loads, shows real workload data, scores are non-zero, detail views navigate correctly. Fail: Page errors, empty data when workloads exist, scores show 0/NaN, detail navigation broken.
headlamp-sealed-secrets-plugin — Sealed Secrets Management
Access: Sidebar → Sealed Secrets section
| Step | Action | Expected Result |
|---|---|---|
| 1 | Navigate to the Sealed Secrets list | List view loads (may be empty if no secrets exist) |
| 2 | Check the create form | Create sealed secret form is accessible with expected fields |
| 3 | View an existing sealed secret | Detail view shows metadata, status, and namespace |
| 4 | Verify sealed secret status | Status reflects actual K8s state |
Pass: List loads, create form accessible, detail views work, status accurate. Fail: Page errors, CRUD forms don't render, missing UI elements, status mismatch.
headlamp-intel-gpu-plugin — Intel GPU Monitoring
Access: Sidebar → Intel GPU section
| Step | Action | Expected Result |
|---|---|---|
| 1 | Navigate to the GPU section | GPU device list or status page loads |
| 2 | Check node-level GPU info | Per-node GPU allocation is displayed |
| 3 | Verify device status | Device plugin status matches kubectl describe node GPU capacity |
Pass: Section loads, shows GPU device information or empty state if no Intel GPUs present, no console errors. Fail: Page errors, data loading failures, broken rendering.
headlamp-kube-vip-plugin — Load Balancer Management
Access: Sidebar → Kube-VIP section
| Step | Action | Expected Result |
|---|---|---|
| 1 | Navigate to the Kube-VIP section | Load balancer status view loads |
| 2 | Check VIP list | VIP addresses and their status are displayed |
| 3 | View configuration details | Configuration is accessible and readable |
| 4 | Verify against cluster state | VIP data matches kubectl get svc LoadBalancer entries |
Pass: Section loads, shows VIP data or empty state, navigation works. Fail: Page errors, data not rendering, broken navigation.
headlamp-tns-csi-plugin — TrueNAS CSI Monitoring
Access: Sidebar → TrueNAS CSI section
| Step | Action | Expected Result |
|---|---|---|
| 1 | Navigate to the TrueNAS CSI section | Volume list loads |
| 2 | Check PV/PVC list | Shows provisioned volumes with capacity and status |
| 3 | View volume details | Detail view shows storage class, capacity, access modes |
| 4 | Verify against cluster state | Volume data matches kubectl get pv,pvc output |
Pass: Section loads, shows CSI volumes/status, detail views work. Fail: Page errors, empty state when volumes exist, broken detail views.
headlamp-rook-plugin — Rook/Ceph Storage
Access: Sidebar → Rook/Ceph section
| Step | Action | Expected Result |
|---|---|---|
| 1 | Navigate to the Rook/Ceph dashboard | Cluster health overview loads |
| 2 | Check storage pools | Pool list shows capacity and utilization |
| 3 | Verify OSD status | OSD count and status displayed |
| 4 | Check placement groups | PG status summary is available |
Pass: Dashboard loads, shows cluster health, pool data renders correctly. Fail: Page errors, cluster data missing, health indicators broken.
headlamp-argocd-plugin — Argo CD Application Delivery
Access: Sidebar → Argo CD section
| Step | Action | Expected Result |
|---|---|---|
| 1 | Navigate to the Argo CD application list | Application list loads with sync status |
| 2 | Check sync indicators | Each app shows Synced/OutOfSync/Unknown status |
| 3 | Click into an application | Detail view shows resources, sync history, health |
| 4 | Verify health status | Health icons (Healthy/Degraded/Progressing) are correct |
| 5 | Cross-check against argocd app list |
Status matches CLI output |
Pass: App list loads, sync/health status visible, detail views work, data matches CLI. Fail: Page errors, empty list when apps exist, status missing, broken navigation.
UAT Artifacts
For each plugin tested, the UAT report must include:
- Screenshots of the plugin running in Headlamp — sidebar entry visible, main view loaded, at least one detail view
- Test checklist — each step from the plugin table above marked pass/fail
- Console errors — any browser console errors observed (attach screenshot if present)
- Environment — Headlamp version, plugin version, browser used
Decision Criteria
- Approve the
uat→mainPR when all applicable test steps pass - Request changes with specific failing steps and failure screenshots
- Block if the plugin fails to load entirely — escalate to CTO as a deployment issue