Esempio n. 1
0
 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()
             ]
         ),
     )
Esempio n. 2
0
 def test__processMessages_doesnt_call_when_node_deleted(self):
     worker = StatusWorkerService(sentinel.dbtasks)
     mock_processMessage = self.patch(worker, "_processMessage")
     mock_processMessage.return_value = False
     yield deferToDatabase(worker._processMessages, sentinel.node,
                           [sentinel.message1, sentinel.message2])
     self.assertThat(mock_processMessage,
                     MockCalledOnceWith(sentinel.node, sentinel.message1))
Esempio n. 3
0
 def test_processMessageNow_fails_when_in_transaction(self):
     worker = StatusWorkerService(sentinel.dbtasks)
     with ExpectedException(TransactionManagementError):
         yield deferToDatabase(
             transactional(worker._processMessageNow),
             sentinel.node,
             sentinel.message,
         )
Esempio n. 4
0
 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))
Esempio n. 5
0
 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)))
Esempio n. 6
0
 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))
Esempio n. 7
0
 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))
Esempio n. 8
0
 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())
Esempio n. 9
0
 def processMessage(self, node, payload):
     worker = StatusWorkerService(sentinel.dbtasks)
     return worker._processMessage(node, payload)
Esempio n. 10
0
 def test__tryUpdateNodes_returns_None_when_empty_queue(self):
     worker = StatusWorkerService(sentinel.dbtasks)
     self.assertIsNone(worker._tryUpdateNodes())
Esempio n. 11
0
 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)
Esempio n. 12
0
def make_StatusWorkerService(dbtasks):
    from metadataserver.api_twisted import StatusWorkerService
    return StatusWorkerService(dbtasks)
Esempio n. 13
0
 def updateLastPing(self, node, payload):
     worker = StatusWorkerService(sentinel.dbtasks)
     worker._updateLastPing(node, payload)