blob: c4841b3402c9c89406adf444a43834ab710233c8 [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright 2022 The Fuchsia Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import ipaddress
import unittest
from antlion.controllers.ap_lib.dhcp_config import DhcpConfig, Subnet
class DhcpConfigTest(unittest.TestCase):
def setUp(self):
super().setUp()
# These config files may have long diffs, modify this setting to
# ensure they're printed.
self.maxDiff = None
def test_basic_dhcp_config(self):
dhcp_conf = DhcpConfig()
expected_config = "default-lease-time 600;\n" "max-lease-time 7200;"
self.assertEqual(expected_config, dhcp_conf.render_config_file())
def test_dhcp_config_with_lease_times(self):
default_lease_time = 350
max_lease_time = 5000
dhcp_conf = DhcpConfig(
default_lease_time=default_lease_time, max_lease_time=max_lease_time
)
expected_config = (
f"default-lease-time {default_lease_time};\n"
f"max-lease-time {max_lease_time};"
)
self.assertEqual(expected_config, dhcp_conf.render_config_file())
def test_dhcp_config_with_subnets(self):
default_lease_time = 150
max_lease_time = 3000
subnets = [
# addresses from 10.10.1.0 - 10.10.1.255
Subnet(ipaddress.ip_network("10.10.1.0/24")),
# 4 addresses from 10.10.3.0 - 10.10.3.3
Subnet(ipaddress.ip_network("10.10.3.0/30")),
# 6 addresses from 10.10.5.20 - 10.10.5.25
Subnet(
ipaddress.ip_network("10.10.5.0/24"),
start=ipaddress.ip_address("10.10.5.20"),
end=ipaddress.ip_address("10.10.5.25"),
router=ipaddress.ip_address("10.10.5.255"),
lease_time=60,
),
]
dhcp_conf = DhcpConfig(
subnets=subnets,
default_lease_time=default_lease_time,
max_lease_time=max_lease_time,
)
# Unless an explicit start/end address is provided, the second
# address in the range is used for "start", and the second to
# last address is used for "end".
expected_config = (
f"default-lease-time {default_lease_time};\n"
f"max-lease-time {max_lease_time};\n"
"subnet 10.10.1.0 netmask 255.255.255.0 {\n"
"\tpool {\n"
"\t\toption subnet-mask 255.255.255.0;\n"
"\t\toption routers 10.10.1.1;\n"
"\t\trange 10.10.1.2 10.10.1.254;\n"
"\t\toption domain-name-servers 8.8.8.8, 4.4.4.4;\n"
"\t}\n"
"}\n"
"subnet 10.10.3.0 netmask 255.255.255.252 {\n"
"\tpool {\n"
"\t\toption subnet-mask 255.255.255.252;\n"
"\t\toption routers 10.10.3.1;\n"
"\t\trange 10.10.3.2 10.10.3.2;\n"
"\t\toption domain-name-servers 8.8.8.8, 4.4.4.4;\n"
"\t}\n"
"}\n"
"subnet 10.10.5.0 netmask 255.255.255.0 {\n"
"\tpool {\n"
"\t\toption subnet-mask 255.255.255.0;\n"
"\t\toption routers 10.10.5.255;\n"
"\t\trange 10.10.5.20 10.10.5.25;\n"
"\t\tdefault-lease-time 60;\n"
"\t\tmax-lease-time 60;\n"
"\t\toption domain-name-servers 8.8.8.8, 4.4.4.4;\n"
"\t}\n"
"}"
)
self.assertEqual(expected_config, dhcp_conf.render_config_file())
def test_additional_subnet_parameters_and_options(self):
default_lease_time = 150
max_lease_time = 3000
subnets = [
Subnet(
ipaddress.ip_network("10.10.1.0/24"),
additional_parameters={"allow": "unknown-clients", "foo": "bar"},
additional_options={"my-option": "some-value"},
),
]
dhcp_conf = DhcpConfig(
subnets=subnets,
default_lease_time=default_lease_time,
max_lease_time=max_lease_time,
)
# Unless an explicit start/end address is provided, the second
# address in the range is used for "start", and the second to
# last address is used for "end".
expected_config = (
f"default-lease-time {default_lease_time};\n"
f"max-lease-time {max_lease_time};\n"
"subnet 10.10.1.0 netmask 255.255.255.0 {\n"
"\tpool {\n"
"\t\toption subnet-mask 255.255.255.0;\n"
"\t\toption routers 10.10.1.1;\n"
"\t\trange 10.10.1.2 10.10.1.254;\n"
"\t\tallow unknown-clients;\n"
"\t\tfoo bar;\n"
"\t\toption my-option some-value;\n"
"\t\toption domain-name-servers 8.8.8.8, 4.4.4.4;\n"
"\t}\n"
"}"
)
self.assertEqual(expected_config, dhcp_conf.render_config_file())
if __name__ == "__main__":
unittest.main()