curtin-dev team mailing list archive
-
curtin-dev team
-
Mailing list archive
-
Message #03224
[Merge] ~hyask/curtin:skia/vmtests_baseline into curtin:master
Skia has proposed merging ~hyask/curtin:skia/vmtests_baseline into curtin:master.
Requested reviews:
Server Team CI bot (server-team-bot): continuous-integration
curtin developers (curtin-dev)
For more details, see:
https://code.launchpad.net/~hyask/curtin/+git/curtin/+merge/455620
This branch makes many broken VM tests to be skipped, in the hope of reaching a new baseline of green CI, and start fixing the tests one by one.
--
Your team curtin developers is requested to review the proposed merge of ~hyask/curtin:skia/vmtests_baseline into curtin:master.
diff --git a/tests/vmtests/test_apt_config_cmd.py b/tests/vmtests/test_apt_config_cmd.py
index a847910..5a1c322 100644
--- a/tests/vmtests/test_apt_config_cmd.py
+++ b/tests/vmtests/test_apt_config_cmd.py
@@ -6,7 +6,7 @@
"""
import textwrap
-from . import VMBaseClass
+from . import VMBaseClass, skip_if_flag
from .releases import base_vm_classes as relbase
from curtin.config import load_config
@@ -28,12 +28,14 @@ class TestAptConfigCMD(VMBaseClass):
exit 0
""")]
+ @skip_if_flag('expected_failure')
def test_cmd_proposed_enabled(self):
"""check if proposed was enabled"""
self.output_files_exist(["proposed-enabled"])
self.check_file_regex("proposed-enabled",
r"500.*%s-proposed" % self.release)
+ @skip_if_flag('expected_failure')
def test_cmd_ppa_enabled(self):
"""check if specified curtin-dev ppa was enabled"""
self.output_files_exist(
@@ -44,6 +46,7 @@ class TestAptConfigCMD(VMBaseClass):
r"curtin-dev/test-archive/ubuntu(/*)"
r" %s main" % self.release))
+ @skip_if_flag('expected_failure')
def test_cmd_preserve_source(self):
"""check if cloud-init was prevented from overwriting"""
self.output_files_exist(["curtin-preserve-sources.cfg"])
@@ -57,18 +60,22 @@ class XenialTestAptConfigCMDCMD(relbase.xenial, TestAptConfigCMD):
""" XenialTestAptSrcModifyCMD
apt feature Test for Xenial using the standalone command
"""
+ expected_failure = True # XXX Broken for now
__test__ = True
class BionicTestAptConfigCMDCMD(relbase.bionic, TestAptConfigCMD):
+ expected_failure = True # XXX Broken for now
__test__ = True
class FocalTestAptConfigCMDCMD(relbase.focal, TestAptConfigCMD):
+ expected_failure = True # XXX Broken for now
__test__ = True
class JammyTestAptConfigCMDCMD(relbase.jammy, TestAptConfigCMD):
+ expected_failure = True # XXX Broken for now
__test__ = True
diff --git a/tests/vmtests/test_basic.py b/tests/vmtests/test_basic.py
index f626f2e..e0eb391 100644
--- a/tests/vmtests/test_basic.py
+++ b/tests/vmtests/test_basic.py
@@ -3,7 +3,8 @@
from . import (
VMBaseClass,
get_apt_proxy,
- skip_if_arch)
+ skip_if_arch,
+ skip_if_flag)
from .releases import base_vm_classes as relbase
from .releases import centos_base_vm_classes as centos_relbase
@@ -56,6 +57,7 @@ class TestBasicAbs(VMBaseClass):
exit 0
""")]
+ @skip_if_flag('expected_failure')
def _test_ptable(self, blkid_output, expected):
if not blkid_output:
raise RuntimeError('_test_ptable requires blkid output file')
@@ -67,6 +69,7 @@ class TestBasicAbs(VMBaseClass):
blkid_info = self.get_blkid_data(blkid_output)
self.assertEquals(expected, blkid_info["PTTYPE"])
+ @skip_if_flag('expected_failure')
def _test_partition_numbers(self, disk, expected):
found = []
self.output_files_exist(["proc_partitions"])
@@ -76,6 +79,7 @@ class TestBasicAbs(VMBaseClass):
found.append(line.split()[3])
self.assertEqual(expected, found)
+ @skip_if_flag('expected_failure')
def _test_whole_disk_uuid(self, kname, uuid_file):
# confirm the whole disk format is the expected device
@@ -92,6 +96,7 @@ class TestBasicAbs(VMBaseClass):
# compare them
self.assertEqual(kname_uuid, btrfs_uuid)
+ @skip_if_flag('expected_failure')
def _test_partition_is_prep(self, info_file):
udev_info = self.load_collect_file(info_file).rstrip()
if not udev_info:
@@ -106,21 +111,25 @@ class TestBasicAbs(VMBaseClass):
self.assertEqual('9e1a2d38-c612-4316-aa26-8b49521e5a8b'.lower(),
entry_type.lower())
+ @skip_if_flag('expected_failure')
def _test_partition_is_zero(self, cmp_file):
self.assertEqual(0, int(self.load_collect_file(cmp_file).rstrip()))
# class specific input
+ @skip_if_flag('expected_failure')
def test_output_files_exist(self):
self.output_files_exist(
["ls_al_byuuid",
"root/curtin-install.log", "root/curtin-install-cfg.yaml"])
+ @skip_if_flag('expected_failure')
def test_ptable(self):
expected_ptable = "dos"
if self.target_arch == "ppc64el":
expected_ptable = "gpt"
self._test_ptable("blkid_output_diska", expected_ptable)
+ @skip_if_flag('expected_failure')
def test_partition_numbers(self):
# pnum_disk should have partitions 1 2, and 10
disk = self._dname_to_kname('pnum_disk')
@@ -142,11 +151,13 @@ class TestBasicAbs(VMBaseClass):
return expected
+ @skip_if_flag('expected_failure')
def test_whole_disk_uuid(self):
self._test_whole_disk_uuid(
self._serial_to_kname('disk-c'),
"btrfs_uuid_diskc")
+ @skip_if_flag('expected_failure')
def test_proxy_set(self):
if self.target_distro != 'ubuntu':
raise SkipTest("No apt-proxy for non-ubuntu distros")
@@ -160,6 +171,7 @@ class TestBasicAbs(VMBaseClass):
# no proxy, so the output of apt-config dump should be empty
self.assertEqual("", apt_proxy_found)
+ @skip_if_flag('expected_failure')
def test_curtin_install_version(self):
installed_version = self.get_install_log_curtin_version()
print('Install log version: %s' % installed_version)
@@ -167,6 +179,7 @@ class TestBasicAbs(VMBaseClass):
print('Source repo version: %s' % source_version)
self.assertEqual(source_version, installed_version)
+ @skip_if_flag('expected_failure')
def test_partition_is_prep(self):
self._test_partition_is_prep("udev_info.out")
@@ -269,12 +282,14 @@ class TestBasicScsiAbs(TestBasicAbs):
exit 0
""")]
+ @skip_if_flag('expected_failure')
def test_ptable(self):
expected_ptable = "dos"
if self.target_arch == "ppc64el":
expected_ptable = "gpt"
self._test_ptable("blkid_output_main_disk", expected_ptable)
+ @skip_if_flag('expected_failure')
def test_partition_numbers(self):
# pnum_disk should have partitions 1, 2, and 10
disk = self._serial_to_kname('0x550a270c3a5811c5')
@@ -306,15 +321,18 @@ class TestBasicScsiAbs(TestBasicAbs):
return expected
@skip_if_arch('s390x')
+ @skip_if_flag('expected_failure')
def test_whole_disk_uuid(self):
kname = self._serial_to_kname('0x22dc58dc023c7008')
self._test_whole_disk_uuid(kname, "btrfs_uuid")
+ @skip_if_flag('expected_failure')
def test_partition_is_prep(self):
self._test_partition_is_prep("udev_info.out")
# Skip on ppc64 (LP: #1843288)
@skip_if_arch('ppc64el')
+ @skip_if_flag('expected_failure')
def test_partition_is_zero(self):
self._test_partition_is_zero("cmp_prep.out")
@@ -355,6 +373,7 @@ class FocalTestScsiBasic(relbase.focal, TestBasicScsiAbs):
class JammyTestScsiBasic(relbase.jammy, TestBasicScsiAbs):
+ expected_failure = True # XXX Broken for now
__test__ = True
diff --git a/tests/vmtests/test_fs_battery.py b/tests/vmtests/test_fs_battery.py
index 75084b0..bd1e629 100644
--- a/tests/vmtests/test_fs_battery.py
+++ b/tests/vmtests/test_fs_battery.py
@@ -1,6 +1,6 @@
# This file is part of curtin. See LICENSE file for copyright and license info.
-from . import VMBaseClass
+from . import VMBaseClass, skip_if_flag
from .releases import base_vm_classes as relbase
from .releases import centos_base_vm_classes as centos_relbase
@@ -118,6 +118,7 @@ class TestFsBattery(VMBaseClass):
fs_entries[part] = entry.copy()
return fs_entries
+ @skip_if_flag('expected_failure')
def test_blkid_output(self):
"""Check the recorded output of 'blkid -o export' on each partition.
@@ -148,6 +149,7 @@ class TestFsBattery(VMBaseClass):
self.assertEqual(expected, results)
+ @skip_if_flag('expected_failure')
def test_mount_umount(self):
"""Check output of mount and unmount operations for each fs."""
results = self.load_collect_file("battery-mount-umount").splitlines()
@@ -156,6 +158,7 @@ class TestFsBattery(VMBaseClass):
["%s umount: PASS" % k for k in entries])
self.assertEqual(sorted(expected), sorted(results))
+ @skip_if_flag('expected_failure')
def test_fstab_has_mounts(self):
"""Verify each of the expected "my" mounts got into fstab."""
expected = [
@@ -169,6 +172,7 @@ class TestFsBattery(VMBaseClass):
"fstab").splitlines()]
self.assertEqual(expected, [e for e in expected if e in fstab_found])
+ @skip_if_flag('expected_failure')
def test_mountinfo_has_mounts(self):
"""Verify the my mounts got into mountinfo.
@@ -188,6 +192,7 @@ class TestFsBattery(VMBaseClass):
self.assertEqual(dest_src.get("/var/cache"), "/my/bind-over-var-cache")
self.assertEqual(dest_src.get("/my/bind-ro-etc"), "/etc")
+ @skip_if_flag('expected_failure')
def test_expected_files_from_bind_mounts(self):
data = self.load_collect_file("my-path-checks")
# this file is <path>: (present|missing)
@@ -200,6 +205,7 @@ class TestFsBattery(VMBaseClass):
{'/my/bind-over-var-cache/man': 'present',
'/my/bind-ro-etc/passwd': 'present'}, paths)
+ @skip_if_flag('expected_failure')
def test_ext4_extra_parameters_used_with_mkfs(self):
data = self.load_collect_file("myext4.dump")
self.assertNotIn("ext_attr", data)
@@ -244,6 +250,7 @@ class FocalTestFsBattery(relbase.focal, TestFsBattery):
class JammyTestFsBattery(relbase.jammy, TestFsBattery):
+ expected_failure = True # XXX Broken for now
__test__ = True
diff --git a/tests/vmtests/test_iscsi.py b/tests/vmtests/test_iscsi.py
index 6ad343d..b5d9082 100644
--- a/tests/vmtests/test_iscsi.py
+++ b/tests/vmtests/test_iscsi.py
@@ -1,6 +1,6 @@
# This file is part of curtin. See LICENSE file for copyright and license info.
-from . import VMBaseClass
+from . import VMBaseClass, skip_if_flag
from .releases import base_vm_classes as relbase
from .releases import centos_base_vm_classes as centos_relbase
@@ -28,12 +28,14 @@ class TestBasicIscsiAbs(VMBaseClass):
exit 0
""")]
+ @skip_if_flag('expected_failure')
def test_fstab_has_netdev_option(self):
self.output_files_exist(["fstab"])
fstab = self.load_collect_file("fstab").strip()
self.assertTrue(any(["_netdev" in line
for line in fstab.splitlines()]))
+ @skip_if_flag('expected_failure')
def test_iscsi_testfiles(self):
# add check by SN or UUID that the iSCSI disks are attached?
testfiles = ["testfile%s" % t for t in range(1, self.nr_testfiles + 1)]
diff --git a/tests/vmtests/test_lvm.py b/tests/vmtests/test_lvm.py
index e15838e..e53e9f2 100644
--- a/tests/vmtests/test_lvm.py
+++ b/tests/vmtests/test_lvm.py
@@ -1,6 +1,6 @@
# This file is part of curtin. See LICENSE file for copyright and license info.
-from . import VMBaseClass
+from . import VMBaseClass, skip_if_flag
from .releases import base_vm_classes as relbase
from .releases import centos_base_vm_classes as centos_relbase
@@ -31,6 +31,7 @@ class TestLvmAbs(VMBaseClass):
kname = self._dname_to_kname(dname)
self.check_file_strippedline("pvs", "%s=/dev/%s" % (vg, kname))
+ @skip_if_flag('expected_failure')
def test_pvs(self):
dname_to_vg = {
'main_disk-part5': 'vg1',
@@ -38,10 +39,12 @@ class TestLvmAbs(VMBaseClass):
}
return self._test_pvs(dname_to_vg)
+ @skip_if_flag('expected_failure')
def test_lvs(self):
self.check_file_strippedline("lvs", "lv1=vg1")
self.check_file_strippedline("lvs", "lv2=vg1")
+ @skip_if_flag('expected_failure')
def test_output_files_exist(self):
self.output_files_exist(
["fstab", "ls_dname"])
@@ -82,6 +85,7 @@ class FocalTestLvm(relbase.focal, TestLvmAbs):
class JammyTestLvm(relbase.jammy, TestLvmAbs):
+ expected_failure = True # XXX Broken for now
__test__ = True
diff --git a/tests/vmtests/test_lvm_root.py b/tests/vmtests/test_lvm_root.py
index 6464f22..4c9b5f3 100644
--- a/tests/vmtests/test_lvm_root.py
+++ b/tests/vmtests/test_lvm_root.py
@@ -1,6 +1,6 @@
# This file is part of curtin. See LICENSE file for copyright and license info.
-from . import VMBaseClass
+from . import VMBaseClass, skip_if_flag
from .releases import base_vm_classes as relbase
from .releases import centos_base_vm_classes as centos_relbase
@@ -37,9 +37,11 @@ class TestLvmRootAbs(VMBaseClass):
(self._kname_to_uuid_devpath('dm-uuid', rootvg), '/', 'defaults')
]
+ @skip_if_flag('expected_failure')
def test_output_files_exist(self):
self.output_files_exist(["fstab"])
+ @skip_if_flag('expected_failure')
def test_rootfs_format(self):
self.output_files_exist(["lsblk.json"])
if os.path.getsize(self.collect_path('lsblk.json')) > 0:
@@ -95,6 +97,7 @@ class FocalTestLvmRootExt4(relbase.focal, TestLvmRootAbs):
class JammyTestLvmRootExt4(relbase.jammy, TestLvmRootAbs):
+ expected_failure = True # XXX Broken for now
__test__ = True
conf_replace = {
'__ROOTFS_FORMAT__': 'ext4',
diff --git a/tests/vmtests/test_mdadm_bcache.py b/tests/vmtests/test_mdadm_bcache.py
index 54b3588..faf7b41 100644
--- a/tests/vmtests/test_mdadm_bcache.py
+++ b/tests/vmtests/test_mdadm_bcache.py
@@ -1,6 +1,6 @@
# This file is part of curtin. See LICENSE file for copyright and license info.
-from . import VMBaseClass
+from . import VMBaseClass, skip_if_flag
from .releases import base_vm_classes as relbase
from .releases import centos_base_vm_classes as centos_relbase
import re
@@ -31,11 +31,13 @@ class TestMdadmAbs(VMBaseClass):
exit 0
""")]
+ @skip_if_flag('expected_failure')
def test_mdadm_output_files_exist(self):
self.output_files_exist(
["fstab", "mdadm_status", "mdadm_active1", "mdadm_active2",
"ls_dname"])
+ @skip_if_flag('expected_failure')
def test_mdadm_status(self):
# ubuntu:<ID> is the name assigned to the md array
self.check_file_regex("mdadm_status", r"ubuntu:[0-9]*")
@@ -88,6 +90,7 @@ class TestMdadmBcacheAbs(TestMdadmAbs):
'/media/bcachefoo_fulldiskascache_storage', 'defaults'),
]
+ @skip_if_flag('expected_failure')
def test_bcache_output_files_exist(self):
self.output_files_exist(["bcache_super_vda6",
"bcache_super_vda7",
@@ -95,6 +98,7 @@ class TestMdadmBcacheAbs(TestMdadmAbs):
"bcache_ls",
"bcache_cache_mode"])
+ @skip_if_flag('expected_failure')
def test_bcache_status(self):
bcache_supers = [
"bcache_super_vda6",
@@ -125,6 +129,7 @@ class TestMdadmBcacheAbs(TestMdadmAbs):
self.assertEqual(list(found.keys()).pop(),
bcache_cset_uuid)
+ @skip_if_flag('expected_failure')
def test_bcache_cachemode(self):
# definition is on order 0->back,1->through,2->around
# but after reboot it can be anything since order is not guaranteed
@@ -134,6 +139,7 @@ class TestMdadmBcacheAbs(TestMdadmAbs):
self.check_file_regex("bcache_cache_mode", r"\[writethrough\]")
self.check_file_regex("bcache_cache_mode", r"\[writearound\]")
+ @skip_if_flag('expected_failure')
def test_bcache_dnames(self):
self.test_dname(disk_to_check=self.bcache_dnames)
@@ -159,6 +165,7 @@ class FocalTestMdadmBcache(relbase.focal, TestMdadmBcacheAbs):
class JammyTestMdadmBcache(relbase.jammy, TestMdadmBcacheAbs):
+ expected_failure = True # XXX Broken for now
__test__ = True
@@ -204,6 +211,7 @@ class FocalTestMirrorboot(relbase.focal, TestMirrorbootAbs):
class JammyTestMirrorboot(relbase.jammy, TestMirrorbootAbs):
+ expected_failure = True # XXX Broken for now
__test__ = True
@@ -254,6 +262,7 @@ class FocalTestMirrorbootPartitions(relbase.focal,
class JammyTestMirrorbootPartitions(relbase.jammy,
TestMirrorbootPartitionsAbs):
+ expected_failure = True # XXX Broken for now
__test__ = True
@@ -292,6 +301,7 @@ class TestMirrorbootPartitionsUEFIAbs(TestMdadmAbs):
'/var', 'defaults'),
]
+ @skip_if_flag('expected_failure')
def test_grub_debconf_selections(self):
"""Verify we have grub2/efi_install_devices set correctly."""
if self.target_distro not in ["ubuntu", "debian"]:
@@ -306,6 +316,7 @@ class TestMirrorbootPartitionsUEFIAbs(TestMdadmAbs):
self.assertIn(
('grub-pc', 'grub-efi/install_devices', choice), found_selections)
+ @skip_if_flag('expected_failure')
def test_backup_esp_matches_primary(self):
if self.target_distro != "ubuntu":
raise SkipTest("backup ESP supported only on Ubuntu")
@@ -344,11 +355,13 @@ class BionicTestMirrorbootPartitionsUEFI(relbase.bionic,
class FocalTestMirrorbootPartitionsUEFI(relbase.focal,
TestMirrorbootPartitionsUEFIAbs):
+ expected_failure = True # XXX Broken for now (only test_grub_debconf_selections)
__test__ = True
class JammyTestMirrorbootPartitionsUEFI(relbase.jammy,
TestMirrorbootPartitionsUEFIAbs):
+ expected_failure = True # XXX Broken for now
__test__ = True
@@ -559,26 +572,31 @@ class TestAllindataAbs(TestMdadmAbs):
exit 0
""")])
+ @skip_if_flag('expected_failure')
def test_output_files_exist(self):
self.output_files_exist(["pvs", "lvs", "crypttab", "mapper",
"xfs_info"])
+ @skip_if_flag('expected_failure')
def test_lvs(self):
self.check_file_strippedline("lvs", "lv1=vg1")
self.check_file_strippedline("lvs", "lv2=vg1")
self.check_file_strippedline("lvs", "lv3=vg1")
+ @skip_if_flag('expected_failure')
def test_pvs(self):
self.check_file_strippedline("pvs", "vg1=/dev/md0")
self.check_file_strippedline("pvs", "vg1=/dev/md1")
self.check_file_strippedline("pvs", "vg1=/dev/md2")
self.check_file_strippedline("pvs", "vg1=/dev/md3")
+ @skip_if_flag('expected_failure')
def test_dmcrypt(self):
self.check_file_regex("crypttab", r"dmcrypt0.*luks")
self.check_file_regex("mapper", r"^lrwxrwxrwx.*/dev/mapper/dmcrypt0")
self.check_file_regex("xfs_info", r"^meta-data=/dev/mapper/dmcrypt0")
+ @skip_if_flag('expected_failure')
def get_fstab_expected(self):
return [
(self._kname_to_uuid_devpath('dm-uuid', 'dm-0'),
@@ -609,6 +627,7 @@ class FocalTestAllindata(relbase.focal, TestAllindataAbs):
class JammyTestAllindata(relbase.jammy, TestAllindataAbs):
+ expected_failure = True # XXX Broken for now
__test__ = True
diff --git a/tests/vmtests/test_mdadm_iscsi.py b/tests/vmtests/test_mdadm_iscsi.py
index 128712c..8c61efe 100644
--- a/tests/vmtests/test_mdadm_iscsi.py
+++ b/tests/vmtests/test_mdadm_iscsi.py
@@ -55,6 +55,7 @@ class FocalTestIscsiMdadm(relbase.focal, TestMdadmIscsiAbs):
class JammyTestIscsiMdadm(relbase.jammy, TestMdadmIscsiAbs):
+ expected_failure = True # XXX Broken for now
__test__ = True
diff --git a/tests/vmtests/test_multipath.py b/tests/vmtests/test_multipath.py
index 0067737..50db226 100644
--- a/tests/vmtests/test_multipath.py
+++ b/tests/vmtests/test_multipath.py
@@ -1,6 +1,6 @@
# This file is part of curtin. See LICENSE file for copyright and license info.
-from . import VMBaseClass, load_config, sanitize_dname
+from . import VMBaseClass, load_config, sanitize_dname, skip_if_flag
from .releases import base_vm_classes as relbase
from .releases import centos_base_vm_classes as centos_relbase
from curtin import util
@@ -41,6 +41,7 @@ class TestMultipathBasicAbs(VMBaseClass):
exit 0
""")]
+ @skip_if_flag('expected_failure')
def test_dname_rules(self, disk_to_check=None):
if self.target_distro != "ubuntu":
raise SkipTest("dname not present in non-ubuntu releases")
@@ -74,6 +75,7 @@ class TestMultipathBasicAbs(VMBaseClass):
self.assertIn(id_key, contents)
self.assertIn(value, contents)
+ @skip_if_flag('expected_failure')
def test_multipath_disks_match(self):
sda_data = self.load_collect_file("holders_sda")
print('sda holders:\n%s' % sda_data)
@@ -82,6 +84,7 @@ class TestMultipathBasicAbs(VMBaseClass):
self.assertEqual(os.path.basename(sda_data),
os.path.basename(sdb_data))
+ @skip_if_flag('expected_failure')
def test_home_mount_unit(self):
unit_file = 'systemctl_show_home.mount'
if not os.path.exists(self.collect_path(unit_file)):
@@ -118,6 +121,7 @@ class TestMultipathBasicAbs(VMBaseClass):
(self._kname_to_uuid_devpath('dm-uuid-part2-mpath', home),
'/home', 'defaults,nofail')]
+ @skip_if_flag('expected_failure')
def test_proc_command_line_has_mp_device(self):
cmdline = self.load_collect_file('proc_cmdline')
root = [tok for tok in cmdline.split() if tok.startswith('root=')]
diff --git a/tests/vmtests/test_multipath_lvm.py b/tests/vmtests/test_multipath_lvm.py
index aaeefd5..86cb393 100644
--- a/tests/vmtests/test_multipath_lvm.py
+++ b/tests/vmtests/test_multipath_lvm.py
@@ -1,5 +1,6 @@
# This file is part of curtin. See LICENSE file for copyright and license info.
+from . import skip_if_flag
from .releases import base_vm_classes as relbase
from .releases import centos_base_vm_classes as centos_relbase
from .test_multipath import TestMultipathBasicAbs
@@ -26,6 +27,7 @@ class TestMultipathLvmAbs(TestMultipathBasicAbs):
exit 0
""")]
+ @skip_if_flag('expected_failure')
def test_home_mount_unit(self):
raise SkipTest('Test case does not have separate home mount')
@@ -38,6 +40,7 @@ class TestMultipathLvmAbs(TestMultipathBasicAbs):
(self._kname_to_uuid_devpath('dm-uuid-part2-mpath', boot),
'/boot', 'defaults')]
+ @skip_if_flag('expected_failure')
def test_proc_command_line_has_mp_device(self):
cmdline = self.load_collect_file('proc_cmdline')
root = [tok for tok in cmdline.split() if tok.startswith('root=')]
@@ -61,6 +64,7 @@ class FocalTestMultipathLvm(relbase.focal, TestMultipathLvmAbs):
class JammyTestMultipathLvm(relbase.jammy, TestMultipathLvmAbs):
+ expected_failure = True # XXX Broken for now (no space left on device)
__test__ = True
@@ -75,6 +79,7 @@ class FocalTestMultipathLvmPartWipe(relbase.focal,
class JammyTestMultipathLvmPartWipe(relbase.jammy,
TestMultipathLvmPartWipeAbs):
+ expected_failure = True # XXX Broken for now (no space left on device)
__test__ = True
diff --git a/tests/vmtests/test_network.py b/tests/vmtests/test_network.py
index 4b16aeb..b7493fb 100644
--- a/tests/vmtests/test_network.py
+++ b/tests/vmtests/test_network.py
@@ -1,6 +1,6 @@
# This file is part of curtin. See LICENSE file for copyright and license info.
-from . import VMBaseClass, helpers
+from . import VMBaseClass, helpers, skip_if_flag
from .releases import base_vm_classes as relbase
from .releases import centos_base_vm_classes as centos_relbase
@@ -53,6 +53,7 @@ class TestNetworkBaseTestsAbs(VMBaseClass):
exit 0
""")]
+ @skip_if_flag('expected_failure')
def test_output_files_exist(self):
self.output_files_exist([
"ip_a",
@@ -88,6 +89,7 @@ class TestNetworkBaseTestsAbs(VMBaseClass):
print('Network Renderer: ifupdown')
return 'ifupdown'
+ @skip_if_flag('expected_failure')
def test_etc_network_interfaces(self):
avail_str = self.load_collect_file('cloudinit_passthrough_available')
pt_available = int(avail_str) == 1
@@ -118,6 +120,7 @@ class TestNetworkBaseTestsAbs(VMBaseClass):
print('expected line:\n%s' % line)
self.assertTrue(line in eni_lines, "not in eni: %s" % line)
+ @skip_if_flag('expected_failure')
def test_cloudinit_network_passthrough(self):
cc_passthrough = "cloud.cfg.d/50-curtin-networking.cfg"
@@ -140,6 +143,7 @@ class TestNetworkBaseTestsAbs(VMBaseClass):
intarget = config.load_config(pt_file)
self.assertEqual(original, intarget)
+ @skip_if_flag('expected_failure')
def test_cloudinit_network_disabled(self):
cc_disabled = 'cloud.cfg.d/curtin-disable-cloudinit-networking.cfg'
@@ -164,6 +168,7 @@ class TestNetworkBaseTestsAbs(VMBaseClass):
print('checking cloud-init network-cfg content')
self.assertEqual(original, intarget)
+ @skip_if_flag('expected_failure')
def test_etc_resolvconf(self):
render2resolvconf = {
'ifupdown': "resolv.conf",
@@ -227,6 +232,7 @@ class TestNetworkBaseTestsAbs(VMBaseClass):
self.logger.debug('dns_line:%s', dns_line)
self.assertTrue(dns_line in resolv_lines)
+ @skip_if_flag('expected_failure')
def test_static_routes(self):
'''check routing table'''
network_state = self.get_network_state()
@@ -259,6 +265,7 @@ class TestNetworkBaseTestsAbs(VMBaseClass):
m = re.search(expected_string, ip_route_show, re.MULTILINE)
self.assertTrue(m is not None)
+ @skip_if_flag('expected_failure')
def test_ip_output(self):
'''check iproute2 'ip a' output with test input'''
network_state = self.get_network_state()
diff --git a/tests/vmtests/test_network_disabled.py b/tests/vmtests/test_network_disabled.py
index b4f9eb7..f9efaa6 100644
--- a/tests/vmtests/test_network_disabled.py
+++ b/tests/vmtests/test_network_disabled.py
@@ -1,5 +1,6 @@
# This file is part of curtin. See LICENSE file for copyright and license info.
+from . import skip_if_flag
from .releases import base_vm_classes as relbase
from .test_network import TestNetworkBaseTestsAbs
@@ -40,9 +41,11 @@ class CurtinDisableCloudInitNetworking(TestNetworkBaseTestsAbs):
""" Test curtin can disable cloud-init networking in the target system """
conf_file = "examples/tests/network_config_disabled.yaml"
+ @skip_if_flag('expected_failure')
def test_etc_resolvconf(self):
raise SkipTest('not available on %s' % self.__class__)
+ @skip_if_flag('expected_failure')
def test_ip_output(self):
raise SkipTest('not available on %s' % self.__class__)
@@ -76,10 +79,12 @@ class JammyCurtinDisableNetworkRendering(relbase.jammy, TestKlass1):
class JammyCurtinDisableCloudInitNetworking(relbase.jammy, TestKlass2):
+ expected_failure = True # XXX Broken for now
__test__ = True
class JammyCurtinDisableCloudInitNetworkingVersion1(relbase.jammy, TestKlass3):
+ expected_failure = True # XXX Broken for now
__test__ = True
diff --git a/tests/vmtests/test_network_ovs.py b/tests/vmtests/test_network_ovs.py
index e168a0d..c50d115 100644
--- a/tests/vmtests/test_network_ovs.py
+++ b/tests/vmtests/test_network_ovs.py
@@ -1,5 +1,6 @@
# This file is part of curtin. See LICENSE file for copyright and license info.
+from . import skip_if_flag
from .releases import base_vm_classes as relbase
from .test_network import TestNetworkBaseTestsAbs
@@ -9,6 +10,7 @@ class TestNetworkOvsAbs(TestNetworkBaseTestsAbs):
that on Bionic+ openvswitch packages are installed. """
conf_file = "examples/tests/network_v2_ovs.yaml"
+ @skip_if_flag('expected_failure')
def test_openvswitch_package_status(self):
"""openvswitch-switch is expected installed in Ubuntu >= bionic."""
rel = self.target_release
@@ -17,15 +19,19 @@ class TestNetworkOvsAbs(TestNetworkBaseTestsAbs):
pkg, self.debian_packages,
"%s package expected in %s but not found" % (pkg, rel))
+ @skip_if_flag('expected_failure')
def test_etc_network_interfaces(self):
pass
+ @skip_if_flag('expected_failure')
def test_ip_output(self):
pass
+ @skip_if_flag('expected_failure')
def test_etc_resolvconf(self):
pass
+ @skip_if_flag('expected_failure')
def test_bridge_params(self):
pass
@@ -39,6 +45,7 @@ class FocalTestNetworkOvs(relbase.focal, TestNetworkOvsAbs):
class JammyTestNetworkOvs(relbase.jammy, TestNetworkOvsAbs):
+ expected_failure = True # XXX Broken for now
__test__ = True
diff --git a/tests/vmtests/test_preserve_lvm.py b/tests/vmtests/test_preserve_lvm.py
index 1eb954e..e0bab24 100644
--- a/tests/vmtests/test_preserve_lvm.py
+++ b/tests/vmtests/test_preserve_lvm.py
@@ -1,6 +1,6 @@
# This file is part of curtin. See LICENSE file for copyright and license info.
-from . import VMBaseClass
+from . import VMBaseClass, skip_if_flag
from .releases import base_vm_classes as relbase
import json
@@ -36,9 +36,11 @@ class TestLvmPreserveAbs(VMBaseClass):
(self._kname_to_uuid_devpath('dm-uuid', rootvg), '/', 'defaults')
]
+ @skip_if_flag('expected_failure')
def test_output_files_exist(self):
self.output_files_exist(["fstab"])
+ @skip_if_flag('expected_failure')
def test_rootfs_format(self):
self.output_files_exist(["lsblk.json"])
if os.path.getsize(self.collect_path('lsblk.json')) > 0:
@@ -61,6 +63,7 @@ class TestLvmPreserveAbs(VMBaseClass):
print(fstype)
self.assertEqual('ext4', fstype)
+ @skip_if_flag('expected_failure')
def test_preserved_data_exists(self):
self.assertIn('existing', self.load_collect_file('ls-root'))
@@ -74,6 +77,7 @@ class FocalTestLvmPreserve(relbase.focal, TestLvmPreserveAbs):
class JammyTestLvmPreserve(relbase.jammy, TestLvmPreserveAbs):
+ expected_failure = True # XXX Broken for now
__test__ = True
diff --git a/tests/vmtests/test_preserve_partition_wipe_vg.py b/tests/vmtests/test_preserve_partition_wipe_vg.py
index 76fa9c3..7120e63 100644
--- a/tests/vmtests/test_preserve_partition_wipe_vg.py
+++ b/tests/vmtests/test_preserve_partition_wipe_vg.py
@@ -1,6 +1,6 @@
# This file is part of curtin. See LICENSE file for copyright and license info.
-from . import VMBaseClass
+from . import VMBaseClass, skip_if_flag
from .releases import base_vm_classes as relbase
import textwrap
@@ -17,6 +17,7 @@ class TestPreserveWipeLvm(VMBaseClass):
exit 0
""")]
+ @skip_if_flag('expected_failure')
def test_existing_exists(self):
self.assertIn('existing', self.load_collect_file('ls-opt'))
@@ -30,6 +31,7 @@ class FocalTestPreserveWipeLvm(relbase.focal, TestPreserveWipeLvm):
class JammyTestPreserveWipeLvm(relbase.jammy, TestPreserveWipeLvm):
+ expected_failure = True # XXX Broken for now
__test__ = True
@@ -53,6 +55,7 @@ class FocalTestPreserveWipeLvmSimple(relbase.focal, TestPreserveWipeLvmSimple):
class JammyTestPreserveWipeLvmSimple(relbase.jammy, TestPreserveWipeLvmSimple):
+ expected_failure = True # XXX Broken for now
__test__ = True
diff --git a/tests/vmtests/test_python_apt.py b/tests/vmtests/test_python_apt.py
index ed2e007..5243578 100644
--- a/tests/vmtests/test_python_apt.py
+++ b/tests/vmtests/test_python_apt.py
@@ -2,7 +2,7 @@
from aptsources.sourceslist import SourceEntry
-from . import VMBaseClass
+from . import VMBaseClass, skip_if_flag
from .releases import base_vm_classes as relbase
@@ -11,6 +11,7 @@ class TestPythonApt(VMBaseClass):
test_type = 'config'
conf_file = "examples/tests/apt_source_custom.yaml"
+ @skip_if_flag('expected_failure')
def test_python_apt(self):
"""test_python_apt - Ensure the python-apt package is available"""
@@ -32,6 +33,7 @@ class FocalTestPythonApt(relbase.focal, TestPythonApt):
class JammyTestPythonApt(relbase.jammy, TestPythonApt):
+ expected_failure = True # XXX Broken for now
__test__ = True
diff --git a/tests/vmtests/test_reuse_msdos_partitions.py b/tests/vmtests/test_reuse_msdos_partitions.py
index 1561f3f..32b4ad3 100644
--- a/tests/vmtests/test_reuse_msdos_partitions.py
+++ b/tests/vmtests/test_reuse_msdos_partitions.py
@@ -1,6 +1,6 @@
# This file is part of curtin. See LICENSE file for copyright and license info.
-from . import VMBaseClass
+from . import VMBaseClass, skip_if_flag
from .releases import base_vm_classes as relbase
@@ -9,6 +9,7 @@ class TestReuseMSDOSPartitions(VMBaseClass):
conf_file = "examples/tests/reuse-msdos-partitions.yaml"
test_stype = 'storage'
+ @skip_if_flag('expected_failure')
def test_simple(self):
pass
@@ -25,6 +26,7 @@ class FocalTestReuseMSDOSPartitions(relbase.focal,
class JammyTestReuseMSDOSPartitions(relbase.jammy,
TestReuseMSDOSPartitions):
+ expected_failure = True # XXX Broken for now
__test__ = True
diff --git a/tests/vmtests/test_simple.py b/tests/vmtests/test_simple.py
index 57010f5..47f4d15 100644
--- a/tests/vmtests/test_simple.py
+++ b/tests/vmtests/test_simple.py
@@ -1,6 +1,6 @@
# This file is part of curtin. See LICENSE file for copyright and license info.
-from . import VMBaseClass
+from . import VMBaseClass, skip_if_flag
from .releases import base_vm_classes as relbase
from .releases import centos_base_vm_classes as centos_relbase
@@ -80,6 +80,7 @@ class TestSimpleStorage(VMBaseClass):
exit 0
""")]
+ @skip_if_flag('expected_failure')
def test_output_files_exist(self):
self.output_files_exist(["sfdisk_list", "blkid",
"proc_partitions"])
@@ -104,8 +105,10 @@ class FocalTestSimpleStorage(relbase.focal, TestSimpleStorage):
class JammyTestSimpleStorage(relbase.jammy, TestSimpleStorage):
+ expected_failure = True # XXX Broken for now
__test__ = True
+ @skip_if_flag('expected_failure')
def test_output_files_exist(self):
self.output_files_exist(["netplan.yaml"])
diff --git a/tools/jenkins-runner b/tools/jenkins-runner
index 375dc3c..5565894 100755
--- a/tools/jenkins-runner
+++ b/tools/jenkins-runner
@@ -44,6 +44,23 @@ cleanup() {
esac
fi
}
+usage() {
+ echo -e "Curtin jenkins-runner"
+ echo -e ""
+ echo -e "This script is just a wrapper for calling underlying nosetests3 tests."
+ echo -e "Filtering options are passed to that tool, so you may want to have a look at its usage too."
+ echo -e ""
+ echo -e "USAGE:"
+ echo -e "\tjenkins-runner [OPTIONS] [PATH ...]"
+ echo -e ""
+ echo -e "ARGS:"
+ echo -e "\t<PATH>...\n\t\tA list of tests/vmtest* files to run"
+ echo -e "OPTIONS:"
+ echo -e "\tCURTIN_VMTEST_*\t\tSet some CURTIN_VMTEST_ variables from command line"
+ echo -e "\t--skip-images-dirlock\tSkip image directory lock"
+ echo -e "\t--filter\t\tFilter the tests to run"
+ echo -e "\t-p, --parallel\t\tSet the number of parallel jobs"
+}
if [ "$reuse" != "1" ]; then
if [ -d "$topdir" ]; then
@@ -70,6 +87,10 @@ tests=( )
skip_images_dirlock=0
while [ $# -ne 0 ]; do
case "$1" in
+ -h|--help)
+ usage
+ exit 0
+ ;;
# allow setting these environment variables on cmdline.
CURTIN_VMTEST_*=*) export "$1";;
--filter=*) ntfilters[${#ntfilters[@]}]="${1#--filter=}";;