(self, pytester: pytest.Pytester)
| 320 | assert node2.stolen == [] |
| 321 | |
| 322 | def test_stealing(self, pytester: pytest.Pytester) -> None: |
| 323 | config = pytester.parseconfig("--tx=2*popen") |
| 324 | sched = WorkStealingScheduling(config) |
| 325 | node1, node2 = MockNode(), MockNode() |
| 326 | sched.add_node(node1) |
| 327 | sched.add_node(node2) |
| 328 | collection = [f"test_workstealing.py::test_{i}" for i in range(16)] |
| 329 | sched.add_node_collection(node1, collection) |
| 330 | sched.add_node_collection(node2, collection) |
| 331 | assert sched.collection_is_completed |
| 332 | sched.schedule() |
| 333 | assert node1.sent == list(range(8)) |
| 334 | assert node2.sent == list(range(8, 16)) |
| 335 | for i in range(8): |
| 336 | sent = node1.sent[i] |
| 337 | assert isinstance(sent, int) |
| 338 | sched.mark_test_complete(node1, sent) |
| 339 | assert node2.stolen == list(range(12, 16)) |
| 340 | sched.remove_pending_tests_from_node(node2, node2.stolen) |
| 341 | for i in range(4): |
| 342 | sent = node2.sent[i] |
| 343 | assert isinstance(sent, int) |
| 344 | sched.mark_test_complete(node2, sent) |
| 345 | assert node1.stolen == [14, 15] |
| 346 | sched.remove_pending_tests_from_node(node1, node1.stolen) |
| 347 | sched.mark_test_complete(node1, 12) |
| 348 | sched.mark_test_complete(node2, 14) |
| 349 | assert node2.stolen == list(range(12, 16)) |
| 350 | assert node1.stolen == [14, 15] |
| 351 | assert sched.tests_finished |
| 352 | |
| 353 | def test_steal_on_add_node(self, pytester: pytest.Pytester) -> None: |
| 354 | node = MockNode() |
nothing calls this directly
no test coverage detected