Exemple #1
0
 def test_forward_zone_get_cname_mapping_skips_identity(self):
     # We don't write cname records to map host names to themselves.
     # Without this, a node would get an invalid cname record upon
     # enlistment.
     zone = factory.make_name('zone')
     network = IPNetwork('10.250.99.0/24')
     ip = factory.getRandomIPInNetwork(network)
     generated_name = generated_hostname(ip)
     dns_zone_config = DNSForwardZoneConfig(
         zone, networks=[network],
         dns_ip=factory.getRandomIPInNetwork(network),
         mapping={generated_name: ip})
     self.assertNotIn(
         generated_name,
         dict(dns_zone_config.get_cname_mapping()))
Exemple #2
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)
Exemple #3
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)
Exemple #4
0
def make_inet_address(subnet=None):
    """Fake an AF_INET address."""
    if subnet is None:
        subnet = factory.getRandomNetwork()
    return {
        'broadcast': subnet.broadcast,
        'netmask': subnet.netmask,
        'addr': factory.getRandomIPInNetwork(subnet),
    }
Exemple #5
0
def make_inet_address(subnet=None):
    """Fake an AF_INET address."""
    if subnet is None:
        subnet = factory.getRandomNetwork()
    return {
        'broadcast': subnet.broadcast,
        'netmask': subnet.netmask,
        'addr': factory.getRandomIPInNetwork(subnet),
    }
Exemple #6
0
 def test_forward_zone_get_static_mapping_returns_iterator(self):
     name = factory.getRandomString()
     network = IPNetwork('192.12.0.1/30')
     dns_ip = factory.getRandomIPInNetwork(network)
     dns_zone_config = DNSForwardZoneConfig(
         name, networks=[network], dns_ip=dns_ip)
     self.assertThat(
         dns_zone_config.get_static_mapping(),
         MatchesAll(
             IsInstance(Iterable), Not(IsInstance(Sequence))))
Exemple #7
0
 def test_get_static_mapping_multiple_networks(self):
     name = factory.getRandomString()
     networks = IPNetwork('11.11.11.11/31'), IPNetwork('22.22.22.22/31')
     dns_ip = factory.getRandomIPInNetwork(networks[0])
     dns_zone_config = DNSForwardZoneConfig(
         name, networks=networks, dns_ip=dns_ip)
     self.assertItemsEqual(
         [
             ('%s.' % name, dns_ip),
             (generated_hostname('11.11.11.10'), '11.11.11.10'),
             (generated_hostname('11.11.11.11'), '11.11.11.11'),
             (generated_hostname('22.22.22.22'), '22.22.22.22'),
             (generated_hostname('22.22.22.23'), '22.22.22.23'),
         ],
         dns_zone_config.get_static_mapping(),
         )
Exemple #8
0
 def test_get_static_mapping(self):
     name = factory.getRandomString()
     network = IPNetwork('192.12.0.1/30')
     dns_ip = factory.getRandomIPInNetwork(network)
     dns_zone_config = DNSForwardZoneConfig(
         name, networks=[network], dns_ip=dns_ip)
     self.assertItemsEqual(
         [
             ('%s.' % name, dns_ip),
             (generated_hostname('192.12.0.0'), '192.12.0.0'),
             (generated_hostname('192.12.0.1'), '192.12.0.1'),
             (generated_hostname('192.12.0.2'), '192.12.0.2'),
             (generated_hostname('192.12.0.3'), '192.12.0.3'),
         ],
         dns_zone_config.get_static_mapping(),
         )
Exemple #9
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,
             )
         )
Exemple #10
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(),
                )))
Exemple #11
0
 def test_writes_dns_zone_config(self):
     target_dir = self.make_dir()
     self.patch(DNSForwardZoneConfig, 'target_dir', target_dir)
     domain = factory.getRandomString()
     hostname = factory.getRandomString()
     network = factory.getRandomNetwork()
     ip = factory.getRandomIPInNetwork(network)
     dns_zone_config = DNSForwardZoneConfig(
         domain, serial=random.randint(1, 100),
         mapping={hostname: ip}, networks=[network])
     dns_zone_config.write_config()
     self.assertThat(
         os.path.join(target_dir, 'zone.%s' % domain),
         FileContains(
             matcher=ContainsAll(
                 [
                     '%s IN CNAME %s' % (hostname, generated_hostname(ip)),
                     '%s IN A %s' % (generated_hostname(ip), ip),
                 ])))
Exemple #12
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(),
                        )))
Exemple #13
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,
                 ])))
Exemple #14
0
 def test_getRandomIPInNetwork(self):
     network = factory.getRandomNetwork()
     ip = factory.getRandomIPInNetwork(network)
     self.assertTrue(network.first <= IPAddress(ip).value <= network.last)
Exemple #15
0
 def test_getRandomIPInNetwork(self):
     network = factory.getRandomNetwork()
     ip = factory.getRandomIPInNetwork(network)
     self.assertTrue(
         network.first <= IPAddress(ip).value <= network.last)