Merge ~raharper/curtin:vmtest/enable-h-series into curtin:master

Proposed by Ryan Harper
Status: Merged
Approved by: Michael Hudson-Doyle
Approved revision: 2708cf61883592b7c8a00427acceed036fa20810
Merge reported by: Server Team CI bot
Merged at revision: not available
Proposed branch: ~raharper/curtin:vmtest/enable-h-series
Merge into: curtin:master
Diff against target: 1095 lines (+390/-19)
49 files modified
tests/vmtests/releases.py (+9/-0)
tests/vmtests/test_apt_config_cmd.py (+4/-0)
tests/vmtests/test_basic.py (+8/-0)
tests/vmtests/test_basic_dasd.py (+4/-0)
tests/vmtests/test_bcache_basic.py (+4/-0)
tests/vmtests/test_bcache_bug1718699.py (+4/-0)
tests/vmtests/test_bcache_ceph.py (+8/-0)
tests/vmtests/test_bcache_partitions.py (+4/-0)
tests/vmtests/test_fs_battery.py (+4/-0)
tests/vmtests/test_iscsi.py (+4/-0)
tests/vmtests/test_journald_reporter.py (+4/-0)
tests/vmtests/test_lvm.py (+4/-0)
tests/vmtests/test_lvm_iscsi.py (+4/-0)
tests/vmtests/test_lvm_raid.py (+4/-0)
tests/vmtests/test_lvm_root.py (+15/-0)
tests/vmtests/test_mdadm_bcache.py (+34/-0)
tests/vmtests/test_mdadm_iscsi.py (+4/-0)
tests/vmtests/test_multipath.py (+4/-0)
tests/vmtests/test_multipath_lvm.py (+9/-0)
tests/vmtests/test_network.py (+4/-0)
tests/vmtests/test_network_alias.py (+4/-0)
tests/vmtests/test_network_bonding.py (+4/-0)
tests/vmtests/test_network_bridging.py (+4/-0)
tests/vmtests/test_network_disabled.py (+30/-19)
tests/vmtests/test_network_ipv6_static.py (+4/-0)
tests/vmtests/test_network_ipv6_vlan.py (+4/-0)
tests/vmtests/test_network_mtu.py (+4/-0)
tests/vmtests/test_network_ovs.py (+4/-0)
tests/vmtests/test_network_static.py (+4/-0)
tests/vmtests/test_network_static_routes.py (+5/-0)
tests/vmtests/test_network_vlan.py (+7/-0)
tests/vmtests/test_nvme.py (+4/-0)
tests/vmtests/test_panic.py (+4/-0)
tests/vmtests/test_pollinate_useragent.py (+4/-0)
tests/vmtests/test_preserve.py (+4/-0)
tests/vmtests/test_preserve_bcache.py (+4/-0)
tests/vmtests/test_preserve_lvm.py (+4/-0)
tests/vmtests/test_preserve_partition_wipe_vg.py (+9/-0)
tests/vmtests/test_preserve_raid.py (+4/-0)
tests/vmtests/test_raid5_bcache.py (+4/-0)
tests/vmtests/test_raid_partition_to_disk.py (+4/-0)
tests/vmtests/test_reuse_lvm_member.py (+5/-0)
tests/vmtests/test_reuse_msdos_partitions.py (+5/-0)
tests/vmtests/test_reuse_raid_member.py (+9/-0)
tests/vmtests/test_reuse_uefi_esp.py (+7/-0)
tests/vmtests/test_simple.py (+21/-0)
tests/vmtests/test_uefi_basic.py (+9/-0)
tests/vmtests/test_zfsroot.py (+10/-0)
tools/vmtest-add-release (+66/-0)
Reviewer Review Type Date Requested Status
Server Team CI bot continuous-integration Approve
curtin developers Pending
Review via email: mp+396278@code.launchpad.net

Commit message

vmtest: add Hirsute release classes, tool to add vmtest class

Add a tool to generate new release classes based on a previous
release, for example:

  ./tools/vmtest-add-release -p tests/vmtests \
    --previous-release=focal --distro-release=hirsute

User still needs to create the release class in tests/vmtests/releases.py

To post a comment you must log in.
Revision history for this message
Server Team CI bot (server-team-bot) wrote :
review: Needs Fixing (continuous-integration)
d79a227... by Ryan Harper

Add Hirsute release, add tool to update vmtest classes

1d57ef5... by Ryan Harper

Adjust class definition to match other curtin tests

2eae73b... by Ryan Harper

Ensure new class has two empty lines

4f2ae96... by Ryan Harper

Add a tool to generate new release classes based on a previous release

For example:

  ./tools/vmtest-add-release -p tests/vmtests \
    --previous-release=focal --distro-release=hirsute

User still needs to create the release class in
  tests/vmtests/releases.py

Revision history for this message
Ryan Harper (raharper) wrote :

make sync-images does not pull down the hirsute kernel variants for me; so maybe we also need to tackle that maas-daily vs maas-stable issues we see from time to time...

Revision history for this message
Server Team CI bot (server-team-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Paride Legovini (paride) wrote :

Thanks Ryan! There are flak8 failures:

https://paste.ubuntu.com/p/xbrKsbfyjF/

(We should really improve on having a public project with private CI logs. I'm trying to get a definitive answer on the public/private Jenkins issue, and see how to move forward.)

Revision history for this message
Ryan Harper (raharper) wrote :

After sorting sync-images issues, local run of:

./tools/jenkins-runner -p 12 --filter=target_release=hirsute

----------------------------------------------------------------------
Ran 923 tests in 1957.220s

OK (SKIP=139)
Thu, 14 Jan 2021 14:42:59 -0600: vmtest end [0] in 1959s

Revision history for this message
Ryan Harper (raharper) wrote :

I need to fix up tox; let me do that now.

2708cf6... by Ryan Harper

Manually fix up tox issues from automatic adding if Hirsute

The automated tool isn't perfect; mostly issues with indentation.
One more refactor of the really-long-class-names in network disabled
test case as well.

Revision history for this message
Server Team CI bot (server-team-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Michael Hudson-Doyle (mwhudson) wrote :

Thanks for this!

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/tests/vmtests/releases.py b/tests/vmtests/releases.py
2index c99ca7e..35b069b 100644
3--- a/tests/vmtests/releases.py
4+++ b/tests/vmtests/releases.py
5@@ -193,6 +193,14 @@ class _GroovyBase(_UbuntuBase):
6 subarch = "ga-20.10"
7
8
9+class _HirsuteBase(_UbuntuBase):
10+ release = "hirsute"
11+ target_release = "hirsute"
12+ mem = "2048"
13+ if _UbuntuBase.arch == "arm64":
14+ subarch = "ga-20.10"
15+
16+
17 class _Releases(object):
18 trusty = _TrustyBase
19 precise = _PreciseBase
20@@ -212,6 +220,7 @@ class _Releases(object):
21 eoan = _EoanBase
22 focal = _FocalBase
23 groovy = _GroovyBase
24+ hirsute = _HirsuteBase
25
26
27 class _CentosReleases(object):
28diff --git a/tests/vmtests/test_apt_config_cmd.py b/tests/vmtests/test_apt_config_cmd.py
29index 874efad..a95612c 100644
30--- a/tests/vmtests/test_apt_config_cmd.py
31+++ b/tests/vmtests/test_apt_config_cmd.py
32@@ -68,6 +68,10 @@ class FocalTestAptConfigCMDCMD(relbase.focal, TestAptConfigCMD):
33 __test__ = True
34
35
36+class HirsuteTestAptConfigCMDCMD(relbase.hirsute, TestAptConfigCMD):
37+ __test__ = True
38+
39+
40 class GroovyTestAptConfigCMDCMD(relbase.groovy, TestAptConfigCMD):
41 __test__ = True
42
43diff --git a/tests/vmtests/test_basic.py b/tests/vmtests/test_basic.py
44index 5723bc6..06f1f59 100644
45--- a/tests/vmtests/test_basic.py
46+++ b/tests/vmtests/test_basic.py
47@@ -259,6 +259,10 @@ class FocalTestBasic(relbase.focal, TestBasicAbs):
48 __test__ = True
49
50
51+class HirsuteTestBasic(relbase.hirsute, TestBasicAbs):
52+ __test__ = True
53+
54+
55 class GroovyTestBasic(relbase.groovy, TestBasicAbs):
56 __test__ = True
57
58@@ -379,6 +383,10 @@ class FocalTestScsiBasic(relbase.focal, TestBasicScsiAbs):
59 __test__ = True
60
61
62+class HirsuteTestScsiBasic(relbase.hirsute, TestBasicScsiAbs):
63+ __test__ = True
64+
65+
66 class GroovyTestScsiBasic(relbase.groovy, TestBasicScsiAbs):
67 __test__ = True
68
69diff --git a/tests/vmtests/test_basic_dasd.py b/tests/vmtests/test_basic_dasd.py
70index d61e1b9..49957b8 100644
71--- a/tests/vmtests/test_basic_dasd.py
72+++ b/tests/vmtests/test_basic_dasd.py
73@@ -56,6 +56,10 @@ class FocalTestBasicDasd(relbase.focal, TestBasicDasd):
74 __test__ = True
75
76
77+class HirsuteTestBasicDasd(relbase.hirsute, TestBasicDasd):
78+ __test__ = True
79+
80+
81 class GroovyTestBasicDasd(relbase.groovy, TestBasicDasd):
82 __test__ = True
83
84diff --git a/tests/vmtests/test_bcache_basic.py b/tests/vmtests/test_bcache_basic.py
85index 053225f..e9ec1ea 100644
86--- a/tests/vmtests/test_bcache_basic.py
87+++ b/tests/vmtests/test_bcache_basic.py
88@@ -68,6 +68,10 @@ class FocalBcacheBasic(relbase.focal, TestBcacheBasic):
89 __test__ = True
90
91
92+class HirsuteBcacheBasic(relbase.hirsute, TestBcacheBasic):
93+ __test__ = True
94+
95+
96 class GroovyBcacheBasic(relbase.groovy, TestBcacheBasic):
97 __test__ = True
98
99diff --git a/tests/vmtests/test_bcache_bug1718699.py b/tests/vmtests/test_bcache_bug1718699.py
100index ebb99ab..a43ec0f 100644
101--- a/tests/vmtests/test_bcache_bug1718699.py
102+++ b/tests/vmtests/test_bcache_bug1718699.py
103@@ -23,6 +23,10 @@ class FocalTestBcacheBug1718699(relbase.focal, TestBcacheBug1718699):
104 __test__ = True
105
106
107+class HirsuteTestBcacheBug1718699(relbase.hirsute, TestBcacheBug1718699):
108+ __test__ = True
109+
110+
111 class GroovyTestBcacheBug1718699(relbase.groovy, TestBcacheBug1718699):
112 __test__ = True
113
114diff --git a/tests/vmtests/test_bcache_ceph.py b/tests/vmtests/test_bcache_ceph.py
115index bff4dd4..53e050c 100644
116--- a/tests/vmtests/test_bcache_ceph.py
117+++ b/tests/vmtests/test_bcache_ceph.py
118@@ -79,6 +79,10 @@ class FocalTestBcacheCeph(relbase.focal, TestBcacheCeph):
119 __test__ = True
120
121
122+class HirsuteTestBcacheCeph(relbase.hirsute, TestBcacheCeph):
123+ __test__ = True
124+
125+
126 class GroovyTestBcacheCeph(relbase.groovy, TestBcacheCeph):
127 __test__ = True
128
129@@ -109,6 +113,10 @@ class FocalTestBcacheCephLvm(relbase.focal, TestBcacheCephLvm):
130 __test__ = True
131
132
133+class HirsuteTestBcacheCephLvm(relbase.hirsute, TestBcacheCephLvm):
134+ __test__ = True
135+
136+
137 class GroovyTestBcacheCephLvm(relbase.groovy, TestBcacheCephLvm):
138 __test__ = True
139
140diff --git a/tests/vmtests/test_bcache_partitions.py b/tests/vmtests/test_bcache_partitions.py
141index 1ffea12..a69d2ef 100644
142--- a/tests/vmtests/test_bcache_partitions.py
143+++ b/tests/vmtests/test_bcache_partitions.py
144@@ -29,6 +29,10 @@ class FocalTestBcachePartitions(relbase.focal, TestBcachePartitions):
145 __test__ = True
146
147
148+class HirsuteTestBcachePartitions(relbase.hirsute, TestBcachePartitions):
149+ __test__ = True
150+
151+
152 class GroovyTestBcachePartitions(relbase.groovy, TestBcachePartitions):
153 __test__ = True
154
155diff --git a/tests/vmtests/test_fs_battery.py b/tests/vmtests/test_fs_battery.py
156index 7177fea..7d7b494 100644
157--- a/tests/vmtests/test_fs_battery.py
158+++ b/tests/vmtests/test_fs_battery.py
159@@ -243,6 +243,10 @@ class FocalTestFsBattery(relbase.focal, TestFsBattery):
160 __test__ = True
161
162
163+class HirsuteTestFsBattery(relbase.hirsute, TestFsBattery):
164+ __test__ = True
165+
166+
167 class GroovyTestFsBattery(relbase.groovy, TestFsBattery):
168 __test__ = True
169
170diff --git a/tests/vmtests/test_iscsi.py b/tests/vmtests/test_iscsi.py
171index f3406cd..c46ac30 100644
172--- a/tests/vmtests/test_iscsi.py
173+++ b/tests/vmtests/test_iscsi.py
174@@ -76,6 +76,10 @@ class FocalTestIscsiBasic(relbase.focal, TestBasicIscsiAbs):
175 __test__ = True
176
177
178+class HirsuteTestIscsiBasic(relbase.hirsute, TestBasicIscsiAbs):
179+ __test__ = True
180+
181+
182 class GroovyTestIscsiBasic(relbase.groovy, TestBasicIscsiAbs):
183 __test__ = True
184
185diff --git a/tests/vmtests/test_journald_reporter.py b/tests/vmtests/test_journald_reporter.py
186index ff003a5..3979aa7 100644
187--- a/tests/vmtests/test_journald_reporter.py
188+++ b/tests/vmtests/test_journald_reporter.py
189@@ -36,6 +36,10 @@ class FocalTestJournaldReporter(relbase.focal, TestJournaldReporter):
190 __test__ = True
191
192
193+class HirsuteTestJournaldReporter(relbase.hirsute, TestJournaldReporter):
194+ __test__ = True
195+
196+
197 class GroovyTestJournaldReporter(relbase.groovy, TestJournaldReporter):
198 __test__ = True
199
200diff --git a/tests/vmtests/test_lvm.py b/tests/vmtests/test_lvm.py
201index eb65c32..d169eeb 100644
202--- a/tests/vmtests/test_lvm.py
203+++ b/tests/vmtests/test_lvm.py
204@@ -81,6 +81,10 @@ class FocalTestLvm(relbase.focal, TestLvmAbs):
205 __test__ = True
206
207
208+class HirsuteTestLvm(relbase.hirsute, TestLvmAbs):
209+ __test__ = True
210+
211+
212 class GroovyTestLvm(relbase.groovy, TestLvmAbs):
213 __test__ = True
214
215diff --git a/tests/vmtests/test_lvm_iscsi.py b/tests/vmtests/test_lvm_iscsi.py
216index e0b9606..0cf020e 100644
217--- a/tests/vmtests/test_lvm_iscsi.py
218+++ b/tests/vmtests/test_lvm_iscsi.py
219@@ -99,6 +99,10 @@ class FocalTestIscsiLvm(relbase.focal, TestLvmIscsiAbs):
220 __test__ = True
221
222
223+class HirsuteTestIscsiLvm(relbase.hirsute, TestLvmIscsiAbs):
224+ __test__ = True
225+
226+
227 class GroovyTestIscsiLvm(relbase.groovy, TestLvmIscsiAbs):
228 __test__ = True
229
230diff --git a/tests/vmtests/test_lvm_raid.py b/tests/vmtests/test_lvm_raid.py
231index 5fe7993..3fe71a9 100644
232--- a/tests/vmtests/test_lvm_raid.py
233+++ b/tests/vmtests/test_lvm_raid.py
234@@ -59,5 +59,9 @@ class FocalTestLvmOverRaid(relbase.focal, TestLvmOverRaidAbs):
235 __test__ = True
236
237
238+class HirsuteTestLvmOverRaid(relbase.hirsute, TestLvmOverRaidAbs):
239+ __test__ = True
240+
241+
242 class GroovyTestLvmOverRaid(relbase.groovy, TestLvmOverRaidAbs):
243 __test__ = True
244diff --git a/tests/vmtests/test_lvm_root.py b/tests/vmtests/test_lvm_root.py
245index 12b8ea8..c910160 100644
246--- a/tests/vmtests/test_lvm_root.py
247+++ b/tests/vmtests/test_lvm_root.py
248@@ -94,6 +94,13 @@ class FocalTestLvmRootExt4(relbase.focal, TestLvmRootAbs):
249 }
250
251
252+class HirsuteTestLvmRootExt4(relbase.hirsute, TestLvmRootAbs):
253+ __test__ = True
254+ conf_replace = {
255+ '__ROOTFS_FORMAT__': 'ext4',
256+ }
257+
258+
259 class GroovyTestLvmRootExt4(relbase.groovy, TestLvmRootAbs):
260 __test__ = True
261 conf_replace = {
262@@ -147,6 +154,14 @@ class FocalTestUefiLvmRootExt4(relbase.focal, TestUefiLvmRootAbs):
263 }
264
265
266+class HirsuteTestUefiLvmRootExt4(relbase.hirsute, TestUefiLvmRootAbs):
267+ __test__ = True
268+ conf_replace = {
269+ '__BOOTFS_FORMAT__': 'ext4',
270+ '__ROOTFS_FORMAT__': 'ext4',
271+ }
272+
273+
274 class GroovyTestUefiLvmRootExt4(relbase.groovy, TestUefiLvmRootAbs):
275 __test__ = True
276 conf_replace = {
277diff --git a/tests/vmtests/test_mdadm_bcache.py b/tests/vmtests/test_mdadm_bcache.py
278index ce909f8..62f25e7 100644
279--- a/tests/vmtests/test_mdadm_bcache.py
280+++ b/tests/vmtests/test_mdadm_bcache.py
281@@ -158,6 +158,10 @@ class FocalTestMdadmBcache(relbase.focal, TestMdadmBcacheAbs):
282 __test__ = True
283
284
285+class HirsuteTestMdadmBcache(relbase.hirsute, TestMdadmBcacheAbs):
286+ __test__ = True
287+
288+
289 class GroovyTestMdadmBcache(relbase.groovy, TestMdadmBcacheAbs):
290 __test__ = True
291
292@@ -203,6 +207,10 @@ class FocalTestMirrorboot(relbase.focal, TestMirrorbootAbs):
293 __test__ = True
294
295
296+class HirsuteTestMirrorboot(relbase.hirsute, TestMirrorbootAbs):
297+ __test__ = True
298+
299+
300 class GroovyTestMirrorboot(relbase.groovy, TestMirrorbootAbs):
301 __test__ = True
302
303@@ -252,6 +260,11 @@ class FocalTestMirrorbootPartitions(relbase.focal,
304 __test__ = True
305
306
307+class HirsuteTestMirrorbootPartitions(relbase.hirsute,
308+ TestMirrorbootPartitionsAbs):
309+ __test__ = True
310+
311+
312 class GroovyTestMirrorbootPartitions(relbase.groovy,
313 TestMirrorbootPartitionsAbs):
314 __test__ = True
315@@ -347,6 +360,11 @@ class FocalTestMirrorbootPartitionsUEFI(relbase.focal,
316 __test__ = True
317
318
319+class HirsuteTestMirrorbootPartitionsUEFI(relbase.hirsute,
320+ TestMirrorbootPartitionsUEFIAbs):
321+ __test__ = True
322+
323+
324 class GroovyTestMirrorbootPartitionsUEFI(relbase.groovy,
325 TestMirrorbootPartitionsUEFIAbs):
326 __test__ = True
327@@ -396,6 +414,10 @@ class FocalTestRaid5boot(relbase.focal, TestRaid5bootAbs):
328 __test__ = True
329
330
331+class HirsuteTestRaid5boot(relbase.hirsute, TestRaid5bootAbs):
332+ __test__ = True
333+
334+
335 class GroovyTestRaid5boot(relbase.groovy, TestRaid5bootAbs):
336 __test__ = True
337
338@@ -457,6 +479,10 @@ class FocalTestRaid6boot(relbase.focal, TestRaid6bootAbs):
339 __test__ = True
340
341
342+class HirsuteTestRaid6boot(relbase.hirsute, TestRaid6bootAbs):
343+ __test__ = True
344+
345+
346 class GroovyTestRaid6boot(relbase.groovy, TestRaid6bootAbs):
347 __test__ = True
348
349@@ -504,6 +530,10 @@ class FocalTestRaid10boot(relbase.focal, TestRaid10bootAbs):
350 __test__ = True
351
352
353+class HirsuteTestRaid10boot(relbase.hirsute, TestRaid10bootAbs):
354+ __test__ = True
355+
356+
357 class GroovyTestRaid10boot(relbase.groovy, TestRaid10bootAbs):
358 __test__ = True
359
360@@ -608,6 +638,10 @@ class FocalTestAllindata(relbase.focal, TestAllindataAbs):
361 __test__ = True
362
363
364+class HirsuteTestAllindata(relbase.hirsute, TestAllindataAbs):
365+ __test__ = True
366+
367+
368 class GroovyTestAllindata(relbase.groovy, TestAllindataAbs):
369 __test__ = True
370
371diff --git a/tests/vmtests/test_mdadm_iscsi.py b/tests/vmtests/test_mdadm_iscsi.py
372index 7e6fbf6..6ad6b72 100644
373--- a/tests/vmtests/test_mdadm_iscsi.py
374+++ b/tests/vmtests/test_mdadm_iscsi.py
375@@ -54,6 +54,10 @@ class FocalTestIscsiMdadm(relbase.focal, TestMdadmIscsiAbs):
376 __test__ = True
377
378
379+class HirsuteTestIscsiMdadm(relbase.hirsute, TestMdadmIscsiAbs):
380+ __test__ = True
381+
382+
383 class GroovyTestIscsiMdadm(relbase.groovy, TestMdadmIscsiAbs):
384 __test__ = True
385
386diff --git a/tests/vmtests/test_multipath.py b/tests/vmtests/test_multipath.py
387index 6d9c5df..f924d25 100644
388--- a/tests/vmtests/test_multipath.py
389+++ b/tests/vmtests/test_multipath.py
390@@ -162,6 +162,10 @@ class FocalTestMultipathBasic(relbase.focal, TestMultipathBasicAbs):
391 __test__ = True
392
393
394+class HirsuteTestMultipathBasic(relbase.hirsute, TestMultipathBasicAbs):
395+ __test__ = True
396+
397+
398 class GroovyTestMultipathBasic(relbase.groovy, TestMultipathBasicAbs):
399 __test__ = True
400
401diff --git a/tests/vmtests/test_multipath_lvm.py b/tests/vmtests/test_multipath_lvm.py
402index c5a1e42..f5f5537 100644
403--- a/tests/vmtests/test_multipath_lvm.py
404+++ b/tests/vmtests/test_multipath_lvm.py
405@@ -60,6 +60,10 @@ class FocalTestMultipathLvm(relbase.focal, TestMultipathLvmAbs):
406 __test__ = True
407
408
409+class HirsuteTestMultipathLvm(relbase.hirsute, TestMultipathLvmAbs):
410+ __test__ = True
411+
412+
413 class GroovyTestMultipathLvm(relbase.groovy, TestMultipathLvmAbs):
414 __test__ = True
415
416@@ -73,6 +77,11 @@ class FocalTestMultipathLvmPartWipe(relbase.focal,
417 __test__ = True
418
419
420+class HirsuteTestMultipathLvmPartWipe(relbase.hirsute,
421+ TestMultipathLvmPartWipeAbs):
422+ __test__ = True
423+
424+
425 class GroovyTestMultipathLvmPartWipe(relbase.groovy,
426 TestMultipathLvmPartWipeAbs):
427 __test__ = True
428diff --git a/tests/vmtests/test_network.py b/tests/vmtests/test_network.py
429index 43a7c6b..db16bd4 100644
430--- a/tests/vmtests/test_network.py
431+++ b/tests/vmtests/test_network.py
432@@ -478,6 +478,10 @@ class FocalTestNetworkBasic(relbase.focal, TestNetworkBasicAbs):
433 __test__ = True
434
435
436+class HirsuteTestNetworkBasic(relbase.hirsute, TestNetworkBasicAbs):
437+ __test__ = True
438+
439+
440 class GroovyTestNetworkBasic(relbase.groovy, TestNetworkBasicAbs):
441 __test__ = True
442
443diff --git a/tests/vmtests/test_network_alias.py b/tests/vmtests/test_network_alias.py
444index bc1fb22..9f460fa 100644
445--- a/tests/vmtests/test_network_alias.py
446+++ b/tests/vmtests/test_network_alias.py
447@@ -56,6 +56,10 @@ class FocalTestNetworkAlias(relbase.focal, TestNetworkAliasAbs):
448 __test__ = True
449
450
451+class HirsuteTestNetworkAlias(relbase.hirsute, TestNetworkAliasAbs):
452+ __test__ = True
453+
454+
455 class GroovyTestNetworkAlias(relbase.groovy, TestNetworkAliasAbs):
456 __test__ = True
457
458diff --git a/tests/vmtests/test_network_bonding.py b/tests/vmtests/test_network_bonding.py
459index 6c6dd6d..f58065d 100644
460--- a/tests/vmtests/test_network_bonding.py
461+++ b/tests/vmtests/test_network_bonding.py
462@@ -61,6 +61,10 @@ class FocalTestBonding(relbase.focal, TestNetworkBondingAbs):
463 __test__ = True
464
465
466+class HirsuteTestBonding(relbase.hirsute, TestNetworkBondingAbs):
467+ __test__ = True
468+
469+
470 class GroovyTestBonding(relbase.groovy, TestNetworkBondingAbs):
471 __test__ = True
472
473diff --git a/tests/vmtests/test_network_bridging.py b/tests/vmtests/test_network_bridging.py
474index 9ecd2f6..b0d5962 100644
475--- a/tests/vmtests/test_network_bridging.py
476+++ b/tests/vmtests/test_network_bridging.py
477@@ -240,6 +240,10 @@ class FocalTestBridging(relbase.focal, TestBridgeNetworkAbs):
478 __test__ = True
479
480
481+class HirsuteTestBridging(relbase.hirsute, TestBridgeNetworkAbs):
482+ __test__ = True
483+
484+
485 class GroovyTestBridging(relbase.groovy, TestBridgeNetworkAbs):
486 __test__ = True
487
488diff --git a/tests/vmtests/test_network_disabled.py b/tests/vmtests/test_network_disabled.py
489index ea8dae2..9079f8e 100644
490--- a/tests/vmtests/test_network_disabled.py
491+++ b/tests/vmtests/test_network_disabled.py
492@@ -33,6 +33,9 @@ class CurtinDisableNetworkRendering(TestNetworkBaseTestsAbs):
493 raise SkipTest('not available on %s' % self.__class__)
494
495
496+TestKlass1 = CurtinDisableNetworkRendering
497+
498+
499 class CurtinDisableCloudInitNetworking(TestNetworkBaseTestsAbs):
500 """ Test curtin can disable cloud-init networking in the target system """
501 conf_file = "examples/tests/network_config_disabled.yaml"
502@@ -44,45 +47,53 @@ class CurtinDisableCloudInitNetworking(TestNetworkBaseTestsAbs):
503 raise SkipTest('not available on %s' % self.__class__)
504
505
506-class CurtinDisableCloudInitNetworkingVersion1(
507- CurtinDisableCloudInitNetworking
508-):
509+TestKlass2 = CurtinDisableCloudInitNetworking
510+
511+
512+class CurtinDisableCloudInitNetworkingVersion1(TestKlass2):
513 """ Test curtin can disable cloud-init networking in the target system
514 with version key. """
515 conf_file = "examples/tests/network_config_disabled_with_version.yaml"
516
517
518-class FocalCurtinDisableNetworkRendering(relbase.focal,
519- CurtinDisableNetworkRendering):
520+TestKlass3 = CurtinDisableCloudInitNetworkingVersion1
521+
522+
523+class FocalCurtinDisableNetworkRendering(relbase.focal, TestKlass1):
524+ __test__ = True
525+
526+
527+class HirsuteCurtinDisableNetworkRendering(relbase.hirsute, TestKlass1):
528+ __test__ = True
529+
530+
531+class GroovyCurtinDisableNetworkRendering(relbase.groovy, TestKlass1):
532+ __test__ = True
533+
534+
535+class FocalCurtinDisableCloudInitNetworking(relbase.focal, TestKlass2):
536 __test__ = True
537
538
539-class GroovyCurtinDisableNetworkRendering(relbase.groovy,
540- CurtinDisableNetworkRendering):
541+class HirsuteCurtinDisableCloudInitNetworking(relbase.hirsute, TestKlass2):
542 __test__ = True
543
544
545-class FocalCurtinDisableCloudInitNetworkingVersion1(
546- relbase.focal,
547- CurtinDisableCloudInitNetworkingVersion1
548-):
549+class GroovyCurtinDisableCloudInitNetworking(relbase.groovy, TestKlass2):
550 __test__ = True
551
552
553-class GroovyCurtinDisableCloudInitNetworkingVersion1(
554- relbase.groovy,
555- CurtinDisableCloudInitNetworkingVersion1
556-):
557+class FocalCurtinDisableCloudInitNetworkingVersion1(relbase.focal, TestKlass3):
558 __test__ = True
559
560
561-class FocalCurtinDisableCloudInitNetworking(relbase.focal,
562- CurtinDisableCloudInitNetworking):
563+class HirsuteCurtinDisableCloudInitNetworkingVersion1(relbase.hirsute,
564+ TestKlass3):
565 __test__ = True
566
567
568-class GroovyCurtinDisableCloudInitNetworking(relbase.groovy,
569- CurtinDisableCloudInitNetworking):
570+class GroovyCurtinDisableCloudInitNetworkingVersion1(relbase.groovy,
571+ TestKlass3):
572 __test__ = True
573
574
575diff --git a/tests/vmtests/test_network_ipv6_static.py b/tests/vmtests/test_network_ipv6_static.py
576index 28ff697..c3e5b5a 100644
577--- a/tests/vmtests/test_network_ipv6_static.py
578+++ b/tests/vmtests/test_network_ipv6_static.py
579@@ -27,6 +27,10 @@ class FocalTestNetworkIPV6Static(relbase.focal, TestNetworkIPV6StaticAbs):
580 __test__ = True
581
582
583+class HirsuteTestNetworkIPV6Static(relbase.hirsute, TestNetworkIPV6StaticAbs):
584+ __test__ = True
585+
586+
587 class GroovyTestNetworkIPV6Static(relbase.groovy, TestNetworkIPV6StaticAbs):
588 __test__ = True
589
590diff --git a/tests/vmtests/test_network_ipv6_vlan.py b/tests/vmtests/test_network_ipv6_vlan.py
591index 226f52e..96c056b 100644
592--- a/tests/vmtests/test_network_ipv6_vlan.py
593+++ b/tests/vmtests/test_network_ipv6_vlan.py
594@@ -26,6 +26,10 @@ class FocalTestNetworkIPV6Vlan(relbase.focal, TestNetworkIPV6VlanAbs):
595 __test__ = True
596
597
598+class HirsuteTestNetworkIPV6Vlan(relbase.hirsute, TestNetworkIPV6VlanAbs):
599+ __test__ = True
600+
601+
602 class GroovyTestNetworkIPV6Vlan(relbase.groovy, TestNetworkIPV6VlanAbs):
603 __test__ = True
604
605diff --git a/tests/vmtests/test_network_mtu.py b/tests/vmtests/test_network_mtu.py
606index c70b9e0..8e6e57c 100644
607--- a/tests/vmtests/test_network_mtu.py
608+++ b/tests/vmtests/test_network_mtu.py
609@@ -193,6 +193,10 @@ class FocalTestNetworkMtu(relbase.focal, TestNetworkMtuNetworkdAbs):
610 __test__ = True
611
612
613+class HirsuteTestNetworkMtu(relbase.hirsute, TestNetworkMtuNetworkdAbs):
614+ __test__ = True
615+
616+
617 class GroovyTestNetworkMtu(relbase.groovy, TestNetworkMtuNetworkdAbs):
618 __test__ = True
619
620diff --git a/tests/vmtests/test_network_ovs.py b/tests/vmtests/test_network_ovs.py
621index 0cee17e..a32d637 100644
622--- a/tests/vmtests/test_network_ovs.py
623+++ b/tests/vmtests/test_network_ovs.py
624@@ -38,6 +38,10 @@ class FocalTestNetworkOvs(relbase.focal, TestNetworkOvsAbs):
625 __test__ = True
626
627
628+class HirsuteTestNetworkOvs(relbase.hirsute, TestNetworkOvsAbs):
629+ __test__ = True
630+
631+
632 class GroovyTestNetworkOvs(relbase.groovy, TestNetworkOvsAbs):
633 __test__ = True
634
635diff --git a/tests/vmtests/test_network_static.py b/tests/vmtests/test_network_static.py
636index e0abd54..abcbb75 100644
637--- a/tests/vmtests/test_network_static.py
638+++ b/tests/vmtests/test_network_static.py
639@@ -32,6 +32,10 @@ class FocalTestNetworkStatic(relbase.focal, TestNetworkStaticAbs):
640 __test__ = True
641
642
643+class HirsuteTestNetworkStatic(relbase.hirsute, TestNetworkStaticAbs):
644+ __test__ = True
645+
646+
647 class GroovyTestNetworkStatic(relbase.groovy, TestNetworkStaticAbs):
648 __test__ = True
649
650diff --git a/tests/vmtests/test_network_static_routes.py b/tests/vmtests/test_network_static_routes.py
651index f99d9d5..e158f9a 100644
652--- a/tests/vmtests/test_network_static_routes.py
653+++ b/tests/vmtests/test_network_static_routes.py
654@@ -33,6 +33,11 @@ class FocalTestNetworkStaticRoutes(relbase.focal,
655 __test__ = True
656
657
658+class HirsuteTestNetworkStaticRoutes(relbase.hirsute,
659+ TestNetworkStaticRoutesAbs):
660+ __test__ = True
661+
662+
663 class GroovyTestNetworkStaticRoutes(relbase.groovy,
664 TestNetworkStaticRoutesAbs):
665 __test__ = True
666diff --git a/tests/vmtests/test_network_vlan.py b/tests/vmtests/test_network_vlan.py
667index 691ba83..af52af0 100644
668--- a/tests/vmtests/test_network_vlan.py
669+++ b/tests/vmtests/test_network_vlan.py
670@@ -83,6 +83,13 @@ class FocalTestNetworkVlan(relbase.focal, TestNetworkVlanAbs):
671 return super().test_ip_output()
672
673
674+class HirsuteTestNetworkVlan(relbase.hirsute, TestNetworkVlanAbs):
675+ __test__ = True
676+
677+ def test_ip_output(self):
678+ return super().test_ip_output()
679+
680+
681 class GroovyTestNetworkVlan(relbase.groovy, TestNetworkVlanAbs):
682 __test__ = True
683
684diff --git a/tests/vmtests/test_nvme.py b/tests/vmtests/test_nvme.py
685index 39f9f3c..9531a80 100644
686--- a/tests/vmtests/test_nvme.py
687+++ b/tests/vmtests/test_nvme.py
688@@ -143,6 +143,10 @@ class FocalTestNvmeBcache(relbase.focal, TestNvmeBcacheAbs):
689 __test__ = True
690
691
692+class HirsuteTestNvmeBcache(relbase.hirsute, TestNvmeBcacheAbs):
693+ __test__ = True
694+
695+
696 class GroovyTestNvmeBcache(relbase.groovy, TestNvmeBcacheAbs):
697 __test__ = True
698
699diff --git a/tests/vmtests/test_panic.py b/tests/vmtests/test_panic.py
700index 7b1fdbe..e841f2a 100644
701--- a/tests/vmtests/test_panic.py
702+++ b/tests/vmtests/test_panic.py
703@@ -29,6 +29,10 @@ class FocalTestInstallPanic(relbase.focal, TestInstallPanic):
704 __test__ = True
705
706
707+class HirsuteTestInstallPanic(relbase.hirsute, TestInstallPanic):
708+ __test__ = True
709+
710+
711 class GroovyTestInstallPanic(relbase.groovy, TestInstallPanic):
712 __test__ = True
713
714diff --git a/tests/vmtests/test_pollinate_useragent.py b/tests/vmtests/test_pollinate_useragent.py
715index ed14719..4aeefd8 100644
716--- a/tests/vmtests/test_pollinate_useragent.py
717+++ b/tests/vmtests/test_pollinate_useragent.py
718@@ -65,6 +65,10 @@ class FocalTestPollinateUserAgent(relbase.focal, TestPollinateUserAgent):
719 __test__ = True
720
721
722+class HirsuteTestPollinateUserAgent(relbase.hirsute, TestPollinateUserAgent):
723+ __test__ = True
724+
725+
726 class GroovyTestPollinateUserAgent(relbase.groovy, TestPollinateUserAgent):
727 __test__ = True
728
729diff --git a/tests/vmtests/test_preserve.py b/tests/vmtests/test_preserve.py
730index 998218c..28dd34f 100644
731--- a/tests/vmtests/test_preserve.py
732+++ b/tests/vmtests/test_preserve.py
733@@ -29,6 +29,10 @@ class FocalTestPreserve(relbase.focal, TestPreserve):
734 __test__ = True
735
736
737+class HirsuteTestPreserve(relbase.hirsute, TestPreserve):
738+ __test__ = True
739+
740+
741 class GroovyTestPreserve(relbase.groovy, TestPreserve):
742 __test__ = True
743
744diff --git a/tests/vmtests/test_preserve_bcache.py b/tests/vmtests/test_preserve_bcache.py
745index bd91c5a..2e6b412 100644
746--- a/tests/vmtests/test_preserve_bcache.py
747+++ b/tests/vmtests/test_preserve_bcache.py
748@@ -60,6 +60,10 @@ class FocalTestPreserveBcache(relbase.focal, TestPreserveBcache):
749 __test__ = True
750
751
752+class HirsuteTestPreserveBcache(relbase.hirsute, TestPreserveBcache):
753+ __test__ = True
754+
755+
756 class GroovyTestPreserveBcache(relbase.groovy, TestPreserveBcache):
757 __test__ = True
758
759diff --git a/tests/vmtests/test_preserve_lvm.py b/tests/vmtests/test_preserve_lvm.py
760index 0ed7ad4..274e9c6 100644
761--- a/tests/vmtests/test_preserve_lvm.py
762+++ b/tests/vmtests/test_preserve_lvm.py
763@@ -73,6 +73,10 @@ class FocalTestLvmPreserve(relbase.focal, TestLvmPreserveAbs):
764 __test__ = True
765
766
767+class HirsuteTestLvmPreserve(relbase.hirsute, TestLvmPreserveAbs):
768+ __test__ = True
769+
770+
771 class GroovyTestLvmPreserve(relbase.groovy, TestLvmPreserveAbs):
772 __test__ = True
773
774diff --git a/tests/vmtests/test_preserve_partition_wipe_vg.py b/tests/vmtests/test_preserve_partition_wipe_vg.py
775index 58b1f65..2469615 100644
776--- a/tests/vmtests/test_preserve_partition_wipe_vg.py
777+++ b/tests/vmtests/test_preserve_partition_wipe_vg.py
778@@ -29,6 +29,10 @@ class FocalTestPreserveWipeLvm(relbase.focal, TestPreserveWipeLvm):
779 __test__ = True
780
781
782+class HirsuteTestPreserveWipeLvm(relbase.hirsute, TestPreserveWipeLvm):
783+ __test__ = True
784+
785+
786 class GroovyTestPreserveWipeLvm(relbase.groovy, TestPreserveWipeLvm):
787 __test__ = True
788
789@@ -52,6 +56,11 @@ class FocalTestPreserveWipeLvmSimple(relbase.focal, TestPreserveWipeLvmSimple):
790 __test__ = True
791
792
793+class HirsuteTestPreserveWipeLvmSimple(relbase.hirsute,
794+ TestPreserveWipeLvmSimple):
795+ __test__ = True
796+
797+
798 class GroovyTestPreserveWipeLvmSimple(relbase.groovy,
799 TestPreserveWipeLvmSimple):
800 __test__ = True
801diff --git a/tests/vmtests/test_preserve_raid.py b/tests/vmtests/test_preserve_raid.py
802index 15f2f50..7fc6daa 100644
803--- a/tests/vmtests/test_preserve_raid.py
804+++ b/tests/vmtests/test_preserve_raid.py
805@@ -29,6 +29,10 @@ class FocalTestPreserveRAID(relbase.focal, TestPreserveRAID):
806 __test__ = True
807
808
809+class HirsuteTestPreserveRAID(relbase.hirsute, TestPreserveRAID):
810+ __test__ = True
811+
812+
813 class GroovyTestPreserveRAID(relbase.groovy, TestPreserveRAID):
814 __test__ = True
815
816diff --git a/tests/vmtests/test_raid5_bcache.py b/tests/vmtests/test_raid5_bcache.py
817index 12c1878..493c0fd 100644
818--- a/tests/vmtests/test_raid5_bcache.py
819+++ b/tests/vmtests/test_raid5_bcache.py
820@@ -92,6 +92,10 @@ class FocalTestRaid5Bcache(relbase.focal, TestMdadmBcacheAbs):
821 __test__ = True
822
823
824+class HirsuteTestRaid5Bcache(relbase.hirsute, TestMdadmBcacheAbs):
825+ __test__ = True
826+
827+
828 class GroovyTestRaid5Bcache(relbase.groovy, TestMdadmBcacheAbs):
829 __test__ = True
830
831diff --git a/tests/vmtests/test_raid_partition_to_disk.py b/tests/vmtests/test_raid_partition_to_disk.py
832index 4635713..aaa73f2 100644
833--- a/tests/vmtests/test_raid_partition_to_disk.py
834+++ b/tests/vmtests/test_raid_partition_to_disk.py
835@@ -22,6 +22,10 @@ class FocalTestRAIDPartitionToDisk(relbase.focal, TestRAIDPartitionToDisk):
836 __test__ = True
837
838
839+class HirsuteTestRAIDPartitionToDisk(relbase.hirsute, TestRAIDPartitionToDisk):
840+ __test__ = True
841+
842+
843 class GroovyTestRAIDPartitionToDisk(relbase.groovy, TestRAIDPartitionToDisk):
844 __test__ = True
845
846diff --git a/tests/vmtests/test_reuse_lvm_member.py b/tests/vmtests/test_reuse_lvm_member.py
847index 87afcfb..eba3d1b 100644
848--- a/tests/vmtests/test_reuse_lvm_member.py
849+++ b/tests/vmtests/test_reuse_lvm_member.py
850@@ -26,6 +26,11 @@ class FocalTestReuseLVMMemberPartition(relbase.focal,
851 __test__ = True
852
853
854+class HirsuteTestReuseLVMMemberPartition(relbase.hirsute,
855+ TestReuseLVMMemberPartition):
856+ __test__ = True
857+
858+
859 class GroovyTestReuseLVMMemberPartition(relbase.groovy,
860 TestReuseLVMMemberPartition):
861 __test__ = True
862diff --git a/tests/vmtests/test_reuse_msdos_partitions.py b/tests/vmtests/test_reuse_msdos_partitions.py
863index 9f18d3c..77431bf 100644
864--- a/tests/vmtests/test_reuse_msdos_partitions.py
865+++ b/tests/vmtests/test_reuse_msdos_partitions.py
866@@ -23,6 +23,11 @@ class FocalTestReuseMSDOSPartitions(relbase.focal,
867 __test__ = True
868
869
870+class HirsuteTestReuseMSDOSPartitions(relbase.hirsute,
871+ TestReuseMSDOSPartitions):
872+ __test__ = True
873+
874+
875 class GroovyTestReuseMSDOSPartitions(relbase.groovy,
876 TestReuseMSDOSPartitions):
877 __test__ = True
878diff --git a/tests/vmtests/test_reuse_raid_member.py b/tests/vmtests/test_reuse_raid_member.py
879index 7be98f3..e3723e8 100644
880--- a/tests/vmtests/test_reuse_raid_member.py
881+++ b/tests/vmtests/test_reuse_raid_member.py
882@@ -32,6 +32,10 @@ class FocalTestReuseRAIDMember(relbase.focal, TestReuseRAIDMember):
883 __test__ = True
884
885
886+class HirsuteTestReuseRAIDMember(relbase.hirsute, TestReuseRAIDMember):
887+ __test__ = True
888+
889+
890 class GroovyTestReuseRAIDMember(relbase.groovy, TestReuseRAIDMember):
891 __test__ = True
892
893@@ -46,6 +50,11 @@ class FocalTestReuseRAIDMemberPartition(relbase.focal,
894 __test__ = True
895
896
897+class HirsuteTestReuseRAIDMemberPartition(relbase.hirsute,
898+ TestReuseRAIDMemberPartition):
899+ __test__ = True
900+
901+
902 class GroovyTestReuseRAIDMemberPartition(relbase.groovy,
903 TestReuseRAIDMemberPartition):
904 __test__ = True
905diff --git a/tests/vmtests/test_reuse_uefi_esp.py b/tests/vmtests/test_reuse_uefi_esp.py
906index 46e7ac7..46f3a57 100644
907--- a/tests/vmtests/test_reuse_uefi_esp.py
908+++ b/tests/vmtests/test_reuse_uefi_esp.py
909@@ -42,6 +42,13 @@ class FocalTestUefiReuseEsp(relbase.focal, TestUefiReuseEspAbs):
910 return super().test_efiboot_menu_has_one_distro_entry()
911
912
913+class HirsuteTestUefiReuseEsp(relbase.hirsute, TestUefiReuseEspAbs):
914+ __test__ = True
915+
916+ def test_efiboot_menu_has_one_distro_entry(self):
917+ return super().test_efiboot_menu_has_one_distro_entry()
918+
919+
920 class GroovyTestUefiReuseEsp(relbase.groovy, TestUefiReuseEspAbs):
921 __test__ = True
922
923diff --git a/tests/vmtests/test_simple.py b/tests/vmtests/test_simple.py
924index 9e71047..83dca96 100644
925--- a/tests/vmtests/test_simple.py
926+++ b/tests/vmtests/test_simple.py
927@@ -56,6 +56,13 @@ class FocalTestSimple(relbase.focal, TestSimple):
928 self.output_files_exist(["netplan.yaml"])
929
930
931+class HirsuteTestSimple(relbase.hirsute, TestSimple):
932+ __test__ = True
933+
934+ def test_output_files_exist(self):
935+ self.output_files_exist(["netplan.yaml"])
936+
937+
938 class GroovyTestSimple(relbase.groovy, TestSimple):
939 __test__ = True
940
941@@ -112,6 +119,13 @@ class FocalTestSimpleStorage(relbase.focal, TestSimpleStorage):
942 self.output_files_exist(["netplan.yaml"])
943
944
945+class HirsuteTestSimpleStorage(relbase.hirsute, TestSimpleStorage):
946+ __test__ = True
947+
948+ def test_output_files_exist(self):
949+ self.output_files_exist(["netplan.yaml"])
950+
951+
952 class GroovyTestSimpleStorage(relbase.groovy, TestSimpleStorage):
953 __test__ = True
954
955@@ -145,6 +159,13 @@ class FocalTestGrubNoDefaults(relbase.focal, TestGrubNoDefaults):
956 self.output_files_exist(["netplan.yaml"])
957
958
959+class HirsuteTestGrubNoDefaults(relbase.hirsute, TestGrubNoDefaults):
960+ __test__ = True
961+
962+ def test_output_files_exist(self):
963+ self.output_files_exist(["netplan.yaml"])
964+
965+
966 class GroovyTestGrubNoDefaults(relbase.groovy, TestGrubNoDefaults):
967 __test__ = True
968
969diff --git a/tests/vmtests/test_uefi_basic.py b/tests/vmtests/test_uefi_basic.py
970index 932c1c8..0ed4fab 100644
971--- a/tests/vmtests/test_uefi_basic.py
972+++ b/tests/vmtests/test_uefi_basic.py
973@@ -114,6 +114,10 @@ class FocalUefiTestBasic(relbase.focal, TestBasicAbs):
974 __test__ = True
975
976
977+class HirsuteUefiTestBasic(relbase.hirsute, TestBasicAbs):
978+ __test__ = True
979+
980+
981 class GroovyUefiTestBasic(relbase.groovy, TestBasicAbs):
982 __test__ = True
983
984@@ -138,6 +142,11 @@ class FocalUefiTestBasic4k(relbase.focal, TestBasicAbs):
985 disk_block_size = 4096
986
987
988+class HirsuteUefiTestBasic4k(relbase.hirsute, TestBasicAbs):
989+ __test__ = True
990+ disk_block_size = 4096
991+
992+
993 class GroovyUefiTestBasic4k(relbase.groovy, TestBasicAbs):
994 __test__ = True
995 disk_block_size = 4096
996diff --git a/tests/vmtests/test_zfsroot.py b/tests/vmtests/test_zfsroot.py
997index 952bf7b..21e33b6 100644
998--- a/tests/vmtests/test_zfsroot.py
999+++ b/tests/vmtests/test_zfsroot.py
1000@@ -101,6 +101,11 @@ class FocalTestZfsRoot(relbase.focal, TestZfsRootAbs):
1001 mem = 4096
1002
1003
1004+class HirsuteTestZfsRoot(relbase.hirsute, TestZfsRootAbs):
1005+ __test__ = True
1006+ mem = 4096
1007+
1008+
1009 class GroovyTestZfsRoot(relbase.groovy, TestZfsRootAbs):
1010 __test__ = True
1011 mem = 4096
1012@@ -130,6 +135,11 @@ class FocalTestZfsRootFsType(relbase.focal, TestZfsRootFsTypeAbs):
1013 mem = 4096
1014
1015
1016+class HirsuteTestZfsRootFsType(relbase.hirsute, TestZfsRootFsTypeAbs):
1017+ __test__ = True
1018+ mem = 4096
1019+
1020+
1021 class GroovyTestZfsRootFsType(relbase.groovy, TestZfsRootFsTypeAbs):
1022 __test__ = True
1023
1024diff --git a/tools/vmtest-add-release b/tools/vmtest-add-release
1025new file mode 100755
1026index 0000000..7a74296
1027--- /dev/null
1028+++ b/tools/vmtest-add-release
1029@@ -0,0 +1,66 @@
1030+#!/usr/bin/python3
1031+
1032+import argparse
1033+import glob
1034+import os
1035+
1036+
1037+def update_file(fname, previous, distro):
1038+ new_content = []
1039+ new_class = []
1040+ modified = False
1041+ copying_class = False
1042+ with open(fname, 'r') as fh:
1043+ # using read().splitlines() to strip the newline char
1044+ for line in fh.read().splitlines():
1045+ # if we find class of previous release, copy and replace with
1046+ # new release
1047+ if line.startswith('class %s' % previous):
1048+ copying_class = True
1049+ elif copying_class and line and not line[0].isspace():
1050+ copying_class = False
1051+ # done copying class; transform and extend
1052+ nc = "\n".join(new_class)
1053+ nc = nc.replace(previous, distro) # Focal -> Groovy
1054+ nc = nc.replace(previous.lower(), distro.lower()) # focal -> groovy
1055+ nc += "\n"
1056+ new_content.extend(nc.splitlines())
1057+ new_class = []
1058+
1059+ if copying_class:
1060+ # retain existing lines, make a copy for the new class
1061+ new_content.append(line)
1062+ new_class.append(line)
1063+ modified = True
1064+ else:
1065+ new_content.append(line)
1066+
1067+ # skip a re-write of content if no modifications
1068+ if modified:
1069+ updated_fn = fname
1070+ with open(updated_fn, 'w') as wfh:
1071+ wfh.write("\n".join(new_content) + '\n')
1072+ print("Wrote updated file: %s" % updated_fn)
1073+
1074+
1075+if __name__ == "__main__":
1076+ parser = argparse.ArgumentParser(
1077+ prog="vmtest-add-release",
1078+ description="Tool to add vmtest classes by distro release")
1079+ parser.add_argument('--distro-release', '-d',
1080+ action='store', required=True)
1081+ parser.add_argument('--path', '-p', action='store', required=True)
1082+ parser.add_argument('--previous-release', '-r',
1083+ action='store', required=True)
1084+
1085+ args = parser.parse_args()
1086+ distro = args.distro_release.title()
1087+ previous = args.previous_release.title()
1088+ target = args.path
1089+ if os.path.isdir(target):
1090+ files = glob.glob(os.path.normpath(target) + '/' + 'test_*.py')
1091+ else:
1092+ files = [target]
1093+
1094+ for fname in files:
1095+ update_file(fname, previous, distro)

Subscribers

People subscribed via source and target branches