def test_yields_nothing(self): node1 = self.make_node() node1_address = factory.make_StaticIPAddress( interface=factory.make_Interface(node=node1)) node2 = self.make_node() node2_address = factory.make_StaticIPAddress( # noqa interface=factory.make_Interface(node=node2), subnet=node1_address.subnet) self.assertThat(get_peers_for(node1), IsEmptySet) self.assertThat(get_peers_for(node2), IsEmptySet)
def test_yields_peer_addresses(self): node1 = self.make_node() node1_address = factory.make_StaticIPAddress( interface=factory.make_Interface(node=node1)) node2 = self.make_node() node2_address = factory.make_StaticIPAddress( interface=factory.make_Interface(node=node2), subnet=node1_address.subnet) self.assertThat(get_peers_for(node1), IsSetOfServers({node2_address.ip})) self.assertThat(get_peers_for(node2), IsSetOfServers({node1_address.ip}))
def test_prefers_closest_addresses(self): subnet4 = factory.make_Subnet(version=4) subnet6 = factory.make_Subnet(version=6) # Separate subnets but sharing the VLAN, hence routable. subnet4v1 = factory.make_Subnet(version=4, vlan=subnet4.vlan) subnet6v1 = factory.make_Subnet(version=6, vlan=subnet6.vlan) subnet4v2 = factory.make_Subnet(version=4, vlan=subnet4.vlan) subnet6v2 = factory.make_Subnet(version=6, vlan=subnet6.vlan) # Create a node with an address in the first two subnets and the first # two same-VLAN subnets. node1 = self.make_node() populate_node_with_addresses( node1, {subnet4, subnet6, subnet4v1, subnet6v1} ) # Create a node with an address in the first two subnets and the # second two same-VLAN subnets. node2 = self.make_node() populate_node_with_addresses( node2, {subnet4, subnet6, subnet4v2, subnet6v2} ) # The NTP server addresses chosen will be those that are "closest" to # the node, and same-subnet wins in this over same-VLAN. No additional # preference is made between IPv4 or IPv6, hence we allow for either. preferred_subnets = subnet4, subnet6 preferred_networks = IPSet( subnet.get_ipnetwork() for subnet in preferred_subnets ) for node in (node1, node2): peers = get_peers_for(node) self.assertThat(peers, Not(HasLength(0))) self.assertThat(preferred_networks, ContainsAll(peers))
def _getConfiguration(self): """Return NTP server configuration. The configuration object returned is comparable with previous and subsequently obtained configuration objects, allowing this service to determine whether a change needs to be applied to the NTP server. """ try: this_region = RegionController.objects.get_running_controller() except RegionController.DoesNotExist: # Treat this as a transient error. references = ntp.get_servers_for(None) peers = ntp.get_peers_for(None) else: references = ntp.get_servers_for(this_region) peers = ntp.get_peers_for(this_region) return _Configuration(references, peers)
def get_time_configuration(system_id): """Get settings to use for configuring NTP for the given node. :param system_id: system_id of node. :return: See `GetTimeConfiguration`. """ try: node = Node.objects.get(system_id=system_id) except Node.DoesNotExist: raise NoSuchNode.from_system_id(system_id) else: return { "servers": ntp.get_servers_for(node), "peers": ntp.get_peers_for(node), }
def test_yields_nothing(self): self.assertThat(get_peers_for(None), IsEmptySet)