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()))
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)
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)
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), }
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), }
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))))
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(), )
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(), )
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, ) )
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(), )))
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), ])))
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(), )))
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, ])))
def test_getRandomIPInNetwork(self): network = factory.getRandomNetwork() ip = factory.getRandomIPInNetwork(network) self.assertTrue(network.first <= IPAddress(ip).value <= network.last)
def test_getRandomIPInNetwork(self): network = factory.getRandomNetwork() ip = factory.getRandomIPInNetwork(network) self.assertTrue( network.first <= IPAddress(ip).value <= network.last)