def test_dhcpHandler_adds_to_needsDHCPUpdate(self): rack_id = random.randint(0, 100) listener = PostgresListenerService() service = RackControllerService(sentinel.ipcWorker, listener) service.watching = set([rack_id]) mock_startProcessing = self.patch(service, "startProcessing") service.dhcpHandler("sys_dhcp_%d" % rack_id, "") self.assertEquals(set([rack_id]), service.needsDHCPUpdate) self.assertThat(mock_startProcessing, MockCalledOnceWith())
def test_process_calls_processDHCP_for_rack_controller(self): rack_id = random.randint(0, 100) service = RackControllerService(sentinel.ipcWorker, sentinel.listener) service.watching = set([rack_id]) service.needsDHCPUpdate = set([rack_id]) service.running = True mock_processDHCP = self.patch(service, "processDHCP") service.startProcessing() yield service.processingDone self.assertThat(mock_processDHCP, MockCalledOnceWith(rack_id))
def test_process_doesnt_call_processDHCP_when_nothing_to_process(self): rack_id = random.randint(0, 100) service = RackControllerService(sentinel.ipcWorker, sentinel.listener) service.watching = set([rack_id]) service.needsDHCPUpdate = set() service.running = True mock_processDHCP = self.patch(service, "processDHCP") service.startProcessing() yield service.processingDone self.assertThat(mock_processDHCP, MockNotCalled())
def test_process_calls_processDHCP_multiple_times(self): rack_ids = [random.randint(0, 100) for _ in range(3)] service = RackControllerService(sentinel.ipcWorker, sentinel.listener) service.watching = set(rack_ids) service.needsDHCPUpdate = set(rack_ids) service.running = True mock_processDHCP = self.patch(service, "processDHCP") service.startProcessing() for _ in range(len(rack_ids)): yield service.processingDone for rack_id in rack_ids: self.assertThat(mock_processDHCP, MockAnyCall(rack_id))
def test_coreHandler_unwatch_calls_unregister(self): processId = random.randint(0, 100) rack_id = random.randint(0, 100) listener = PostgresListenerService() service = RackControllerService(sentinel.ipcWorker, listener) service.processId = processId service.watching = {rack_id} service.needsDHCPUpdate = {rack_id} listener.register(f"sys_dhcp_{rack_id}", service.dhcpHandler) service.coreHandler("sys_core_%d" % processId, "unwatch_%d" % rack_id) self.assertNotIn(f"sys_dhcp_{rack_id}", listener.listeners) self.assertEquals(set(), service.watching) self.assertEquals(set(), service.needsDHCPUpdate)
def test_coreHandler_watch_doesnt_call_register(self): processId = random.randint(0, 100) rack_id = random.randint(0, 100) listener = Mock() service = RackControllerService(sentinel.ipcWorker, listener) service.processId = processId service.watching = set([rack_id]) mock_startProcessing = self.patch(service, "startProcessing") service.coreHandler("sys_core_%d" % processId, "watch_%d" % rack_id) self.assertThat(listener.register, MockNotCalled()) self.assertEquals(set([rack_id]), service.watching) self.assertEquals(set([rack_id]), service.needsDHCPUpdate) self.assertThat(mock_startProcessing, MockCalledOnceWith())
def test_coreHandler_unwatch_calls_unregister(self): processId = random.randint(0, 100) rack_id = random.randint(0, 100) listener = Mock() service = RackControllerService(sentinel.ipcWorker, listener) service.processId = processId service.watching = {rack_id} service.needsDHCPUpdate = {rack_id} service.coreHandler("sys_core_%d" % processId, "unwatch_%d" % rack_id) self.assertThat( listener.unregister, MockCalledOnceWith("sys_dhcp_%d" % rack_id, service.dhcpHandler)) self.assertEquals(set(), service.watching) self.assertEquals(set(), service.needsDHCPUpdate)
def test_coreHandler_watch_doesnt_call_register(self): processId = random.randint(0, 100) rack_id = random.randint(0, 100) listener = PostgresListenerService() service = RackControllerService(sentinel.ipcWorker, listener) service.processId = processId service.watching = set([rack_id]) mock_startProcessing = self.patch(service, "startProcessing") sys_channel = f"sys_core_{processId}" service.coreHandler(sys_channel, "watch_%d" % rack_id) self.assertNotIn(sys_channel, listener.listeners) self.assertNotIn(sys_channel, listener.registeredChannels) self.assertEquals(set([rack_id]), service.watching) self.assertEquals(set([rack_id]), service.needsDHCPUpdate) self.assertThat(mock_startProcessing, MockCalledOnceWith())
def test_stopService_calls_unregister_for_all_watching(self): processId = random.randint(0, 100) watching = {random.randint(0, 100) for _ in range(3)} listener = Mock() service = RackControllerService(sentinel.ipcWorker, listener) service.processId = processId service.watching = watching yield service.stopService() self.assertThat( listener.unregister, MockAnyCall("sys_core_%d" % processId, service.coreHandler)) for watch_id in watching: self.assertThat( listener.unregister, MockAnyCall("sys_dhcp_%d" % watch_id, service.dhcpHandler))
def test_process_calls_processDHCP_multiple_times_on_failure(self): rack_id = random.randint(0, 100) service = RackControllerService(sentinel.ipcWorker, sentinel.listener) service.watching = set([rack_id]) service.needsDHCPUpdate = set([rack_id]) service.running = True mock_processDHCP = self.patch(service, "processDHCP") mock_processDHCP.side_effect = [ fail(factory.make_exception()), succeed(None), ] service.startProcessing() for _ in range(2): yield service.processingDone self.assertThat(mock_processDHCP, MockCallsMatch(call(rack_id), call(rack_id)))
def test_stopService_calls_unregister_for_all_watching(self): processId = random.randint(0, 100) watching = {random.randint(0, 100) for _ in range(3)} listener = PostgresListenerService() service = RackControllerService(sentinel.ipcWorker, listener) service.processId = processId service.watching = watching listener.register(f"sys_core_{processId}", service.coreHandler) for watch_id in watching: listener.register(f"sys_dhcp_{watch_id}", service.dhcpHandler) yield service.stopService() self.assertNotIn(f"sys_core_{processId}", listener.listeners) for watch_id in watching: self.assertNotIn(f"sys_dhcp_{watch_id}", listener.listeners)