def test__processMessages_doesnt_call_when_node_deleted(self): worker = StatusWorkerService(sentinel.dbtasks) mock_processMessage = self.patch(worker, "_processMessage") mock_processMessage.return_value = False mock_updateLastPing = self.patch(worker, "_updateLastPing") yield deferToDatabase(worker._processMessages, sentinel.node, [sentinel.message1, sentinel.message2]) self.assertThat(mock_processMessage, MockCalledOnceWith(sentinel.node, sentinel.message1)) self.assertThat(mock_updateLastPing, MockNotCalled())
def test_queueMessages_handled_invalid_nodekey_with_instant_msg(self): worker = StatusWorkerService(sentinel.dbtasks) mock_processMessage = self.patch(worker, "_processMessage") contents = b'These are the contents of the file.' encoded_content = encode_as_base64(bz2.compress(contents)) message = self.make_message() message['files'] = [ { "path": "sample.txt", "encoding": "uuencode", "compression": "bzip2", "content": encoded_content } ] nodes_with_tokens = yield deferToDatabase(self.make_nodes_with_tokens) node, token = nodes_with_tokens[0] yield deferToDatabase(token.delete) yield worker.queueMessage(token.key, message) self.assertThat( mock_processMessage, MockNotCalled())
def test__processMessages_calls_processMessage(self): worker = StatusWorkerService(sentinel.dbtasks) mock_processMessage = self.patch(worker, "_processMessage") yield deferToDatabase( worker._processMessages, sentinel.node, [sentinel.message1, sentinel.message2]) self.assertThat( mock_processMessage, MockCallsMatch( call(sentinel.node, sentinel.message1), call(sentinel.node, sentinel.message2)))
def test__tryUpdateNodes_sends_work_to_dbtasks(self): nodes_with_tokens = yield deferToDatabase(self.make_nodes_with_tokens) node_messages = { node: [self.make_message() for _ in range(3)] for node, _ in nodes_with_tokens } dbtasks = Mock() dbtasks.addTask = Mock() worker = StatusWorkerService(dbtasks) for node, token in nodes_with_tokens: for message in node_messages[node]: worker.queueMessage(token.key, message) yield worker._tryUpdateNodes() call_args = [(call_arg[0][1], call_arg[0][2]) for call_arg in dbtasks.addTask.call_args_list] self.assertThat( call_args, MatchesSetwise(*[ MatchesListwise([Equals(node), Equals(messages)]) for node, messages in node_messages.items() ]))
def processMessage(self, node, payload): worker = StatusWorkerService(sentinel.dbtasks) return worker._processMessage(node, payload)
def test__processMessageNow_fails_when_in_transaction(self): worker = StatusWorkerService(sentinel.dbtasks) with ExpectedException(TransactionManagementError): yield deferToDatabase(transactional(worker._processMessageNow), sentinel.node, sentinel.message)
def test__tryUpdateNodes_returns_None_when_empty_queue(self): worker = StatusWorkerService(sentinel.dbtasks) self.assertIsNone(worker._tryUpdateNodes())
def test__init__(self): worker = StatusWorkerService(sentinel.dbtasks, clock=sentinel.reactor) self.assertEqual(sentinel.dbtasks, worker.dbtasks) self.assertEqual(sentinel.reactor, worker.clock) self.assertEqual(60, worker.step) self.assertEqual((worker._tryUpdateNodes, tuple(), {}), worker.call)
def make_StatusWorkerService(dbtasks): from metadataserver.api_twisted import StatusWorkerService return StatusWorkerService(dbtasks)
def updateLastPing(self, node, payload): worker = StatusWorkerService(sentinel.dbtasks) worker._updateLastPing(node, payload)