1
# Copyright 2012 Canonical Ltd. This software is licensed under the
2
# GNU Affero General Public License version 3 (see the file LICENSE).
4
"""Tests for `provisioningserver.dhcp.writer`."""
6
from __future__ import (
15
from argparse import ArgumentParser
16
from io import BytesIO
18
from subprocess import (
24
from maastesting.matchers import ContainsAll
25
from maastesting.testcase import TestCase
26
import provisioningserver
27
from provisioningserver.dhcp import writer
28
from testtools.matchers import MatchesStructure
31
class TestScript(TestCase):
32
"""Test the DHCP configuration writer."""
36
'--subnet-mask', 'subnet-mask',
37
'--broadcast-ip', 'broadcast-ip',
38
'--dns-servers', 'dns-servers',
39
'--router-ip', 'router-ip',
40
'--ip-range-low', 'ip-range-low',
41
'--ip-range-high', 'ip-range-high',
42
'--omapi-key', 'omapi-key',
45
def test_script_executable(self):
46
dev_root = os.path.join(
47
os.path.dirname(provisioningserver.__file__),
49
script = ["%s/bin/maas-provision" % dev_root, "generate-dhcp-config"]
50
script.extend(self.test_args)
52
script, stdout=PIPE, env=dict(PYTHONPATH=":".join(sys.path)))
53
output, err = cmd.communicate()
54
contains_all_params = ContainsAll(
55
['subnet', 'subnet-mask', 'broadcast-ip',
56
'omapi-key', 'dns-servers', 'router-ip',
57
'ip-range-low', 'ip-range-high'])
58
self.assertThat(output, contains_all_params)
60
def test_arg_setup(self):
61
parser = ArgumentParser()
62
writer.add_arguments(parser)
63
args = parser.parse_args(self.test_args)
65
args, MatchesStructure.byEquality(
67
subnet_mask='subnet-mask',
68
broadcast_ip='broadcast-ip',
69
dns_servers='dns-servers',
70
router_ip='router-ip',
71
omapi_key='omapi-key',
72
ip_range_low='ip-range-low',
73
ip_range_high='ip-range-high'))
76
self.patch(sys, "stdout", BytesIO())
77
parser = ArgumentParser()
78
writer.add_arguments(parser)
79
args = parser.parse_args(self.test_args)
81
output = sys.stdout.getvalue()
82
contains_all_params = ContainsAll([
92
self.assertThat(output, contains_all_params)
94
def test_run_save_to_file(self):
95
parser = ArgumentParser()
96
writer.add_arguments(parser)
97
outfile = os.path.join(self.make_dir(), "outfile.txt")
98
args = parser.parse_args(
99
self.test_args + ("--outfile", outfile))
101
with open(outfile, "rb") as stream:
102
output = stream.read()
103
contains_all_params = ContainsAll([
113
self.assertThat(output, contains_all_params)