def test__delete_current_entry_deletes_and_logs_if_entry_deleted(self): region = factory.make_RegionController() hostname = factory.make_hostname() ip = factory.make_ip_address() factory.make_RDNS(ip, hostname, region) RDNS.objects.delete_current_entry(ip, region) self.assertThat( self.maaslog.output, DocTestMatches("Deleted reverse DNS entry...resolved to..."))
def test__deletes_related_rdns_entries(self): neigh = factory.make_Neighbour() factory.make_Neighbour(ip=neigh.ip, mac_address=neigh.mac_address) factory.make_RDNS(ip=neigh.ip) self.assertThat(Neighbour.objects.count(), Equals(2)) self.assertThat(RDNS.objects.count(), Equals(1)) Discovery.objects.delete_by_mac_and_ip(ip=neigh.ip, mac=neigh.mac_address) self.assertThat(Neighbour.objects.count(), Equals(0)) self.assertThat(MDNS.objects.count(), Equals(0))
def test_allows_separate_observations_per_region(self): r1 = factory.make_RegionController() r2 = factory.make_RegionController() rdns1 = factory.make_RDNS("10.0.0.1", "test.maasr1", r1) rdns2 = factory.make_RDNS("10.0.0.1", "test.maasr2", r2) result1 = RDNS.objects.get_current_entry("10.0.0.1", r1) result2 = RDNS.objects.get_current_entry("10.0.0.1", r2) self.assertThat(rdns1.id, Equals(result1.id)) self.assertThat(rdns2.id, Equals(result2.id)) self.assertThat(rdns1.id, Not(Equals(rdns2.id)))
def test_set_current_entry_updates_updated_time(self): region = factory.make_RegionController() hostname = factory.make_hostname() ip = factory.make_ip_address() yesterday = datetime.now() - timedelta(days=1) factory.make_RDNS(ip, hostname, region, updated=yesterday) # Nothing changed, so expect that only the last updated time changed. RDNS.objects.set_current_entry(ip, [hostname], region) result = RDNS.objects.first() self.assertThat(result.updated, GreaterThan(yesterday))
def test__prefers_rdns_to_mdns(self): rack = factory.make_RackController() iface = factory.make_Interface(node=rack) ip = factory.make_ip_address(ipv6=False) mdns_hostname = factory.make_hostname() rdns_hostname = factory.make_hostname() factory.make_Discovery(hostname="", interface=iface, ip=ip) factory.make_MDNS(hostname=mdns_hostname, ip=ip, interface=iface) factory.make_RDNS(hostname=rdns_hostname, ip=ip, observer=rack) discovery = Discovery.objects.first() self.assertThat(discovery.hostname, Equals(rdns_hostname))
def test_set_current_entry_updates_existing_hostnames(self): region = factory.make_RegionController() h1 = factory.make_hostname() h2 = factory.make_hostname() h3 = factory.make_hostname() ip = factory.make_ip_address() # Place a random hostname in the record at first... factory.make_RDNS(ip, factory.make_hostname(), region) # Then expect this function replaces it. RDNS.objects.set_current_entry(ip, [h1, h2, h3], region) result = RDNS.objects.first() self.assertThat(result.ip, Equals(ip)) self.assertThat(result.hostname, Equals(h1)) self.assertThat(result.hostnames, Equals([h1, h2, h3]))
def test__set_current_entry_updates_existing_hostname_with_log(self): region = factory.make_RegionController() hostname = factory.make_hostname() ip = factory.make_ip_address() # Place a random hostname in the record at first... factory.make_RDNS(ip, factory.make_hostname(), region) # Then expect this function replaces it. RDNS.objects.set_current_entry(ip, [hostname], region) result = RDNS.objects.first() self.assertThat(result.ip, Equals(ip)) self.assertThat(result.hostname, Equals(hostname)) self.assertThat( self.maaslog.output, DocTestMatches("Reverse DNS entry updated...resolves to..."))
def test_forbids_duplicate_observation_on_single_region(self): region = factory.make_RegionController() factory.make_RDNS("10.0.0.1", "test.maas", region) with ExpectedException(ValidationError, ".*already exists.*"): factory.make_RDNS("10.0.0.1", "test.maasr2", region)
def test_get_current_entry__returns_entry(self): region = factory.make_RegionController() rdns = factory.make_RDNS(ip="10.0.0.1", hostname="test.maas") result = RDNS.objects.get_current_entry("10.0.0.1", region) self.assertThat(rdns.hostname, Equals(result.hostname))
def test_accepts_invalid_hostname(self): rdns = factory.make_RDNS(hostname="Game room") # Expect no exception. We don't trust reverse DNS to always return # something that is valid. self.assertThat(rdns.hostname, Equals("Game room"))