← Back to team overview

curtin-dev team mailing list archive

[Merge] ~paride/curtin:vmtests-add-groovy into curtin:master

 

Paride Legovini has proposed merging ~paride/curtin:vmtests-add-groovy into curtin:master.

Commit message:
vmtests: add Groovy

Changes:
 * add Groovy
 * add missing Bionic and Focal tests:
    - BionicTestLvmRootExt4
    - BionicTestUefiLvmRootExt4
    - FocalTestNetworkIPV6
    - FocalTestNvme

Requested reviews:
  curtin developers (curtin-dev)

For more details, see:
https://code.launchpad.net/~paride/curtin/+git/curtin/+merge/387865
-- 
Your team curtin developers is requested to review the proposed merge of ~paride/curtin:vmtests-add-groovy into curtin:master.
diff --git a/tests/vmtests/releases.py b/tests/vmtests/releases.py
index 3dcb415..11abcb8 100644
--- a/tests/vmtests/releases.py
+++ b/tests/vmtests/releases.py
@@ -185,6 +185,14 @@ class _FocalBase(_UbuntuBase):
         subarch = "ga-20.04"
 
 
+class _GroovyBase(_UbuntuBase):
+    release = "groovy"
+    target_release = "groovy"
+    mem = "2048"
+    if _UbuntuBase.arch == "arm64":
+        subarch = "ga-20.04"
+
+
 class _Releases(object):
     trusty = _TrustyBase
     precise = _PreciseBase
@@ -203,6 +211,7 @@ class _Releases(object):
     disco = _DiscoBase
     eoan = _EoanBase
     focal = _FocalBase
+    groovy = _GroovyBase
 
 
 class _CentosReleases(object):
diff --git a/tests/vmtests/test_apt_config_cmd.py b/tests/vmtests/test_apt_config_cmd.py
index 4e43882..ae0d56c 100644
--- a/tests/vmtests/test_apt_config_cmd.py
+++ b/tests/vmtests/test_apt_config_cmd.py
@@ -68,4 +68,8 @@ class FocalTestAptConfigCMDCMD(relbase.focal, TestAptConfigCMD):
     __test__ = True
 
 
+class GroovyTestAptConfigCMDCMD(relbase.groovy, TestAptConfigCMD):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_basic.py b/tests/vmtests/test_basic.py
index 8c2a727..5723bc6 100644
--- a/tests/vmtests/test_basic.py
+++ b/tests/vmtests/test_basic.py
@@ -259,6 +259,10 @@ class FocalTestBasic(relbase.focal, TestBasicAbs):
     __test__ = True
 
 
+class GroovyTestBasic(relbase.groovy, TestBasicAbs):
+    __test__ = True
+
+
 class TestBasicScsiAbs(TestBasicAbs):
     arch_skip = [
         'arm64',  # arm64 is UEFI only
@@ -375,4 +379,8 @@ class FocalTestScsiBasic(relbase.focal, TestBasicScsiAbs):
     __test__ = True
 
 
+class GroovyTestScsiBasic(relbase.groovy, TestBasicScsiAbs):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_basic_dasd.py b/tests/vmtests/test_basic_dasd.py
index 8cb4c67..d61e1b9 100644
--- a/tests/vmtests/test_basic_dasd.py
+++ b/tests/vmtests/test_basic_dasd.py
@@ -56,4 +56,8 @@ class FocalTestBasicDasd(relbase.focal, TestBasicDasd):
     __test__ = True
 
 
+class GroovyTestBasicDasd(relbase.groovy, TestBasicDasd):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_bcache_basic.py b/tests/vmtests/test_bcache_basic.py
index 7a47ace..053225f 100644
--- a/tests/vmtests/test_bcache_basic.py
+++ b/tests/vmtests/test_bcache_basic.py
@@ -68,4 +68,8 @@ class FocalBcacheBasic(relbase.focal, TestBcacheBasic):
     __test__ = True
 
 
+class GroovyBcacheBasic(relbase.groovy, TestBcacheBasic):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_bcache_bug1718699.py b/tests/vmtests/test_bcache_bug1718699.py
index b0003e6..ebb99ab 100644
--- a/tests/vmtests/test_bcache_bug1718699.py
+++ b/tests/vmtests/test_bcache_bug1718699.py
@@ -23,4 +23,8 @@ class FocalTestBcacheBug1718699(relbase.focal, TestBcacheBug1718699):
     __test__ = True
 
 
+class GroovyTestBcacheBug1718699(relbase.groovy, TestBcacheBug1718699):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_bcache_ceph.py b/tests/vmtests/test_bcache_ceph.py
index cb41fda..bff4dd4 100644
--- a/tests/vmtests/test_bcache_ceph.py
+++ b/tests/vmtests/test_bcache_ceph.py
@@ -79,6 +79,10 @@ class FocalTestBcacheCeph(relbase.focal, TestBcacheCeph):
     __test__ = True
 
 
+class GroovyTestBcacheCeph(relbase.groovy, TestBcacheCeph):
+    __test__ = True
+
+
 class TestBcacheCephLvm(TestBcacheCeph):
     test_type = 'storage'
     nr_cpus = 2
@@ -105,4 +109,8 @@ class FocalTestBcacheCephLvm(relbase.focal, TestBcacheCephLvm):
     __test__ = True
 
 
+class GroovyTestBcacheCephLvm(relbase.groovy, TestBcacheCephLvm):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_bcache_partitions.py b/tests/vmtests/test_bcache_partitions.py
index 9d05ee8..1ffea12 100644
--- a/tests/vmtests/test_bcache_partitions.py
+++ b/tests/vmtests/test_bcache_partitions.py
@@ -29,4 +29,8 @@ class FocalTestBcachePartitions(relbase.focal, TestBcachePartitions):
     __test__ = True
 
 
+class GroovyTestBcachePartitions(relbase.groovy, TestBcachePartitions):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_fs_battery.py b/tests/vmtests/test_fs_battery.py
index 7e51f20..7177fea 100644
--- a/tests/vmtests/test_fs_battery.py
+++ b/tests/vmtests/test_fs_battery.py
@@ -243,4 +243,8 @@ class FocalTestFsBattery(relbase.focal, TestFsBattery):
     __test__ = True
 
 
+class GroovyTestFsBattery(relbase.groovy, TestFsBattery):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_iscsi.py b/tests/vmtests/test_iscsi.py
index 8d1d3f5..f3406cd 100644
--- a/tests/vmtests/test_iscsi.py
+++ b/tests/vmtests/test_iscsi.py
@@ -76,4 +76,8 @@ class FocalTestIscsiBasic(relbase.focal, TestBasicIscsiAbs):
     __test__ = True
 
 
+class GroovyTestIscsiBasic(relbase.groovy, TestBasicIscsiAbs):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_journald_reporter.py b/tests/vmtests/test_journald_reporter.py
index f0d068f..ff003a5 100644
--- a/tests/vmtests/test_journald_reporter.py
+++ b/tests/vmtests/test_journald_reporter.py
@@ -36,4 +36,8 @@ class FocalTestJournaldReporter(relbase.focal, TestJournaldReporter):
     __test__ = True
 
 
+class GroovyTestJournaldReporter(relbase.groovy, TestJournaldReporter):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_lvm.py b/tests/vmtests/test_lvm.py
index ff39d6c..eb65c32 100644
--- a/tests/vmtests/test_lvm.py
+++ b/tests/vmtests/test_lvm.py
@@ -81,4 +81,8 @@ class FocalTestLvm(relbase.focal, TestLvmAbs):
     __test__ = True
 
 
+class GroovyTestLvm(relbase.groovy, TestLvmAbs):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_lvm_iscsi.py b/tests/vmtests/test_lvm_iscsi.py
index eb8c92a..e0b9606 100644
--- a/tests/vmtests/test_lvm_iscsi.py
+++ b/tests/vmtests/test_lvm_iscsi.py
@@ -99,4 +99,8 @@ class FocalTestIscsiLvm(relbase.focal, TestLvmIscsiAbs):
     __test__ = True
 
 
+class GroovyTestIscsiLvm(relbase.groovy, TestLvmIscsiAbs):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_lvm_raid.py b/tests/vmtests/test_lvm_raid.py
index cc1afa1..5fe7993 100644
--- a/tests/vmtests/test_lvm_raid.py
+++ b/tests/vmtests/test_lvm_raid.py
@@ -47,7 +47,7 @@ class TestLvmOverRaidAbs(TestMdadmAbs, TestLvmAbs):
         return self._test_pvs(dname_to_vg)
 
 
-class FocalTestLvmOverRaid(relbase.focal, TestLvmOverRaidAbs):
+class XenialGATestLvmOverRaid(relbase.xenial_ga, TestLvmOverRaidAbs):
     __test__ = True
 
 
@@ -55,5 +55,9 @@ class BionicTestLvmOverRaid(relbase.bionic, TestLvmOverRaidAbs):
     __test__ = True
 
 
-class XenialGATestLvmOverRaid(relbase.xenial_ga, TestLvmOverRaidAbs):
+class FocalTestLvmOverRaid(relbase.focal, TestLvmOverRaidAbs):
+    __test__ = True
+
+
+class GroovyTestLvmOverRaid(relbase.groovy, TestLvmOverRaidAbs):
     __test__ = True
diff --git a/tests/vmtests/test_lvm_root.py b/tests/vmtests/test_lvm_root.py
index 117406e..2b8c1d2 100644
--- a/tests/vmtests/test_lvm_root.py
+++ b/tests/vmtests/test_lvm_root.py
@@ -87,6 +87,13 @@ class XenialTestLvmRootExt4(relbase.xenial, TestLvmRootAbs):
     }
 
 
+class BionicTestLvmRootExt4(relbase.bionic, TestLvmRootAbs):
+    __test__ = True
+    conf_replace = {
+        '__ROOTFS_FORMAT__': 'ext4',
+    }
+
+
 class FocalTestLvmRootExt4(relbase.focal, TestLvmRootAbs):
     __test__ = True
     conf_replace = {
@@ -94,6 +101,13 @@ class FocalTestLvmRootExt4(relbase.focal, TestLvmRootAbs):
     }
 
 
+class GroovyTestLvmRootExt4(relbase.groovy, TestLvmRootAbs):
+    __test__ = True
+    conf_replace = {
+        '__ROOTFS_FORMAT__': 'ext4',
+    }
+
+
 class XenialTestLvmRootXfs(relbase.xenial, TestLvmRootAbs):
     __test__ = True
     conf_replace = {
@@ -132,6 +146,14 @@ class XenialTestUefiLvmRootExt4(relbase.xenial, TestUefiLvmRootAbs):
     }
 
 
+class BionicTestUefiLvmRootExt4(relbase.bionic, TestUefiLvmRootAbs):
+    __test__ = True
+    conf_replace = {
+        '__BOOTFS_FORMAT__': 'ext4',
+        '__ROOTFS_FORMAT__': 'ext4',
+    }
+
+
 class FocalTestUefiLvmRootExt4(relbase.focal, TestUefiLvmRootAbs):
     __test__ = True
     conf_replace = {
@@ -140,6 +162,14 @@ class FocalTestUefiLvmRootExt4(relbase.focal, TestUefiLvmRootAbs):
     }
 
 
+class GroovyTestUefiLvmRootExt4(relbase.groovy, TestUefiLvmRootAbs):
+    __test__ = True
+    conf_replace = {
+        '__BOOTFS_FORMAT__': 'ext4',
+        '__ROOTFS_FORMAT__': 'ext4',
+    }
+
+
 class XenialTestUefiLvmRootXfs(relbase.xenial, TestUefiLvmRootAbs):
     __test__ = True
     conf_replace = {
diff --git a/tests/vmtests/test_mdadm_bcache.py b/tests/vmtests/test_mdadm_bcache.py
index 4f38e7a..ac8af3f 100644
--- a/tests/vmtests/test_mdadm_bcache.py
+++ b/tests/vmtests/test_mdadm_bcache.py
@@ -162,6 +162,10 @@ class FocalTestMdadmBcache(relbase.focal, TestMdadmBcacheAbs):
         return super().test_fstab()
 
 
+class GroovyTestMdadmBcache(relbase.groovy, TestMdadmBcacheAbs):
+    __test__ = True
+
+
 class TestMirrorbootAbs(TestMdadmAbs):
     # alternative config for more complex setup
     conf_file = "examples/tests/mirrorboot.yaml"
@@ -203,6 +207,10 @@ class FocalTestMirrorboot(relbase.focal, TestMirrorbootAbs):
     __test__ = True
 
 
+class GroovyTestMirrorboot(relbase.groovy, TestMirrorbootAbs):
+    __test__ = True
+
+
 class TestMirrorbootPartitionsAbs(TestMdadmAbs):
     # alternative config for more complex setup
     conf_file = "examples/tests/mirrorboot-msdos-partition.yaml"
@@ -248,6 +256,11 @@ class FocalTestMirrorbootPartitions(relbase.focal,
     __test__ = True
 
 
+class GroovyTestMirrorbootPartitions(relbase.groovy,
+                                     TestMirrorbootPartitionsAbs):
+    __test__ = True
+
+
 class TestMirrorbootPartitionsUEFIAbs(TestMdadmAbs):
     # alternative config for more complex setup
     conf_file = "examples/tests/mirrorboot-uefi.yaml"
@@ -333,6 +346,16 @@ class FocalTestMirrorbootPartitionsUEFI(relbase.focal,
         self.assertEqual(primary_esp, backup_esp)
 
 
+class GroovyTestMirrorbootPartitionsUEFI(relbase.groovy,
+                                         TestMirrorbootPartitionsUEFIAbs):
+    __test__ = True
+
+    def test_backup_esp_matches_primary(self):
+        primary_esp = self.load_collect_file("diska-part1-efi.out")
+        backup_esp = self.load_collect_file("diskb-part1-efi.out")
+        self.assertEqual(primary_esp, backup_esp)
+
+
 class TestRaid5bootAbs(TestMdadmAbs):
     # alternative config for more complex setup
     conf_file = "examples/tests/raid5boot.yaml"
@@ -377,6 +400,10 @@ class FocalTestRaid5boot(relbase.focal, TestRaid5bootAbs):
     __test__ = True
 
 
+class GroovyTestRaid5boot(relbase.groovy, TestRaid5bootAbs):
+    __test__ = True
+
+
 class TestRaid6bootAbs(TestMdadmAbs):
     # alternative config for more complex setup
     conf_file = "examples/tests/raid6boot.yaml"
@@ -434,6 +461,10 @@ class FocalTestRaid6boot(relbase.focal, TestRaid6bootAbs):
     __test__ = True
 
 
+class GroovyTestRaid6boot(relbase.groovy, TestRaid6bootAbs):
+    __test__ = True
+
+
 class TestRaid10bootAbs(TestMdadmAbs):
     # alternative config for more complex setup
     conf_file = "examples/tests/raid10boot.yaml"
@@ -477,6 +508,10 @@ class FocalTestRaid10boot(relbase.focal, TestRaid10bootAbs):
     __test__ = True
 
 
+class GroovyTestRaid10boot(relbase.groovy, TestRaid10bootAbs):
+    __test__ = True
+
+
 class TestAllindataAbs(TestMdadmAbs):
     # more complex, needs more time
     # alternative config for more complex setup
@@ -577,4 +612,8 @@ class FocalTestAllindata(relbase.focal, TestAllindataAbs):
     __test__ = True
 
 
+class GroovyTestAllindata(relbase.groovy, TestAllindataAbs):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_mdadm_iscsi.py b/tests/vmtests/test_mdadm_iscsi.py
index 4f35178..7e6fbf6 100644
--- a/tests/vmtests/test_mdadm_iscsi.py
+++ b/tests/vmtests/test_mdadm_iscsi.py
@@ -54,4 +54,8 @@ class FocalTestIscsiMdadm(relbase.focal, TestMdadmIscsiAbs):
     __test__ = True
 
 
+class GroovyTestIscsiMdadm(relbase.groovy, TestMdadmIscsiAbs):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_multipath.py b/tests/vmtests/test_multipath.py
index a30edb1..6d9c5df 100644
--- a/tests/vmtests/test_multipath.py
+++ b/tests/vmtests/test_multipath.py
@@ -162,4 +162,8 @@ class FocalTestMultipathBasic(relbase.focal, TestMultipathBasicAbs):
     __test__ = True
 
 
+class GroovyTestMultipathBasic(relbase.groovy, TestMultipathBasicAbs):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_multipath_lvm.py b/tests/vmtests/test_multipath_lvm.py
index ff7964c..c5a1e42 100644
--- a/tests/vmtests/test_multipath_lvm.py
+++ b/tests/vmtests/test_multipath_lvm.py
@@ -60,6 +60,10 @@ class FocalTestMultipathLvm(relbase.focal, TestMultipathLvmAbs):
     __test__ = True
 
 
+class GroovyTestMultipathLvm(relbase.groovy, TestMultipathLvmAbs):
+    __test__ = True
+
+
 class TestMultipathLvmPartWipeAbs(TestMultipathLvmAbs):
     conf_file = "examples/tests/multipath-lvm-part-wipe.yaml"
 
@@ -69,4 +73,9 @@ class FocalTestMultipathLvmPartWipe(relbase.focal,
     __test__ = True
 
 
+class GroovyTestMultipathLvmPartWipe(relbase.groovy,
+                                     TestMultipathLvmPartWipeAbs):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_network.py b/tests/vmtests/test_network.py
index 50ff0ef..43a7c6b 100644
--- a/tests/vmtests/test_network.py
+++ b/tests/vmtests/test_network.py
@@ -478,6 +478,10 @@ class FocalTestNetworkBasic(relbase.focal, TestNetworkBasicAbs):
     __test__ = True
 
 
+class GroovyTestNetworkBasic(relbase.groovy, TestNetworkBasicAbs):
+    __test__ = True
+
+
 class Centos66TestNetworkBasic(centos_relbase.centos66_xenial,
                                CentosTestNetworkBasicAbs):
     __test__ = True
diff --git a/tests/vmtests/test_network_alias.py b/tests/vmtests/test_network_alias.py
index 2c6ec53..bc1fb22 100644
--- a/tests/vmtests/test_network_alias.py
+++ b/tests/vmtests/test_network_alias.py
@@ -56,4 +56,8 @@ class FocalTestNetworkAlias(relbase.focal, TestNetworkAliasAbs):
     __test__ = True
 
 
+class GroovyTestNetworkAlias(relbase.groovy, TestNetworkAliasAbs):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_network_bonding.py b/tests/vmtests/test_network_bonding.py
index 2a34f5c..6c6dd6d 100644
--- a/tests/vmtests/test_network_bonding.py
+++ b/tests/vmtests/test_network_bonding.py
@@ -61,6 +61,10 @@ class FocalTestBonding(relbase.focal, TestNetworkBondingAbs):
     __test__ = True
 
 
+class GroovyTestBonding(relbase.groovy, TestNetworkBondingAbs):
+    __test__ = True
+
+
 class Centos66TestNetworkBonding(centos_relbase.centos66_xenial,
                                  CentosTestNetworkBondingAbs):
     __test__ = True
diff --git a/tests/vmtests/test_network_bridging.py b/tests/vmtests/test_network_bridging.py
index 715d312..9ecd2f6 100644
--- a/tests/vmtests/test_network_bridging.py
+++ b/tests/vmtests/test_network_bridging.py
@@ -240,6 +240,10 @@ class FocalTestBridging(relbase.focal, TestBridgeNetworkAbs):
     __test__ = True
 
 
+class GroovyTestBridging(relbase.groovy, TestBridgeNetworkAbs):
+    __test__ = True
+
+
 class XenialTestBridgingV2(relbase.xenial, TestBridgeNetworkAbs):
     """ This class only needs to verify that when provided a v2 config
         that the Xenial network packages are installed. """
diff --git a/tests/vmtests/test_network_disabled.py b/tests/vmtests/test_network_disabled.py
index b19ca64..ea8dae2 100644
--- a/tests/vmtests/test_network_disabled.py
+++ b/tests/vmtests/test_network_disabled.py
@@ -57,6 +57,11 @@ class FocalCurtinDisableNetworkRendering(relbase.focal,
     __test__ = True
 
 
+class GroovyCurtinDisableNetworkRendering(relbase.groovy,
+                                          CurtinDisableNetworkRendering):
+    __test__ = True
+
+
 class FocalCurtinDisableCloudInitNetworkingVersion1(
     relbase.focal,
     CurtinDisableCloudInitNetworkingVersion1
@@ -64,9 +69,21 @@ class FocalCurtinDisableCloudInitNetworkingVersion1(
     __test__ = True
 
 
+class GroovyCurtinDisableCloudInitNetworkingVersion1(
+    relbase.groovy,
+    CurtinDisableCloudInitNetworkingVersion1
+):
+    __test__ = True
+
+
 class FocalCurtinDisableCloudInitNetworking(relbase.focal,
                                             CurtinDisableCloudInitNetworking):
     __test__ = True
 
 
+class GroovyCurtinDisableCloudInitNetworking(relbase.groovy,
+                                             CurtinDisableCloudInitNetworking):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_network_ipv6.py b/tests/vmtests/test_network_ipv6.py
index 7802855..429ee89 100644
--- a/tests/vmtests/test_network_ipv6.py
+++ b/tests/vmtests/test_network_ipv6.py
@@ -53,6 +53,14 @@ class BionicTestNetworkIPV6(relbase.bionic, TestNetworkIPV6Abs):
     __test__ = True
 
 
+class FocalTestNetworkIPV6(relbase.focal, TestNetworkIPV6Abs):
+    __test__ = True
+
+
+class GroovyTestNetworkIPV6(relbase.groovy, TestNetworkIPV6Abs):
+    __test__ = True
+
+
 class Centos66TestNetworkIPV6(centos_relbase.centos66_xenial,
                               CentosTestNetworkIPV6Abs):
     __test__ = True
diff --git a/tests/vmtests/test_network_ipv6_static.py b/tests/vmtests/test_network_ipv6_static.py
index c87255e..28ff697 100644
--- a/tests/vmtests/test_network_ipv6_static.py
+++ b/tests/vmtests/test_network_ipv6_static.py
@@ -27,6 +27,10 @@ class FocalTestNetworkIPV6Static(relbase.focal, TestNetworkIPV6StaticAbs):
     __test__ = True
 
 
+class GroovyTestNetworkIPV6Static(relbase.groovy, TestNetworkIPV6StaticAbs):
+    __test__ = True
+
+
 class Centos66TestNetworkIPV6Static(centos_relbase.centos66_xenial,
                                     CentosTestNetworkIPV6StaticAbs):
     __test__ = True
diff --git a/tests/vmtests/test_network_ipv6_vlan.py b/tests/vmtests/test_network_ipv6_vlan.py
index bb1e74c..226f52e 100644
--- a/tests/vmtests/test_network_ipv6_vlan.py
+++ b/tests/vmtests/test_network_ipv6_vlan.py
@@ -26,6 +26,10 @@ class FocalTestNetworkIPV6Vlan(relbase.focal, TestNetworkIPV6VlanAbs):
     __test__ = True
 
 
+class GroovyTestNetworkIPV6Vlan(relbase.groovy, TestNetworkIPV6VlanAbs):
+    __test__ = True
+
+
 class Centos66TestNetworkIPV6Vlan(centos_relbase.centos66_xenial,
                                   CentosTestNetworkIPV6VlanAbs):
     __test__ = True
diff --git a/tests/vmtests/test_network_mtu.py b/tests/vmtests/test_network_mtu.py
index 71f87ca..4bed78a 100644
--- a/tests/vmtests/test_network_mtu.py
+++ b/tests/vmtests/test_network_mtu.py
@@ -191,6 +191,11 @@ class FocalTestNetworkMtu(relbase.focal, TestNetworkMtuAbs):
     __test__ = True
 
 
+class GroovyTestNetworkMtu(relbase.groovy, TestNetworkMtuAbs):
+    conf_file = "examples/tests/network_mtu_networkd.yaml"
+    __test__ = True
+
+
 class Centos66TestNetworkMtu(centos_relbase.centos66_xenial,
                              CentosTestNetworkMtuAbs):
     __test__ = True
diff --git a/tests/vmtests/test_network_ovs.py b/tests/vmtests/test_network_ovs.py
index c65db4e..0cee17e 100644
--- a/tests/vmtests/test_network_ovs.py
+++ b/tests/vmtests/test_network_ovs.py
@@ -38,4 +38,7 @@ class FocalTestNetworkOvs(relbase.focal, TestNetworkOvsAbs):
     __test__ = True
 
 
+class GroovyTestNetworkOvs(relbase.groovy, TestNetworkOvsAbs):
+    __test__ = True
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_network_static.py b/tests/vmtests/test_network_static.py
index 8905803..e0abd54 100644
--- a/tests/vmtests/test_network_static.py
+++ b/tests/vmtests/test_network_static.py
@@ -32,6 +32,10 @@ class FocalTestNetworkStatic(relbase.focal, TestNetworkStaticAbs):
     __test__ = True
 
 
+class GroovyTestNetworkStatic(relbase.groovy, TestNetworkStaticAbs):
+    __test__ = True
+
+
 class Centos66TestNetworkStatic(centos_relbase.centos66_xenial,
                                 CentosTestNetworkStaticAbs):
     __test__ = True
diff --git a/tests/vmtests/test_network_static_routes.py b/tests/vmtests/test_network_static_routes.py
index 350f5ab..f99d9d5 100644
--- a/tests/vmtests/test_network_static_routes.py
+++ b/tests/vmtests/test_network_static_routes.py
@@ -33,6 +33,11 @@ class FocalTestNetworkStaticRoutes(relbase.focal,
     __test__ = True
 
 
+class GroovyTestNetworkStaticRoutes(relbase.groovy,
+                                    TestNetworkStaticRoutesAbs):
+    __test__ = True
+
+
 class Centos66TestNetworkStaticRoutes(centos_relbase.centos66_xenial,
                                       CentosTestNetworkStaticRoutesAbs):
     __test__ = False
diff --git a/tests/vmtests/test_network_vlan.py b/tests/vmtests/test_network_vlan.py
index 9e1206b..c0776d6 100644
--- a/tests/vmtests/test_network_vlan.py
+++ b/tests/vmtests/test_network_vlan.py
@@ -83,6 +83,13 @@ class FocalTestNetworkVlan(relbase.focal, TestNetworkVlanAbs):
         return super().test_ip_output()
 
 
+class GroovyTestNetworkVlan(relbase.groovy, TestNetworkVlanAbs):
+    __test__ = True
+
+    def test_ip_output(self):
+        return super().test_ip_output()
+
+
 class Centos66TestNetworkVlan(centos_relbase.centos66_xenial,
                               CentosTestNetworkVlanAbs):
     __test__ = True
diff --git a/tests/vmtests/test_nvme.py b/tests/vmtests/test_nvme.py
index 865e10e..156bfae 100644
--- a/tests/vmtests/test_nvme.py
+++ b/tests/vmtests/test_nvme.py
@@ -73,6 +73,14 @@ class BionicTestNvme(relbase.bionic, TestNvmeAbs):
     __test__ = True
 
 
+class FocalTestNvme(relbase.focal, TestNvmeAbs):
+    __test__ = True
+
+
+class GroovyTestNvme(relbase.groovy, TestNvmeAbs):
+    __test__ = True
+
+
 class TestNvmeBcacheAbs(TestNvmeAbs):
     arch_skip = [
         "s390x",  # nvme is a pci device, no pci on s390x
@@ -140,4 +148,8 @@ class FocalTestNvmeBcache(relbase.focal, TestNvmeBcacheAbs):
     __test__ = True
 
 
+class GroovyTestNvmeBcache(relbase.groovy, TestNvmeBcacheAbs):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_panic.py b/tests/vmtests/test_panic.py
index fe4005e..7b1fdbe 100644
--- a/tests/vmtests/test_panic.py
+++ b/tests/vmtests/test_panic.py
@@ -28,4 +28,9 @@ class TestInstallPanic(VMBaseClass):
 class FocalTestInstallPanic(relbase.focal, TestInstallPanic):
     __test__ = True
 
+
+class GroovyTestInstallPanic(relbase.groovy, TestInstallPanic):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_pollinate_useragent.py b/tests/vmtests/test_pollinate_useragent.py
index ba681f5..ed14719 100644
--- a/tests/vmtests/test_pollinate_useragent.py
+++ b/tests/vmtests/test_pollinate_useragent.py
@@ -65,4 +65,8 @@ class FocalTestPollinateUserAgent(relbase.focal, TestPollinateUserAgent):
     __test__ = True
 
 
+class GroovyTestPollinateUserAgent(relbase.groovy, TestPollinateUserAgent):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_preserve.py b/tests/vmtests/test_preserve.py
index 7a447e0..998218c 100644
--- a/tests/vmtests/test_preserve.py
+++ b/tests/vmtests/test_preserve.py
@@ -29,4 +29,8 @@ class FocalTestPreserve(relbase.focal, TestPreserve):
     __test__ = True
 
 
+class GroovyTestPreserve(relbase.groovy, TestPreserve):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_preserve_bcache.py b/tests/vmtests/test_preserve_bcache.py
index 20c81b4..bd91c5a 100644
--- a/tests/vmtests/test_preserve_bcache.py
+++ b/tests/vmtests/test_preserve_bcache.py
@@ -60,4 +60,8 @@ class FocalTestPreserveBcache(relbase.focal, TestPreserveBcache):
     __test__ = True
 
 
+class GroovyTestPreserveBcache(relbase.groovy, TestPreserveBcache):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_preserve_lvm.py b/tests/vmtests/test_preserve_lvm.py
index 82d0707..0ed7ad4 100644
--- a/tests/vmtests/test_preserve_lvm.py
+++ b/tests/vmtests/test_preserve_lvm.py
@@ -73,4 +73,8 @@ class FocalTestLvmPreserve(relbase.focal, TestLvmPreserveAbs):
     __test__ = True
 
 
+class GroovyTestLvmPreserve(relbase.groovy, TestLvmPreserveAbs):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_preserve_partition_wipe_vg.py b/tests/vmtests/test_preserve_partition_wipe_vg.py
index 5bf48c7..58b1f65 100644
--- a/tests/vmtests/test_preserve_partition_wipe_vg.py
+++ b/tests/vmtests/test_preserve_partition_wipe_vg.py
@@ -29,6 +29,10 @@ class FocalTestPreserveWipeLvm(relbase.focal, TestPreserveWipeLvm):
     __test__ = True
 
 
+class GroovyTestPreserveWipeLvm(relbase.groovy, TestPreserveWipeLvm):
+    __test__ = True
+
+
 class TestPreserveWipeLvmSimple(VMBaseClass):
     conf_file = "examples/tests/preserve-partition-wipe-vg-simple.yaml"
     uefi = False
@@ -48,4 +52,9 @@ class FocalTestPreserveWipeLvmSimple(relbase.focal, TestPreserveWipeLvmSimple):
     __test__ = True
 
 
+class GroovyTestPreserveWipeLvmSimple(relbase.groovy,
+                                      TestPreserveWipeLvmSimple):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_preserve_raid.py b/tests/vmtests/test_preserve_raid.py
index 1dc47c0..15f2f50 100644
--- a/tests/vmtests/test_preserve_raid.py
+++ b/tests/vmtests/test_preserve_raid.py
@@ -29,4 +29,8 @@ class FocalTestPreserveRAID(relbase.focal, TestPreserveRAID):
     __test__ = True
 
 
+class GroovyTestPreserveRAID(relbase.groovy, TestPreserveRAID):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_raid5_bcache.py b/tests/vmtests/test_raid5_bcache.py
index b3fbe0a..3fdb217 100644
--- a/tests/vmtests/test_raid5_bcache.py
+++ b/tests/vmtests/test_raid5_bcache.py
@@ -96,4 +96,8 @@ class FocalTestRaid5Bcache(relbase.focal, TestMdadmBcacheAbs):
         return super().test_fstab()
 
 
+class GroovyTestRaid5Bcache(relbase.groovy, TestMdadmBcacheAbs):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_reuse_lvm_member.py b/tests/vmtests/test_reuse_lvm_member.py
index a78d0ea..87afcfb 100644
--- a/tests/vmtests/test_reuse_lvm_member.py
+++ b/tests/vmtests/test_reuse_lvm_member.py
@@ -26,4 +26,9 @@ class FocalTestReuseLVMMemberPartition(relbase.focal,
     __test__ = True
 
 
+class GroovyTestReuseLVMMemberPartition(relbase.groovy,
+                                        TestReuseLVMMemberPartition):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_reuse_msdos_partitions.py b/tests/vmtests/test_reuse_msdos_partitions.py
index 5b6addc..9f18d3c 100644
--- a/tests/vmtests/test_reuse_msdos_partitions.py
+++ b/tests/vmtests/test_reuse_msdos_partitions.py
@@ -23,4 +23,9 @@ class FocalTestReuseMSDOSPartitions(relbase.focal,
     __test__ = True
 
 
+class GroovyTestReuseMSDOSPartitions(relbase.groovy,
+                                     TestReuseMSDOSPartitions):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_reuse_raid_member.py b/tests/vmtests/test_reuse_raid_member.py
index e3c464d..7be98f3 100644
--- a/tests/vmtests/test_reuse_raid_member.py
+++ b/tests/vmtests/test_reuse_raid_member.py
@@ -32,6 +32,10 @@ class FocalTestReuseRAIDMember(relbase.focal, TestReuseRAIDMember):
     __test__ = True
 
 
+class GroovyTestReuseRAIDMember(relbase.groovy, TestReuseRAIDMember):
+    __test__ = True
+
+
 class BionicTestReuseRAIDMemberPartition(relbase.bionic,
                                          TestReuseRAIDMemberPartition):
     __test__ = True
@@ -42,4 +46,9 @@ class FocalTestReuseRAIDMemberPartition(relbase.focal,
     __test__ = True
 
 
+class GroovyTestReuseRAIDMemberPartition(relbase.groovy,
+                                         TestReuseRAIDMemberPartition):
+    __test__ = True
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_reuse_uefi_esp.py b/tests/vmtests/test_reuse_uefi_esp.py
index ab7ec42..91e17ce 100644
--- a/tests/vmtests/test_reuse_uefi_esp.py
+++ b/tests/vmtests/test_reuse_uefi_esp.py
@@ -40,4 +40,11 @@ class FocalTestUefiReuseEsp(relbase.focal, TestUefiReuseEspAbs):
         return super().test_efiboot_menu_has_one_distro_entry()
 
 
+class GroovyTestUefiReuseEsp(relbase.groovy, TestUefiReuseEspAbs):
+    __test__ = True
+
+    def test_efiboot_menu_has_one_distro_entry(self):
+        return super().test_efiboot_menu_has_one_distro_entry()
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_simple.py b/tests/vmtests/test_simple.py
index 3f588df..9e71047 100644
--- a/tests/vmtests/test_simple.py
+++ b/tests/vmtests/test_simple.py
@@ -56,6 +56,13 @@ class FocalTestSimple(relbase.focal, TestSimple):
         self.output_files_exist(["netplan.yaml"])
 
 
+class GroovyTestSimple(relbase.groovy, TestSimple):
+    __test__ = True
+
+    def test_output_files_exist(self):
+        self.output_files_exist(["netplan.yaml"])
+
+
 class TestSimpleStorage(VMBaseClass):
     """ Test curtin runs clear-holders when mode=simple with storage cfg. """
     conf_file = "examples/tests/simple-storage.yaml"
@@ -105,6 +112,13 @@ class FocalTestSimpleStorage(relbase.focal, TestSimpleStorage):
         self.output_files_exist(["netplan.yaml"])
 
 
+class GroovyTestSimpleStorage(relbase.groovy, TestSimpleStorage):
+    __test__ = True
+
+    def test_output_files_exist(self):
+        self.output_files_exist(["netplan.yaml"])
+
+
 class TestGrubNoDefaults(VMBaseClass):
     """ Test that curtin does not emit any grub configuration files. """
     conf_file = "examples/tests/no-grub-file.yaml"
@@ -131,4 +145,11 @@ class FocalTestGrubNoDefaults(relbase.focal, TestGrubNoDefaults):
         self.output_files_exist(["netplan.yaml"])
 
 
+class GroovyTestGrubNoDefaults(relbase.groovy, TestGrubNoDefaults):
+    __test__ = True
+
+    def test_output_files_exist(self):
+        self.output_files_exist(["netplan.yaml"])
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_uefi_basic.py b/tests/vmtests/test_uefi_basic.py
index e4c8a36..932c1c8 100644
--- a/tests/vmtests/test_uefi_basic.py
+++ b/tests/vmtests/test_uefi_basic.py
@@ -114,6 +114,10 @@ class FocalUefiTestBasic(relbase.focal, TestBasicAbs):
     __test__ = True
 
 
+class GroovyUefiTestBasic(relbase.groovy, TestBasicAbs):
+    __test__ = True
+
+
 class Centos70UefiTestBasic4k(centos_relbase.centos70_xenial, TestBasicAbs):
     __test__ = True
     disk_block_size = 4096
@@ -134,4 +138,9 @@ class FocalUefiTestBasic4k(relbase.focal, TestBasicAbs):
     disk_block_size = 4096
 
 
+class GroovyUefiTestBasic4k(relbase.groovy, TestBasicAbs):
+    __test__ = True
+    disk_block_size = 4096
+
+
 # vi: ts=4 expandtab syntax=python
diff --git a/tests/vmtests/test_zfsroot.py b/tests/vmtests/test_zfsroot.py
index 8f4f223..952bf7b 100644
--- a/tests/vmtests/test_zfsroot.py
+++ b/tests/vmtests/test_zfsroot.py
@@ -101,6 +101,11 @@ class FocalTestZfsRoot(relbase.focal, TestZfsRootAbs):
     mem = 4096
 
 
+class GroovyTestZfsRoot(relbase.groovy, TestZfsRootAbs):
+    __test__ = True
+    mem = 4096
+
+
 class TestZfsRootFsTypeAbs(TestZfsRootAbs):
     conf_file = "examples/tests/basic-zfsroot.yaml"
 
@@ -124,4 +129,8 @@ class FocalTestZfsRootFsType(relbase.focal, TestZfsRootFsTypeAbs):
     __test__ = True
     mem = 4096
 
+
+class GroovyTestZfsRootFsType(relbase.groovy, TestZfsRootFsTypeAbs):
+    __test__ = True
+
 # vi: ts=4 expandtab syntax=python

Follow ups