You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit bdb6cb0
Browse filesBrowse the repository at this point in the historyBrowse files
CSTACKEX-270: Automation for the template cache workflows (#99)
### Description
This PR...
<!--- Describe your changes in DETAIL - And how has behaviour
functionally changed. -->
<!-- For new features, provide link to FS, dev ML discussion etc. -->
<!-- In case of bug fix, the expected and actual behaviours, steps to
reproduce. -->
<!-- When "Fixes: #<id>" is specified, the issue/PR will automatically
be closed when this PR gets merged -->
<!-- For addressing multiple issues/PRs, use multiple "Fixes: #<id>" -->
<!-- Fixes: # -->
<!---
*******************************************************************************
-->
<!--- NOTE: AUTOMATION USES THE DESCRIPTIONS TO SET LABELS AND PRODUCE
DOCUMENTATION. -->
<!--- PLEASE PUT AN 'X' in only **ONE** box -->
<!---
*******************************************************************************
-->
### Types of changes
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] Enhancement (improves an existing feature and functionality)
- [ ] Cleanup (Code refactoring and cleanup, that may add test cases)
- [ ] Build/CI
- [x] Test (unit or integration test code)
### Feature/Enhancement Scale or Bug Severity
#### Feature/Enhancement Scale
- [ ] Major
- [ ] Minor
#### Bug Severity
- [ ] BLOCKER
- [ ] Critical
- [ ] Major
- [ ] Minor
- [ ] Trivial
### Screenshots (if appropriate):
### How Has This Been Tested?
<!-- Please describe in detail how you tested your changes. -->
<!-- Include details of your testing environment, and the tests you ran
to -->
#### How did you try to break this feature and the system with this
change?
<!-- see how your change affects other areas of the code, etc. -->
<!-- Please read the
[CONTRIBUTING](https://github.com/apache/cloudstack/blob/main/CONTRIBUTING.md)
document -->
Each protocol batch runs suites in this order: pool lifecycle → pool with volumes → volume lifecycle → zone-scoped pool → VM attach (last).
173
+
Each protocol batch runs suites in this order: pool lifecycle → pool with volumes → volume lifecycle → zone-scoped pool → VM attach (includes template cache seed / reuse / survive) → template cache negative (last).
| NFS3 Pool with Volumes |`nfs3/pool/test_pool_with_volumes.py`| 7 | Same + live volume present; negative delete guard |
324
335
| NFS3 Zone-Scoped Pool |`nfs3/pool/test_zone_scoped_pool.py`| 4 | Zone scope — all hosts connected via `attachZone`|
325
336
| NFS3 Volume Lifecycle |`nfs3/volume/test_volume_lifecycle.py`| 5 | Volume is metadata-only; FlexVol unchanged on delete |
326
-
| NFS3 VM + Volume Attach |`nfs3/instance/test_vm_volume_attach.py`| 8 | Full VM lifecycle with hot-plug/detach |
337
+
| NFS3 VM + Volume Attach |`nfs3/instance/test_vm_volume_attach.py`| 10 | Full VM lifecycle with hot-plug/detach; ROOT on tagged pool seeds/reuses template cache, which survives VM delete |
| iSCSI Pool with Volumes |`iscsi/pool/test_pool_with_volumes.py`| 7 | Same + live LUN present; negative delete guard |
329
341
| iSCSI Zone-Scoped Pool |`iscsi/pool/test_zone_scoped_pool.py`| 4 | Zone scope |
330
342
| iSCSI Volume Lifecycle |`iscsi/volume/test_volume_lifecycle.py`| 5 | LUN created per CS volume; LUN removed on delete |
331
-
| iSCSI VM + Volume Attach |`iscsi/instance/test_vm_volume_attach.py`| 8 | Full VM lifecycle; LUN-maps on VM start/stop/detach |
343
+
| iSCSI VM + Volume Attach |`iscsi/instance/test_vm_volume_attach.py`| 10 | Full VM lifecycle; LUN-maps on VM start/stop/detach; ROOT on tagged pool seeds/reuses `cs_tmpl_*` LUN cache |
Copy file name to clipboardExpand all lines: test/integration/plugins/ontap/TEST_CASES.md
+48-12Lines changed: 48 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -19,7 +19,7 @@
19
19
20
20
# ONTAP Integration Test Cases
21
21
22
-
Complete reference for all 62 test cases across 10 test suites.
22
+
Complete reference for all 72 test cases across 12 test suites.
23
23
Each suite is sequential — tests must run in numbered order; each step builds on state created by the previous step.
24
24
25
25
---
@@ -114,18 +114,20 @@ Each suite is sequential — tests must run in numbered order; each step builds
114
114
**File:**`nfs3/instance/test_vm_volume_attach.py`
115
115
**Class:**`TestOntapVMVolumeAttach`
116
116
**Tag:**`vm_volume_workflow`
117
-
**Total:**8 tests | **Scope:** end-to-end — NFS3 pool, data volume, running VM, attach/detach lifecycle
117
+
**Total:**10 tests | **Scope:** end-to-end — NFS3 pool, data volume, running VM (ROOT on the ONTAP pool via a tagged compute offering), primary template cache seed / reuse / survive VM delete, attach/detach lifecycle
118
118
119
119
| # | Test method | Goal | Depends on | CloudStack success criteria | ONTAP success criteria | Type |
| 02 |`test_02_create_ontap_data_volume`| Allocate a CloudStack data volume on the ONTAP pool | test_01 (`pool`) | Volume non-None and listed in `listVolumes`| FlexVol still `online`| positive |
123
-
| 03 |`test_03_deploy_vm`| Deploy a VM using the first available ready KVM template | test_02 (`pool`, `volume`) |`vm.state == "Running"`; template auto-selected from `listTemplates`| n/a | positive |
123
+
| 03 |`test_03_deploy_vm`| Deploy a VM with the tagged SO — ROOT on ONTAP; seeds template cache | test_02 (`pool`, `volume`) |`vm.state == "Running"`; ROOT `storageid` = pool; `template_spool_ref` Ready/DOWNLOADED | Cache file present at spool `install_path`| positive |
124
+
| 03a |`test_03a_deploy_second_vm_reuses_template_cache`| Deploy VM-2 — reuses cache | test_03 | VM-2 Running; ROOT on pool; still exactly one `template_spool_ref`| Same cache file (no second cache) | positive |
125
+
| 03b |`test_03b_expunge_second_vm_template_cache_survives`| Expunge VM-2 — cache must remain (lazy GC) | test_03a | spool_ref still Ready | Cache file still present | positive |
124
126
| 04 |`test_04_attach_volume_to_vm`| Attach the ONTAP data volume to the running VM (hot-plug) | test_03 (`vm`, `volume`) |`volume.virtualmachineid == vm.id`; `attachVolume` job succeeds | FlexVol `online`; after attach, a data file matching volume UUID present in FlexVol (`list_files_in_volume`) | positive |
125
127
| 05 |`test_05_stop_vm_export_retained`| Stop the running VM with volume attached | test_04 |`vm.state == "Stopped"`| FlexVol still `online`; NFS export policy still present | positive |
126
128
| 06 |`test_06_start_vm_volume_accessible`| Start the stopped VM | test_05 |`vm.state == "Running"`| FlexVol still `online`| positive |
127
129
| 07 |`test_07_detach_volume_from_vm`| Hot-detach the ONTAP volume from the running VM (TDS Detach NFS3) | test_06 (`vm`, `volume`) |`volume.virtualmachineid` cleared; `volume.state == "Ready"`| FlexVol still `online`; data file **still present** (NFS3: file persists until `deleteVolume`, not on detach) | positive |
128
-
| 08 |`test_08_destroy_vm_and_cleanup`| Destroy VM (expunge), delete volume, enter maintenance, delete pool | test_07 | VM no longer listed; volume no longer listed; pool no longer listed | FlexVol deleted; export policy deleted | cleanup |
130
+
| 08 |`test_08_destroy_vm_and_cleanup`| Destroy VM (expunge), delete volume, enter maintenance, force-delete pool | test_07 | VM no longer listed; spool_ref still Ready after VM expunge; volume no longer listed; pool no longer listed | Cache file present after VM expunge; FlexVol deleted; export policy deleted | cleanup |
129
131
130
132
---
131
133
@@ -206,23 +208,55 @@ Each suite is sequential — tests must run in numbered order; each step builds
**Total:**8 tests | **Scope:** end-to-end — iSCSI pool, data volume (LUN), running VM, attach/stop/start/detach lifecycle
211
+
**Total:**10 tests | **Scope:** end-to-end — iSCSI pool, data volume (LUN), running VM (ROOT on the ONTAP pool via a tagged compute offering), `cs_tmpl_<templateId>` LUN cache seed / reuse / survive VM delete, attach/stop/start/detach lifecycle
210
212
211
213
| # | Test method | Goal | Depends on | CloudStack success criteria | ONTAP success criteria | Type |
| 02 |`test_02_create_ontap_data_volume`| Allocate a CloudStack data volume (creates a LUN in the FlexVol) | test_01 (`pool`) | Volume non-None | ≥1 LUN in FlexVol | positive |
215
-
| 03 |`test_03_deploy_vm`| Deploy VM using first ready KVM template; verify 0 LUN-maps exist before attach | test_02 (`volume`) |`vm.state == "Running"`; 0 LUN-maps on ONTAP | 0 LUN-maps (`list_lun_maps_for_volume` returns empty) | positive |
217
+
| 03 |`test_03_deploy_vm`| Deploy VM with the tagged SO — ROOT on ONTAP; seeds `cs_tmpl_*`; verify 0 data-volume LUN-maps before attach | test_02 (`volume`) |`vm.state == "Running"`; ROOT on pool; spool_ref Ready (`local_path` = LUN uuid) | Exactly one `/vol/<flex>/cs_tmpl_<id>` LUN; 0 data-volume LUN-maps | positive |
218
+
| 03a |`test_03a_deploy_second_vm_reuses_template_cache`| Deploy VM-2 — reuse cache | test_03 | VM-2 Running; ROOT on pool; still one spool_ref | Still one `cs_tmpl_*`; non-cache LUN count +1 | positive |
219
+
| 03b |`test_03b_expunge_second_vm_template_cache_survives`| Expunge VM-2 — cache LUN remains | test_03a | spool_ref still Ready | VM-2 ROOT LUN gone (non-cache count back to baseline); `cs_tmpl_*` still present | positive |
216
220
| 04 |`test_04_attach_volume_to_vm`| Hot-attach the ONTAP iSCSI volume to the running VM — a LUN-map is created (TDS SN 27) | test_03 (`vm`, `volume`) |`volume.virtualmachineid == vm.id`| ≥1 LUN-map linking the LUN to the host's igroup | positive |
217
221
| 05 |`test_05_stop_vm_lun_unmapped`| Stop VM — LUN-maps must be removed (TDS VM Stop iSCSI) | test_04 |`vm.state == "Stopped"`| 0 LUN-maps; LUN itself **still present** in FlexVol | positive |
218
222
| 06 |`test_06_start_vm_lun_remapped`| Start VM — LUN-maps must be re-created (TDS VM Start iSCSI) | test_05 |`vm.state == "Running"`| ≥1 LUN-map re-created | positive |
219
223
| 07 |`test_07_detach_volume_from_vm`| Hot-detach the iSCSI volume from the running VM (TDS Detach iSCSI) | test_06 (`vm`, `volume`) |`volume.virtualmachineid` cleared | 0 LUN-maps; LUN still in FlexVol | positive ⚠️ |
220
-
| 08 |`test_08_destroy_vm_and_cleanup`| Destroy VM (expunge), delete volume, enter maintenance, delete pool | test_07 | VM gone; volume gone; pool gone | FlexVol deleted; all LUNs and igroups deleted | cleanup |
224
+
| 08 |`test_08_destroy_vm_and_cleanup`| Destroy VM (expunge), delete volume, enter maintenance, delete pool | test_07 | VM gone; spool_ref still Ready after VM expunge; volume gone; pool gone |`cs_tmpl_*` present after VM expunge; FlexVol deleted; all LUNs and igroups deleted | cleanup |
221
225
222
226
> ⚠️ **test_07 known status:** iSCSI hot-detach from a running VM relies on the KVM guest acknowledging the SCSI device removal. On this environment the guest does not acknowledge in time, causing CloudStack error 530. This is a KVM-host-level or guest-template limitation, not a test code defect. All other 61 tests pass.
223
227
224
228
---
225
229
230
+
## Suite 11 — NFS3 Template Cache Negative / Boundary
| 01 |`test_01_tag_mismatch_does_not_seed_cache`| SO tags ≠ pool tags | setUpClass | Deploy may succeed elsewhere; ROOT not on ONTAP pool; no `template_spool_ref` for pool | No cache file for template on FlexVol | negative |
240
+
| 02 |`test_02_undersized_pool_deploy_fails`| Matching tags but `capacitybytes` ≪ template size | setUpClass | Deploy fails / never Running; spool_ref not Ready/DOWNLOADED | No cache file | negative |
241
+
| 03 |`test_03_deleted_cache_blocks_reuse`| Seed cache, delete file out-of-band, redeploy | setUpClass | spool_ref still Ready after ONTAP delete; second deploy fails | Cache file absent after delete | negative |
242
+
243
+
---
244
+
245
+
## Suite 12 — iSCSI Template Cache Negative / Boundary
| 01 |`test_01_tag_mismatch_does_not_seed_cache`| SO tags ≠ pool tags | setUpClass | ROOT not on ONTAP pool; no `template_spool_ref`| No `cs_tmpl_*` LUN | negative |
255
+
| 02 |`test_02_undersized_pool_deploy_fails`| Matching tags but undersized capacity | setUpClass | Deploy fails; spool_ref not Ready/DOWNLOADED | No `cs_tmpl_*` LUN | negative |
256
+
| 03 |`test_03_deleted_cache_blocks_reuse`| Seed cache, delete LUN out-of-band, redeploy | setUpClass | spool_ref still Ready; second deploy fails |`cs_tmpl_*` absent after delete | negative |
257
+
258
+
---
259
+
226
260
## Cross-suite summary
227
261
228
262
| Suite | Protocol | Scope | Tests | Status |
@@ -231,10 +265,12 @@ Each suite is sequential — tests must run in numbered order; each step builds
231
265
| NFS3 Pool with Volumes | NFS3 | Cluster | 7 | ✅ |
0 commit comments