Beispiel #1
0
 def test_handles_slash_32_dynamic_range(self):
     target_dir = 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)
     range_ip = factory.pick_ip_in_network(network, but_not={ipv4_ip})
     ipv6_hostname = factory.make_name("host")
     ipv6_ip = factory.make_ipv6_address()
     ttl = random.randint(10, 300)
     mapping = {
         ipv4_hostname: HostnameIPMapping(None, ttl, {ipv4_ip}),
         ipv6_hostname: HostnameIPMapping(None, ttl, {ipv6_ip}),
     }
     dynamic_range = IPRange(IPAddress(range_ip), IPAddress(range_ip))
     expected_generate_directives = DNSForwardZoneConfig.get_GENERATE_directives(
         dynamic_range)
     other_mapping = {
         ipv4_hostname: HostnameRRsetMapping(None, {(ttl, "MX", "10 bar")})
     }
     dns_zone_config = DNSForwardZoneConfig(
         domain,
         serial=random.randint(1, 100),
         other_mapping=other_mapping,
         default_ttl=ttl,
         mapping=mapping,
         dynamic_ranges=[dynamic_range],
     )
     dns_zone_config.write_config()
     self.assertThat(
         os.path.join(target_dir, "zone.%s" % domain),
         FileContains(matcher=ContainsAll([
             "$TTL %d" % ttl,
             "%s %d IN A %s" % (ipv4_hostname, ttl, ipv4_ip),
             "%s %d IN AAAA %s" % (ipv6_hostname, ttl, ipv6_ip),
             "%s %d IN MX 10 bar" % (ipv4_hostname, ttl),
         ] + [
             "$GENERATE %s %s IN A %s" %
             (iterator_values, reverse_dns, hostname) for iterator_values,
             reverse_dns, hostname in expected_generate_directives
         ])),
     )
Beispiel #2
0
 def test_writes_reverse_dns_zone_config(self):
     target_dir = patch_dns_config_path(self)
     domain = factory.make_string()
     ns_host_name = factory.make_name("ns")
     network = IPNetwork("192.168.0.1/22")
     dynamic_network = IPNetwork("192.168.0.1/28")
     dns_zone_config = DNSReverseZoneConfig(
         domain,
         serial=random.randint(1, 100),
         network=network,
         ns_host_name=ns_host_name,
         dynamic_ranges=[
             IPRange(dynamic_network.first, dynamic_network.last)
         ],
     )
     dns_zone_config.write_config()
     for sub in range(4):
         reverse_file_name = "zone.%d.168.192.in-addr.arpa" % sub
         expected_GEN_direct = dns_zone_config.get_GENERATE_directives(
             dynamic_network,
             domain,
             DomainInfo(
                 IPNetwork("192.168.%d.0/24" % sub),
                 "%d.168.192.in-addr.arpa" % sub,
             ),
         )
         expected = ContainsAll(
             ["30 IN NS %s." % ns_host_name]
             + [
                 "$GENERATE %s %s IN PTR %s"
                 % (iterator_values, reverse_dns, hostname)
                 for iterator_values, reverse_dns, hostname in expected_GEN_direct
             ]
         )
         self.assertThat(
             os.path.join(target_dir, reverse_file_name),
             FileContains(matcher=expected),
         )
Beispiel #3
0
 def test_writes_dns_zone_config(self):
     target_dir = 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()
     ttl = random.randint(10, 300)
     mapping = {
         ipv4_hostname: HostnameIPMapping(None, ttl, {ipv4_ip}),
         ipv6_hostname: HostnameIPMapping(None, ttl, {ipv6_ip}),
     }
     expected_generate_directives = (
         DNSForwardZoneConfig.get_GENERATE_directives(network))
     other_mapping = {
         ipv4_hostname: HostnameRRsetMapping(None, {(ttl, 'MX', '10 bar')})
     }
     dns_zone_config = DNSForwardZoneConfig(
         domain,
         serial=random.randint(1, 100),
         other_mapping=other_mapping,
         default_ttl=ttl,
         mapping=mapping,
         dynamic_ranges=[IPRange(network.first, network.last)])
     dns_zone_config.write_config()
     self.assertThat(
         os.path.join(target_dir, 'zone.%s' % domain),
         FileContains(matcher=ContainsAll([
             '$TTL %d' % ttl,
             '%s %d IN A %s' % (ipv4_hostname, ttl, ipv4_ip),
             '%s %d IN AAAA %s' % (ipv6_hostname, ttl, ipv6_ip),
             '%s %d IN MX 10 bar' % (ipv4_hostname, ttl),
         ] + [
             '$GENERATE %s %s IN A %s' %
             (iterator_values, reverse_dns, hostname) for iterator_values,
             reverse_dns, hostname in expected_generate_directives
         ])))
Beispiel #4
0
 def test_write_config_makes_config_world_readable(self):
     target_dir = patch_dns_config_path(self)
     DNSConfig().write_config()
     config_file = FilePath(os.path.join(target_dir, MAAS_NAMED_CONF_NAME))
     self.assertTrue(config_file.getPermissions().other.read)
Beispiel #5
0
 def test_write_config_DNSConfigDirectoryMissing_if_dir_missing(self):
     dnsconfig = DNSConfig()
     dir_name = patch_dns_config_path(self)
     os.rmdir(dir_name)
     self.assertRaises(DNSConfigDirectoryMissing, dnsconfig.write_config)
Beispiel #6
0
 def test_returns_filename_in_dns_config_dir(self):
     dns_dir = patch_dns_config_path(self)
     filename = factory.make_name("config")
     self.assertEqual(os.path.join(dns_dir, filename),
                      compose_config_path(filename))
Beispiel #7
0
 def test_set_up_options_conf_handles_no_upstream_dns(self):
     dns_conf_dir = patch_dns_config_path(self)
     set_up_options_conf()
     target_file = os.path.join(dns_conf_dir,
                                MAAS_NAMED_CONF_OPTIONS_INSIDE_NAME)
     self.assertThat(target_file, FileExists())