예제 #1
0
 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..."))
예제 #2
0
 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))
예제 #3
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)))
예제 #4
0
 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))
예제 #5
0
 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))
예제 #6
0
 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]))
예제 #7
0
 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..."))
예제 #8
0
 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)
예제 #9
0
 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))
예제 #10
0
 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"))