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 test_queueMessages_processes_top_level_message_instantly(self): worker = StatusWorkerService(sentinel.dbtasks) mock_processMessage = self.patch(worker, "_processMessage") message = self.make_message() message['event_type'] = 'finish' nodes_with_tokens = yield deferToDatabase(self.make_nodes_with_tokens) node, token = nodes_with_tokens[0] yield worker.queueMessage(token.key, message) self.assertThat(mock_processMessage, MockCalledOnceWith(node, message))
def test_queueMessages_processes_top_level_status_messages_instantly(self): for name in EVENT_STATUS_MESSAGES.keys(): worker = StatusWorkerService(sentinel.dbtasks) mock_processMessage = self.patch(worker, "_processMessage") message = self.make_message() message["event_type"] = "start" message["name"] = name nodes_with_tokens = yield deferToDatabase( self.make_nodes_with_tokens) node, token = nodes_with_tokens[0] yield worker.queueMessage(token.key, message) self.assertThat(mock_processMessage, MockCalledOnceWith(node, message))
def test_queueMessages_processes_files_message_instantly(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 worker.queueMessage(token.key, message) self.assertThat(mock_processMessage, MockCalledOnceWith(node, message))
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())