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))))
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)
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(), )
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))
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)))
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 _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])
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)
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, ))
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_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, ])))