|
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
|