Blame cloudinit/config/tests/test_resolv_conf.py

Packit Service 751c4a
from unittest import mock
Packit Service 751c4a
Packit Service 751c4a
import pytest
Packit Service 751c4a
Packit Service 751c4a
from cloudinit.config.cc_resolv_conf import generate_resolv_conf
Packit Service 751c4a
Packit Service 751c4a
Packit Service 751c4a
EXPECTED_HEADER = """\
Packit Service 751c4a
# Your system has been configured with 'manage-resolv-conf' set to true.
Packit Service 751c4a
# As a result, cloud-init has written this file with configuration data
Packit Service 751c4a
# that it has been provided. Cloud-init, by default, will write this file
Packit Service 751c4a
# a single time (PER_ONCE).
Packit Service 751c4a
#\n\n"""
Packit Service 751c4a
Packit Service 751c4a
Packit Service 751c4a
class TestGenerateResolvConf:
Packit Service 751c4a
    @mock.patch("cloudinit.config.cc_resolv_conf.templater.render_to_file")
Packit Service 751c4a
    def test_default_target_fname_is_etc_resolvconf(self, m_render_to_file):
Packit Service 751c4a
        generate_resolv_conf("templates/resolv.conf.tmpl", mock.MagicMock())
Packit Service 751c4a
Packit Service 751c4a
        assert [
Packit Service 751c4a
            mock.call(mock.ANY, "/etc/resolv.conf", mock.ANY)
Packit Service 751c4a
        ] == m_render_to_file.call_args_list
Packit Service 751c4a
Packit Service 751c4a
    @mock.patch("cloudinit.config.cc_resolv_conf.templater.render_to_file")
Packit Service 751c4a
    def test_target_fname_is_used_if_passed(self, m_render_to_file):
Packit Service 751c4a
        generate_resolv_conf(
Packit Service 751c4a
            "templates/resolv.conf.tmpl", mock.MagicMock(), "/use/this/path"
Packit Service 751c4a
        )
Packit Service 751c4a
Packit Service 751c4a
        assert [
Packit Service 751c4a
            mock.call(mock.ANY, "/use/this/path", mock.ANY)
Packit Service 751c4a
        ] == m_render_to_file.call_args_list
Packit Service 751c4a
Packit Service 751c4a
    # Patch in templater so we can assert on the actual generated content
Packit Service 751c4a
    @mock.patch("cloudinit.templater.util.write_file")
Packit Service 751c4a
    # Parameterise with the value to be passed to generate_resolv_conf as the
Packit Service 751c4a
    # params parameter, and the expected line after the header as
Packit Service 751c4a
    # expected_extra_line.
Packit Service 751c4a
    @pytest.mark.parametrize(
Packit Service 751c4a
        "params,expected_extra_line",
Packit Service 751c4a
        [
Packit Service 751c4a
            # No options
Packit Service 751c4a
            ({}, None),
Packit Service 751c4a
            # Just a true flag
Packit Service 751c4a
            ({"options": {"foo": True}}, "options foo"),
Packit Service 751c4a
            # Just a false flag
Packit Service 751c4a
            ({"options": {"foo": False}}, None),
Packit Service 751c4a
            # Just an option
Packit Service 751c4a
            ({"options": {"foo": "some_value"}}, "options foo:some_value"),
Packit Service 751c4a
            # A true flag and an option
Packit Service 751c4a
            (
Packit Service 751c4a
                {"options": {"foo": "some_value", "bar": True}},
Packit Service 751c4a
                "options bar foo:some_value",
Packit Service 751c4a
            ),
Packit Service 751c4a
            # Two options
Packit Service 751c4a
            (
Packit Service 751c4a
                {"options": {"foo": "some_value", "bar": "other_value"}},
Packit Service 751c4a
                "options bar:other_value foo:some_value",
Packit Service 751c4a
            ),
Packit Service 751c4a
            # Everything
Packit Service 751c4a
            (
Packit Service 751c4a
                {
Packit Service 751c4a
                    "options": {
Packit Service 751c4a
                        "foo": "some_value",
Packit Service 751c4a
                        "bar": "other_value",
Packit Service 751c4a
                        "baz": False,
Packit Service 751c4a
                        "spam": True,
Packit Service 751c4a
                    }
Packit Service 751c4a
                },
Packit Service 751c4a
                "options spam bar:other_value foo:some_value",
Packit Service 751c4a
            ),
Packit Service 751c4a
        ],
Packit Service 751c4a
    )
Packit Service 751c4a
    def test_flags_and_options(
Packit Service 751c4a
        self, m_write_file, params, expected_extra_line
Packit Service 751c4a
    ):
Packit Service 751c4a
        generate_resolv_conf("templates/resolv.conf.tmpl", params)
Packit Service 751c4a
Packit Service 751c4a
        expected_content = EXPECTED_HEADER
Packit Service 751c4a
        if expected_extra_line is not None:
Packit Service 751c4a
            # If we have any extra lines, expect a trailing newline
Packit Service 751c4a
            expected_content += "\n".join([expected_extra_line, ""])
Packit Service 751c4a
        assert [
Packit Service 751c4a
            mock.call(mock.ANY, expected_content, mode=mock.ANY)
Packit Service 751c4a
        ] == m_write_file.call_args_list