From 74de21cd2e54146f6c92d83d9855003fbcb47fae Mon Sep 17 00:00:00 2001 From: Manish Sah Date: Tue, 14 Oct 2025 07:28:59 +0545 Subject: [PATCH 1/3] test: Convert test_sysconfig.py from unittest to pytest Refactored tests/unittests/distros/test_sysconfig.py to use pytest instead of unittest.TestCase as part of the pytest migration effort. - Removed TestCase inheritance - Converted self.assert* methods to bare assert statements - Maintained all original test functionality Related: #6427 --- tests/unittests/distros/test_sysconfig.py | 43 +++++++++++------------ 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/tests/unittests/distros/test_sysconfig.py b/tests/unittests/distros/test_sysconfig.py index 6df2c2bcfa6..09e45f9288e 100644 --- a/tests/unittests/distros/test_sysconfig.py +++ b/tests/unittests/distros/test_sysconfig.py @@ -3,19 +3,18 @@ import re from cloudinit.distros.parsers.sys_conf import SysConf -from tests.unittests.helpers import TestCase # Lots of good examples @ # http://content.hccfl.edu/pollock/AUnix1/SysconfigFilesDesc.txt -class TestSysConfHelper(TestCase): +class TestSysConfHelper: # This function was added in 2.7, make it work for 2.6 def assertRegMatches(self, text, regexp): regexp = re.compile(regexp) - self.assertTrue( - regexp.search(text), - msg="%s must match %s!" % (text, regexp.pattern), + assert regexp.search(text), "%s must match %s!" % ( + text, + regexp.pattern, ) def test_parse_no_change(self): @@ -31,57 +30,55 @@ def test_parse_no_change(self): ETHTOOL_OPTS="-K ${DEVICE} tso on; -G ${DEVICE} rx 256 tx 256" USEMD5=no""" conf = SysConf(contents.splitlines()) - self.assertEqual(conf["HOSTNAME"], "blahblah") - self.assertEqual(conf["SHORTDATE"], "$(date +%y:%m:%d:%H:%M)") + assert conf["HOSTNAME"], "blahblah" + assert conf["SHORTDATE"] == "$(date +%y:%m:%d:%H:%M)" # Should be unquoted - self.assertEqual( - conf["ETHTOOL_OPTS"], - "-K ${DEVICE} tso on; -G ${DEVICE} rx 256 tx 256", + assert ( + conf["ETHTOOL_OPTS"] + == "-K ${DEVICE} tso on; -G ${DEVICE} rx 256 tx 256" ) - self.assertEqual(contents, str(conf)) + assert contents == str(conf) def test_parse_shell_vars(self): contents = "USESMBAUTH=$XYZ" conf = SysConf(contents.splitlines()) - self.assertEqual(contents, str(conf)) + assert contents == str(conf) conf = SysConf("") conf["B"] = "${ZZ}d apples" # Should be quoted - self.assertEqual('B="${ZZ}d apples"', str(conf)) + assert 'B="${ZZ}d apples"' == str(conf) conf = SysConf("") conf["B"] = "$? d apples" - self.assertEqual('B="$? d apples"', str(conf)) + assert 'B="$? d apples"' == str(conf) contents = 'IPMI_WATCHDOG_OPTIONS="timeout=60"' conf = SysConf(contents.splitlines()) - self.assertEqual("IPMI_WATCHDOG_OPTIONS=timeout=60", str(conf)) + assert "IPMI_WATCHDOG_OPTIONS=timeout=60" == str(conf) def test_parse_adjust(self): contents = 'IPV6TO4_ROUTING="eth0-:0004::1/64 eth1-:0005::1/64"' conf = SysConf(contents.splitlines()) # Should be unquoted - self.assertEqual( - "eth0-:0004::1/64 eth1-:0005::1/64", conf["IPV6TO4_ROUTING"] - ) + assert "eth0-:0004::1/64 eth1-:0005::1/64" == conf["IPV6TO4_ROUTING"] conf["IPV6TO4_ROUTING"] = "blah \tblah" contents2 = str(conf).strip() # Should be requoted due to whitespace - self.assertRegex(contents2, r"IPV6TO4_ROUTING='blah\s+blah'") + assert re.search(r"IPV6TO4_ROUTING='blah\s+blah'", contents2) def test_parse_no_adjust_shell(self): conf = SysConf("".splitlines()) conf["B"] = " $(time)" contents = str(conf) - self.assertEqual("B= $(time)", contents) + assert "B= $(time)" == contents def test_parse_empty(self): contents = "" conf = SysConf(contents.splitlines()) - self.assertEqual("", str(conf).strip()) + assert "" == str(conf).strip() def test_parse_add_new(self): contents = "BLAH=b" conf = SysConf(contents.splitlines()) conf["Z"] = "d" contents = str(conf) - self.assertIn("Z=d", contents) - self.assertIn("BLAH=b", contents) + assert "Z=d" in contents + assert "BLAH=b" in contents From 7e6794ce9d3203772bc93d539515a409003ca31e Mon Sep 17 00:00:00 2001 From: Manish Sah Date: Tue, 14 Oct 2025 07:37:30 +0545 Subject: [PATCH 2/3] fix(test): replace truthy assert with equality check for HOSTNAME --- tests/unittests/distros/test_sysconfig.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unittests/distros/test_sysconfig.py b/tests/unittests/distros/test_sysconfig.py index 09e45f9288e..2598bba8f8d 100644 --- a/tests/unittests/distros/test_sysconfig.py +++ b/tests/unittests/distros/test_sysconfig.py @@ -30,7 +30,7 @@ def test_parse_no_change(self): ETHTOOL_OPTS="-K ${DEVICE} tso on; -G ${DEVICE} rx 256 tx 256" USEMD5=no""" conf = SysConf(contents.splitlines()) - assert conf["HOSTNAME"], "blahblah" + assert conf["HOSTNAME"] == "blahblah" assert conf["SHORTDATE"] == "$(date +%y:%m:%d:%H:%M)" # Should be unquoted assert ( From 4d44b85457197699c41f95ec507201585ea76b58 Mon Sep 17 00:00:00 2001 From: Manish Sah Date: Fri, 17 Oct 2025 07:15:42 +0545 Subject: [PATCH 3/3] chore(test): remove unused method from --- tests/unittests/distros/test_sysconfig.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/tests/unittests/distros/test_sysconfig.py b/tests/unittests/distros/test_sysconfig.py index 2598bba8f8d..815577a8cdd 100644 --- a/tests/unittests/distros/test_sysconfig.py +++ b/tests/unittests/distros/test_sysconfig.py @@ -9,13 +9,6 @@ class TestSysConfHelper: - # This function was added in 2.7, make it work for 2.6 - def assertRegMatches(self, text, regexp): - regexp = re.compile(regexp) - assert regexp.search(text), "%s must match %s!" % ( - text, - regexp.pattern, - ) def test_parse_no_change(self): contents = """# A comment