def test_round_trips_ipv6_address(self): network = factory.make_ipv6_network() encoded = self.argument.toString(network) self.assertThat(encoded, IsInstance(bytes)) self.assertThat(encoded, HasLength(17)) decoded = self.argument.fromString(encoded) self.assertThat(decoded, Equals(network))
def test_ignores_generate_directives_for_v6_dynamic_ranges(self): patch_dns_config_path(self) domain = factory.make_string() network = factory.make_ipv4_network() ipv4_hostname = factory.make_name("host") ipv4_ip = factory.pick_ip_in_network(network) ipv6_hostname = factory.make_name("host") ipv6_ip = factory.make_ipv6_address() ipv6_network = factory.make_ipv6_network() dynamic_range = IPRange(ipv6_network.first, ipv6_network.last) ttl = random.randint(10, 300) mapping = { ipv4_hostname: HostnameIPMapping(None, ttl, {ipv4_ip}), ipv6_hostname: HostnameIPMapping(None, ttl, {ipv6_ip}), } dns_zone_config = DNSForwardZoneConfig( domain, serial=random.randint(1, 100), mapping=mapping, default_ttl=ttl, dynamic_ranges=[dynamic_range], ) get_generate_directives = self.patch(dns_zone_config, "get_GENERATE_directives") dns_zone_config.write_config() self.assertThat(get_generate_directives, MockNotCalled())
def make_cidrs(self): return frozenset( { str(factory.make_ipv4_network()), str(factory.make_ipv6_network()), } )
def test_bind_write_configuration_writes_file(self): domain = factory.make_string() zones = [ DNSReverseZoneConfig(domain, serial=random.randint(1, 100), network=factory.make_ipv4_network()), DNSReverseZoneConfig(domain, serial=random.randint(1, 100), network=factory.make_ipv6_network()), ] actions.bind_write_configuration(zones=zones, trusted_networks=[]) self.assertThat(os.path.join(self.dns_conf_dir, MAAS_NAMED_CONF_NAME), FileExists())
def make_subnet_config( network=None, pools=None, ipv6=False, dhcp_snippets=None, disabled_boot_architectures=None, ): """Return complete DHCP configuration dict for a subnet.""" if network is None: if ipv6 is True: network = factory.make_ipv6_network( # The dynamic range must be at least 256 hosts in size. slash=random.randint(112, 120)) else: network = factory.make_ipv4_network() if pools is None: pools = [make_subnet_pool(network)] if dhcp_snippets is None: dhcp_snippets = make_subnet_dhcp_snippets() domain_name = "%s.example.com" % factory.make_name("domain") return { "subnet": str(IPAddress(network.first)), "subnet_mask": str(network.netmask), "subnet_cidr": str(network.cidr), "broadcast_ip": str(network.broadcast), "dns_servers": [ IPAddress(factory.pick_ip_in_network(network)), IPAddress(factory.pick_ip_in_network(network)), ], "ntp_servers": [ factory.make_ipv4_address(), factory.make_ipv6_address(), factory.make_name("ntp-server"), ], "domain_name": domain_name, "search_list": [domain_name], "router_ip": factory.pick_ip_in_network(network), "pools": pools, "dhcp_snippets": dhcp_snippets, "disabled_boot_architectures": disabled_boot_architectures if disabled_boot_architectures else [], }
def make_subnet_config(network=None, pools=None, ipv6=False, dhcp_snippets=None): """Return complete DHCP configuration dict for a subnet.""" if network is None: if ipv6 is True: network = factory.make_ipv6_network( # The dynamic range must be at least 256 hosts in size. slash=random.randint(112, 120)) else: network = factory.make_ipv4_network() if pools is None: pools = [make_subnet_pool(network)] if dhcp_snippets is None: dhcp_snippets = make_subnet_dhcp_snippets() domain_name = '%s.example.com' % factory.make_name('domain') return { 'subnet': str(IPAddress(network.first)), 'subnet_mask': str(network.netmask), 'subnet_cidr': str(network.cidr), 'broadcast_ip': str(network.broadcast), 'dns_servers': [ IPAddress(factory.pick_ip_in_network(network)), IPAddress(factory.pick_ip_in_network(network)), ], 'ntp_servers': [ factory.make_ipv4_address(), factory.make_ipv6_address(), factory.make_name("ntp-server"), ], 'domain_name': domain_name, 'search_list': [domain_name], 'router_ip': factory.pick_ip_in_network(network), 'pools': pools, 'dhcp_snippets': dhcp_snippets, }
def test_bind_write_configuration_writes_file_with_acl(self): trusted_networks = [ factory.make_ipv4_network(), factory.make_ipv6_network(), ] actions.bind_write_configuration(zones=[], trusted_networks=trusted_networks) expected_file = os.path.join(self.dns_conf_dir, MAAS_NAMED_CONF_NAME) self.assertThat(expected_file, FileExists()) expected_content = dedent("""\ acl "trusted" { %s; %s; localnets; localhost; }; """) expected_content %= tuple(trusted_networks) self.assertThat(expected_file, FileContains(matcher=Contains(expected_content)))
def test_pick_ip_in_network_for_ipv6(self): # For IPv6, pick_ip_in_network will not consider the very first # address in a network because this is reserved for routers. network = factory.make_ipv6_network(slash=126) ip = factory.pick_ip_in_network(network) self.assertTrue(network.first < IPAddress(ip).value <= network.last)