def make_startable_RackHTTPService(self, *args, **kwargs): service = http.RackHTTPService(*args, **kwargs) service._orig_tryUpdate = service._tryUpdate self.patch(service, "_tryUpdate").return_value = always_succeed_with(None) service.call = (service._tryUpdate, tuple(), {}) return service
def _makeRackHTTPService(self, resource_root, rpc_service): from provisioningserver.rackdservices import http http_service = http.RackHTTPService(resource_root, rpc_service, reactor) http_service.setName("http") return http_service
def test_getConfiguration_updates_interval_to_high(self): rpc_service, protocol = yield prepareRegion(self) service = http.RackHTTPService(self.make_dir(), rpc_service, reactor) yield service.startService() self.addCleanup((yield service.stopService)) yield service._getConfiguration() self.assertThat(service.step, Equals(service.INTERVAL_HIGH)) self.assertThat(service._loop.interval, Equals(service.INTERVAL_HIGH))
def test_genRegionIps_groups_by_region(self): mock_rpc = Mock() mock_rpc.connections = {} for _ in range(3): region_name = factory.make_name("region") for _ in range(3): pid = random.randint(0, 10000) eventloop = "%s:pid=%s" % (region_name, pid) ip = factory.make_ip_address() mock_conn = Mock() mock_conn.address = (ip, random.randint(5240, 5250)) mock_rpc.connections[eventloop] = mock_conn service = http.RackHTTPService(self.make_dir(), mock_rpc, reactor) region_ips = list(service._genRegionIps()) self.assertEqual(3, len(region_ips))
def test_genRegionIps_formats_ipv6(self): mock_rpc = Mock() mock_rpc.connections = {} ip_addresses = set() for _ in range(3): region_name = factory.make_name("region") pid = random.randint(0, 10000) eventloop = "%s:pid=%s" % (region_name, pid) ip = factory.make_ipv6_address() ip_addresses.add("[%s]" % ip) mock_conn = Mock() mock_conn.address = (ip, random.randint(5240, 5250)) mock_rpc.connections[eventloop] = mock_conn service = http.RackHTTPService(self.make_dir(), mock_rpc, reactor) region_ips = set(service._genRegionIps()) self.assertEqual(ip_addresses, region_ips)
def test_genRegionIps_always_returns_same_result(self): mock_rpc = Mock() mock_rpc.connections = {} for _ in range(3): region_name = factory.make_name("region") for _ in range(3): pid = random.randint(0, 10000) eventloop = "%s:pid=%s" % (region_name, pid) ip = factory.make_ip_address() mock_conn = Mock() mock_conn.address = (ip, random.randint(5240, 5250)) mock_rpc.connections[eventloop] = mock_conn service = http.RackHTTPService(self.make_dir(), mock_rpc, reactor) region_ips = frozenset(service._genRegionIps()) for _ in range(3): self.assertEqual(region_ips, frozenset(service._genRegionIps()))
def test_service_iterates_on_low_interval(self): service = http.RackHTTPService(self.make_dir(), StubClusterClientService(), reactor) self.assertThat(service.step, Equals(service.INTERVAL_LOW))
def test_service_uses__tryUpdate_as_periodic_function(self): service = http.RackHTTPService(self.make_dir(), StubClusterClientService(), reactor) self.assertThat(service.call, Equals((service._tryUpdate, (), {})))