示例#1
0
 def test_get_static_mapping_returns_iterator(self):
     dns_zone_config = DNSReverseZoneConfig(
         factory.getRandomString(), network=IPNetwork('192.12.0.1/30'))
     self.assertThat(
         dns_zone_config.get_static_mapping(),
         MatchesAll(
             IsInstance(Iterable), Not(IsInstance(Sequence))))
示例#2
0
 def test_reverse_config_file_is_world_readable(self):
     self.patch(DNSReverseZoneConfig, 'target_dir', self.make_dir())
     dns_zone_config = DNSReverseZoneConfig(
         factory.getRandomString(), serial=random.randint(1, 100),
         dns_ip=factory.getRandomIPAddress(),
         network=factory.getRandomNetwork())
     dns_zone_config.write_config()
     filepath = FilePath(dns_zone_config.target_path)
     self.assertTrue(filepath.getPermissions().other.read)
示例#3
0
 def test_get_static_mapping(self):
     name = factory.getRandomString()
     network = IPNetwork('192.12.0.1/30')
     dns_zone_config = DNSReverseZoneConfig(name, network=network)
     self.assertItemsEqual(
         [
             ('0', '%s.' % generated_hostname('192.12.0.0', name)),
             ('1', '%s.' % generated_hostname('192.12.0.1', name)),
             ('2', '%s.' % generated_hostname('192.12.0.2', name)),
             ('3', '%s.' % generated_hostname('192.12.0.3', name)),
         ],
         dns_zone_config.get_static_mapping(),
         )
示例#4
0
 def test_writes_reverse_dns_zone_config(self):
     target_dir = self.make_dir()
     self.patch(DNSReverseZoneConfig, 'target_dir', target_dir)
     domain = factory.getRandomString()
     network = IPNetwork('192.168.0.1/22')
     dns_zone_config = DNSReverseZoneConfig(
         domain, serial=random.randint(1, 100), network=network)
     dns_zone_config.write_config()
     reverse_file_name = 'zone.168.192.in-addr.arpa'
     expected = Contains(
         '10.0 IN PTR %s' % generated_hostname('192.168.0.10'))
     self.assertThat(
         os.path.join(target_dir, reverse_file_name),
         FileContains(matcher=expected))
示例#5
0
 def test_writes_dns_zone_config_with_NS_record(self):
     target_dir = self.make_dir()
     self.patch(DNSReverseZoneConfig, 'target_dir', target_dir)
     network = factory.getRandomNetwork()
     dns_ip = factory.getRandomIPAddress()
     dns_zone_config = DNSReverseZoneConfig(
         factory.getRandomString(), serial=random.randint(1, 100),
         dns_ip=dns_ip, network=network)
     dns_zone_config.write_config()
     self.assertThat(
         os.path.join(
             target_dir, 'zone.%s' % dns_zone_config.zone_name),
         FileContains(
             matcher=Contains('IN  NS  %s.' % dns_zone_config.domain)))
示例#6
0
    def test_write_dns_zone_config_writes_file(self):
        command = factory.getRandomString()
        domain = factory.getRandomString()
        network = IPNetwork('192.168.0.3/24')
        ip = factory.getRandomIPInNetwork(network)
        forward_zone = DNSForwardZoneConfig(
            domain,
            serial=random.randint(1, 100),
            mapping={factory.getRandomString(): ip},
            networks=[network])
        reverse_zone = DNSReverseZoneConfig(
            domain,
            serial=random.randint(1, 100),
            mapping={factory.getRandomString(): ip},
            network=network)
        result = write_dns_zone_config.delay(
            zones=[forward_zone, reverse_zone],
            callback=rndc_command.subtask(args=[command]))

        forward_file_name = 'zone.%s' % domain
        reverse_file_name = 'zone.0.168.192.in-addr.arpa'
        self.assertThat((
            result.successful(),
            os.path.join(self.dns_conf_dir, forward_file_name),
            os.path.join(self.dns_conf_dir, reverse_file_name),
            self.rndc_recorder.calls,
        ),
                        MatchesListwise((
                            Equals(True),
                            FileExists(),
                            FileExists(),
                            Equals([((command, ), {})]),
                        )), result)
示例#7
0
 def _gen_reverse_zones(nodegroups, serial, mappings, networks):
     """Generator of reverse zones, sorted by network."""
     get_domain = lambda nodegroup: nodegroup.name
     dns_ip = get_dns_server_address()
     reverse_nodegroups = sorted(nodegroups, key=networks.get)
     for nodegroup in reverse_nodegroups:
         yield DNSReverseZoneConfig(get_domain(nodegroup),
                                    serial=serial,
                                    dns_ip=dns_ip,
                                    mapping=mappings[nodegroup],
                                    network=networks[nodegroup])
示例#8
0
 def test_reverse_data_slash_22(self):
     # DNSReverseZoneConfig calculates the reverse data correctly for
     # a /22 network.
     domain = factory.getRandomString()
     hostname = factory.getRandomString()
     ip = '192.168.0.10'
     network = IPNetwork('192.168.0.1/22')
     dns_zone_config = DNSReverseZoneConfig(
         domain, mapping={hostname: ip}, network=network)
     self.assertEqual(
         '168.192.in-addr.arpa',
         dns_zone_config.zone_name)
示例#9
0
 def test_computes_dns_config_file_paths(self):
     domain = factory.make_name('zone')
     reverse_file_name = 'zone.168.192.in-addr.arpa'
     dns_zone_config = DNSReverseZoneConfig(
         domain, network=IPNetwork("192.168.0.0/22"))
     self.assertEqual(
         (
             locate_config(TEMPLATES_DIR, 'zone.template'),
             os.path.join(conf.DNS_CONFIG_DIR, reverse_file_name)
         ),
         (
             dns_zone_config.template_path,
             dns_zone_config.target_path,
         ))
示例#10
0
 def test_fields(self):
     domain = factory.getRandomString()
     serial = random.randint(1, 200)
     hostname = factory.getRandomString()
     network = factory.getRandomNetwork()
     ip = factory.getRandomIPInNetwork(network)
     mapping = {hostname: ip}
     dns_zone_config = DNSReverseZoneConfig(
         domain, serial, mapping, network=network)
     self.assertThat(
         dns_zone_config,
         MatchesStructure.byEquality(
             domain=domain,
             serial=serial,
             mapping=mapping,
             network=network,
             )
         )
示例#11
0
    def test_write_full_dns_config_sets_up_config(self):
        # write_full_dns_config writes the config file, writes
        # the zone files, and reloads the dns service.
        domain = factory.getRandomString()
        network = IPNetwork('192.168.0.3/24')
        ip = factory.getRandomIPInNetwork(network)
        zones = [
            DNSForwardZoneConfig(domain,
                                 serial=random.randint(1, 100),
                                 mapping={factory.getRandomString(): ip},
                                 networks=[network]),
            DNSReverseZoneConfig(domain,
                                 serial=random.randint(1, 100),
                                 mapping={factory.getRandomString(): ip},
                                 network=network),
        ]
        command = factory.getRandomString()
        result = write_full_dns_config.delay(
            zones=zones,
            callback=rndc_command.subtask(args=[command]),
            upstream_dns=factory.getRandomIPAddress())

        forward_file_name = 'zone.%s' % domain
        reverse_file_name = 'zone.0.168.192.in-addr.arpa'
        self.assertThat((
            result.successful(),
            self.rndc_recorder.calls,
            os.path.join(self.dns_conf_dir, forward_file_name),
            os.path.join(self.dns_conf_dir, reverse_file_name),
            os.path.join(self.dns_conf_dir, MAAS_NAMED_CONF_NAME),
            os.path.join(self.dns_conf_dir,
                         MAAS_NAMED_CONF_OPTIONS_INSIDE_NAME),
        ),
                        MatchesListwise((
                            Equals(True),
                            Equals([((command, ), {})]),
                            FileExists(),
                            FileExists(),
                            FileExists(),
                            FileExists(),
                        )))
示例#12
0
 def test_write_config_writes_config(self):
     target_dir = self.make_dir()
     self.patch(DNSConfig, 'target_dir', target_dir)
     domain = factory.getRandomString()
     network = IPNetwork('192.168.0.3/24')
     ip = factory.getRandomIPInNetwork(network)
     forward_zone = DNSForwardZoneConfig(
         domain, mapping={factory.getRandomString(): ip},
         networks=[network])
     reverse_zone = DNSReverseZoneConfig(
         domain, mapping={factory.getRandomString(): ip},
         network=network)
     dnsconfig = DNSConfig((forward_zone, reverse_zone))
     dnsconfig.write_config()
     self.assertThat(
         os.path.join(target_dir, MAAS_NAMED_CONF_NAME),
         FileContains(
             matcher=ContainsAll(
                 [
                     'zone.%s' % domain,
                     'zone.0.168.192.in-addr.arpa',
                     MAAS_NAMED_RNDC_CONF_NAME,
                 ])))