diff --git a/tests/unittests/config/test_apt_conf_v1.py b/tests/unittests/config/test_apt_conf_v1.py index 39ee536806d..60fb690458c 100644 --- a/tests/unittests/config/test_apt_conf_v1.py +++ b/tests/unittests/config/test_apt_conf_v1.py @@ -3,50 +3,44 @@ import copy import os import re -import shutil -import tempfile + +import pytest from cloudinit import util from cloudinit.config import cc_apt_configure -from tests.unittests.helpers import TestCase - - -class TestAptProxyConfig(TestCase): - def setUp(self): - super(TestAptProxyConfig, self).setUp() - self.tmp = tempfile.mkdtemp() - self.addCleanup(shutil.rmtree, self.tmp) - self.pfile = os.path.join(self.tmp, "proxy.cfg") - self.cfile = os.path.join(self.tmp, "config.cfg") - - def _search_apt_config(self, contents, ptype, value): - return re.search( - r"acquire::%s::proxy\s+[\"']%s[\"'];\n" % (ptype, value), - contents, - flags=re.IGNORECASE, - ) - def test_apt_proxy_written(self): - cfg = {"proxy": "myproxy"} - cc_apt_configure.apply_apt_config(cfg, self.pfile, self.cfile) - self.assertTrue(os.path.isfile(self.pfile)) - self.assertFalse(os.path.isfile(self.cfile)) +@pytest.fixture +def p_c_files(tmp_path): + pfile = str(tmp_path / "proxy.cfg") + cfile = str(tmp_path / "config.cfg") + return pfile, cfile + + +def _search_apt_config(contents, ptype, value): + return re.search( + r"acquire::%s::proxy\s+[\"']%s[\"'];\n" % (ptype, value), + contents, + flags=re.IGNORECASE, + ) - contents = util.load_text_file(self.pfile) - self.assertTrue(self._search_apt_config(contents, "http", "myproxy")) - def test_apt_http_proxy_written(self): - cfg = {"http_proxy": "myproxy"} - cc_apt_configure.apply_apt_config(cfg, self.pfile, self.cfile) +class TestAptProxyConfig: + @pytest.mark.parametrize( + "cfg", [{"proxy": "myproxy"}, {"http_proxy": "myproxy"}] + ) + def test_apt_proxy_written_variants(self, p_c_files, cfg): + pfile, cfile = p_c_files + cc_apt_configure.apply_apt_config(cfg, pfile, cfile) - self.assertTrue(os.path.isfile(self.pfile)) - self.assertFalse(os.path.isfile(self.cfile)) + assert os.path.isfile(pfile) + assert not os.path.isfile(cfile) - contents = util.load_text_file(self.pfile) - self.assertTrue(self._search_apt_config(contents, "http", "myproxy")) + contents = util.load_text_file(pfile) + assert _search_apt_config(contents, "http", "myproxy") - def test_apt_all_proxy_written(self): + def test_apt_all_proxy_written(self, p_c_files): + pfile, cfile = p_c_files cfg = { "http_proxy": "myproxy_http_proxy", "https_proxy": "myproxy_https_proxy", @@ -59,76 +53,75 @@ def test_apt_all_proxy_written(self): "ftp": cfg["ftp_proxy"], } - cc_apt_configure.apply_apt_config(cfg, self.pfile, self.cfile) + cc_apt_configure.apply_apt_config(cfg, pfile, cfile) - self.assertTrue(os.path.isfile(self.pfile)) - self.assertFalse(os.path.isfile(self.cfile)) + assert os.path.isfile(pfile) + assert not os.path.isfile(cfile) - contents = util.load_text_file(self.pfile) + contents = util.load_text_file(pfile) for ptype, pval in values.items(): - self.assertTrue(self._search_apt_config(contents, ptype, pval)) - - def test_proxy_deleted(self): - util.write_file(self.cfile, "content doesnt matter") - cc_apt_configure.apply_apt_config({}, self.pfile, self.cfile) - self.assertFalse(os.path.isfile(self.pfile)) - self.assertFalse(os.path.isfile(self.cfile)) - - def test_proxy_replaced(self): - util.write_file(self.cfile, "content doesnt matter") - cc_apt_configure.apply_apt_config( - {"proxy": "foo"}, self.pfile, self.cfile - ) - self.assertTrue(os.path.isfile(self.pfile)) - contents = util.load_text_file(self.pfile) - self.assertTrue(self._search_apt_config(contents, "http", "foo")) - - def test_config_written(self): + assert _search_apt_config(contents, ptype, pval) + + def test_proxy_deleted(self, p_c_files): + pfile, cfile = p_c_files + util.write_file(cfile, "content doesn't matter") + cc_apt_configure.apply_apt_config({}, pfile, cfile) + assert not os.path.isfile(pfile) + assert not os.path.isfile(cfile) + + def test_proxy_replaced(self, p_c_files): + pfile, cfile = p_c_files + util.write_file(cfile, "content doesn't matter") + cc_apt_configure.apply_apt_config({"proxy": "foo"}, pfile, cfile) + assert os.path.isfile(pfile) + contents = util.load_text_file(pfile) + assert _search_apt_config(contents, "http", "foo") + + def test_config_written(self, p_c_files): + pfile, cfile = p_c_files payload = "this is my apt config" cfg = {"conf": payload} - cc_apt_configure.apply_apt_config(cfg, self.pfile, self.cfile) + cc_apt_configure.apply_apt_config(cfg, pfile, cfile) - self.assertTrue(os.path.isfile(self.cfile)) - self.assertFalse(os.path.isfile(self.pfile)) + assert os.path.isfile(cfile) + assert not os.path.isfile(pfile) - self.assertEqual(util.load_text_file(self.cfile), payload) + assert util.load_text_file(cfile) == payload - def test_config_replaced(self): - util.write_file(self.pfile, "content doesnt matter") - cc_apt_configure.apply_apt_config( - {"conf": "foo"}, self.pfile, self.cfile - ) - self.assertTrue(os.path.isfile(self.cfile)) - self.assertEqual(util.load_text_file(self.cfile), "foo") + def test_config_replaced(self, p_c_files): + pfile, cfile = p_c_files + util.write_file(pfile, "content doesn't matter") + cc_apt_configure.apply_apt_config({"conf": "foo"}, pfile, cfile) + assert os.path.isfile(cfile) + assert util.load_text_file(cfile) == "foo" - def test_config_deleted(self): + def test_config_deleted(self, p_c_files): # if no 'conf' is provided, delete any previously written file - util.write_file(self.pfile, "content doesnt matter") - cc_apt_configure.apply_apt_config({}, self.pfile, self.cfile) - self.assertFalse(os.path.isfile(self.pfile)) - self.assertFalse(os.path.isfile(self.cfile)) + pfile, cfile = p_c_files + util.write_file(pfile, "content doesn't matter") + cc_apt_configure.apply_apt_config({}, pfile, cfile) + assert not os.path.isfile(pfile) + assert not os.path.isfile(cfile) -class TestConversion(TestCase): +class TestConversion: def test_convert_with_apt_mirror_as_empty_string(self): # an empty apt_mirror is the same as no apt_mirror empty_m_found = cc_apt_configure.convert_to_v3_apt_format( {"apt_mirror": ""} ) default_found = cc_apt_configure.convert_to_v3_apt_format({}) - self.assertEqual(default_found, empty_m_found) + assert default_found == empty_m_found def test_convert_with_apt_mirror(self): mirror = "http://my.mirror/ubuntu" f = cc_apt_configure.convert_to_v3_apt_format({"apt_mirror": mirror}) - self.assertIn(mirror, set(m["uri"] for m in f["apt"]["primary"])) + assert mirror in set(m["uri"] for m in f["apt"]["primary"]) def test_no_old_content(self): mirror = "http://my.mirror/ubuntu" mydata = {"apt": {"primary": {"arches": ["default"], "uri": mirror}}} expected = copy.deepcopy(mydata) - self.assertEqual( - expected, cc_apt_configure.convert_to_v3_apt_format(mydata) - ) + assert expected == cc_apt_configure.convert_to_v3_apt_format(mydata)