def _check_nodes_have_same_collection(self): """Return True if all nodes have collected the same items. If collections differ, this method returns False while logging the collection differences and posting collection errors to pytest_collectreport hook. """ node_collection_items = list(self.registered_collections.items()) first_node, col = node_collection_items[0] same_collection = True for node, collection in node_collection_items[1:]: msg = report_collection_diff( col, collection, first_node.gateway.id, node.gateway.id ) if not msg: continue same_collection = False self.log(msg) if self.config is None: continue rep = CollectReport(node.gateway.id, "failed", longrepr=msg, result=[]) self.config.hook.pytest_collectreport(report=rep) return same_collection
def add_node_collection(self, node, collection): """Add the collected test items from a node Collection is complete once all nodes have submitted their collection. In this case its pending list is set to an empty list. When the collection is already completed this submission is from a node which was restarted to replace a dead node. In this case we already assign the pending items here. In either case ``.schedule()`` will instruct the node to start running the required tests. """ assert node in self.node2pending if not self.collection_is_completed: self.node2collection[node] = list(collection) self.node2pending[node] = [] if len(self.node2collection) >= self.numnodes: self.collection_is_completed = True elif self._removed2pending: for deadnode in self._removed2pending: if deadnode.gateway.spec == node.gateway.spec: dead_collection = self.node2collection[deadnode] if collection != dead_collection: msg = report_collection_diff(dead_collection, collection, deadnode.gateway.id, node.gateway.id) self.log(msg) return pending = self._removed2pending.pop(deadnode) self.node2pending[node] = pending break
def add_node_collection(self, node, collection): """Add the collected test items from a node. The collection is stored in the ``.registered_collections`` dictionary. Called by the hook: - ``DSession.worker_collectionfinish``. """ # Check that add_node() was called on the node before assert node in self.assigned_work # A new node has been added later, perhaps an original one died. if self.collection_is_completed: # Assert that .schedule() should have been called by now assert self.collection # Check that the new collection matches the official collection if collection != self.collection: other_node = next(iter(self.registered_collections.keys())) msg = report_collection_diff( self.collection, collection, other_node.gateway.id, node.gateway.id ) self.log(msg) return self.registered_collections[node] = list(collection)
def add_node_collection(self, node, collection): """Add the collected test items from a node The collection is stored in the ``.node2collection`` map. Called by the ``DSession.worker_collectionfinish`` hook. """ assert node in self.node2pending if self.collection_is_completed: # A new node has been added later, perhaps an original one died. # .schedule() should have # been called by now assert self.collection if collection != self.collection: other_node = next(iter(self.node2collection.keys())) msg = report_collection_diff(self.collection, collection, other_node.gateway.id, node.gateway.id) self.log(msg) return self.node2collection[node] = list(collection)
def test_report_collection_diff_different(): """Test reporting of different collections.""" from_collection = ['aaa', 'bbb', 'ccc', 'YYY'] to_collection = ['aZa', 'bbb', 'XXX', 'ccc'] error_message = ( 'Different tests were collected between 1 and 2. The difference is:\n' '--- 1\n' '\n' '+++ 2\n' '\n' '@@ -1,4 +1,4 @@\n' '\n' '-aaa\n' '+aZa\n' ' bbb\n' '+XXX\n' ' ccc\n' '-YYY') msg = report_collection_diff(from_collection, to_collection, '1', '2') assert msg == error_message
def test_report_collection_diff_different() -> None: """Test reporting of different collections.""" from_collection = ["aaa", "bbb", "ccc", "YYY"] to_collection = ["aZa", "bbb", "XXX", "ccc"] error_message = ( "Different tests were collected between 1 and 2. The difference is:\n" "--- 1\n" "\n" "+++ 2\n" "\n" "@@ -1,4 +1,4 @@\n" "\n" "-aaa\n" "+aZa\n" " bbb\n" "+XXX\n" " ccc\n" "-YYY") msg = report_collection_diff(from_collection, to_collection, "1", "2") assert msg == error_message
def test_report_collection_diff_equal(): """Test reporting of equal collections.""" from_collection = to_collection = ['aaa', 'bbb', 'ccc'] assert report_collection_diff(from_collection, to_collection, 1, 2) is None
def test_report_collection_diff_equal(): """Test reporting of equal collections.""" from_collection = to_collection = ["aaa", "bbb", "ccc"] assert report_collection_diff(from_collection, to_collection, 1, 2) is None