示例#1
0
    def test_different_tests_collected(self, testdir):
        """
        Test that LoadScheduling is reporting collection errors when
        different test ids are collected by workers.
        """
        class CollectHook(object):
            """
            Dummy hook that stores collection reports.
            """
            def __init__(self):
                self.reports = []

            def pytest_collectreport(self, report):
                self.reports.append(report)

        collect_hook = CollectHook()
        config = testdir.parseconfig("--tx=2*popen")
        config.pluginmanager.register(collect_hook, "collect_hook")
        node1 = MockNode()
        node2 = MockNode()
        sched = LoadScheduling(config)
        sched.add_node(node1)
        sched.add_node(node2)
        sched.add_node_collection(node1, ["a.py::test_1"])
        sched.add_node_collection(node2, ["a.py::test_2"])
        sched.schedule()
        assert len(collect_hook.reports) == 1
        rep = collect_hook.reports[0]
        assert 'Different tests were collected between' in rep.longrepr
示例#2
0
 def test_add_remove_node(self, testdir):
     node = MockNode()
     config = testdir.parseconfig("--tx=popen")
     sched = LoadScheduling(config)
     sched.add_node(node)
     collection = ["test_file.py::test_func"]
     sched.add_node_collection(node, collection)
     assert sched.collection_is_completed
     sched.schedule()
     assert not sched.pending
     crashitem = sched.remove_node(node)
     assert crashitem == collection[0]
示例#3
0
 def test_schedule_fewer_than_two_tests_per_node(self, testdir):
     config = testdir.parseconfig("--tx=2*popen")
     sched = LoadScheduling(config)
     sched.add_node(MockNode())
     sched.add_node(MockNode())
     sched.add_node(MockNode())
     node1, node2, node3 = sched.nodes
     col = ["xyz"] * 5
     sched.add_node_collection(node1, col)
     sched.add_node_collection(node2, col)
     sched.schedule()
     # assert not sched.tests_finished
     sent1 = node1.sent
     sent2 = node2.sent
     sent3 = node3.sent
     assert sent1 == [0, 3]
     assert sent2 == [1, 4]
     assert sent3 == [2]
     assert not sched.pending
示例#4
0
 def test_schedule_fewer_tests_than_nodes(
         self, pytester: pytest.Pytester) -> None:
     config = pytester.parseconfig("--tx=2*popen")
     sched = LoadScheduling(config)
     sched.add_node(MockNode())
     sched.add_node(MockNode())
     sched.add_node(MockNode())
     node1, node2, node3 = sched.nodes
     col = ["xyz"] * 2
     sched.add_node_collection(node1, col)
     sched.add_node_collection(node2, col)
     sched.schedule()
     # assert not sched.tests_finished
     sent1 = node1.sent
     sent2 = node2.sent
     sent3 = node3.sent
     assert sent1 == [0]
     assert sent2 == [1]
     assert sent3 == []
     assert not sched.pending
示例#5
0
 def test_schedule_batch_size(self, testdir):
     config = testdir.parseconfig("--tx=2*popen")
     sched = LoadScheduling(config)
     sched.add_node(MockNode())
     sched.add_node(MockNode())
     node1, node2 = sched.nodes
     col = ["xyz"] * 6
     sched.add_node_collection(node1, col)
     sched.add_node_collection(node2, col)
     sched.schedule()
     # assert not sched.tests_finished
     sent1 = node1.sent
     sent2 = node2.sent
     assert sent1 == [0, 2]
     assert sent2 == [1, 3]
     assert sched.pending == [4, 5]
     assert sched.node2pending[node1] == sent1
     assert sched.node2pending[node2] == sent2
     assert len(sched.pending) == 2
     sched.mark_test_complete(node1, 0)
     assert node1.sent == [0, 2, 4]
     assert sched.pending == [5]
     assert node2.sent == [1, 3]
     sched.mark_test_complete(node1, 2)
     assert node1.sent == [0, 2, 4, 5]
     assert not sched.pending
示例#6
0
 def test_schedule_load_simple(self, testdir):
     config = testdir.parseconfig("--tx=2*popen")
     sched = LoadScheduling(config)
     sched.add_node(MockNode())
     sched.add_node(MockNode())
     node1, node2 = sched.nodes
     collection = ["a.py::test_1", "a.py::test_2"]
     assert not sched.collection_is_completed
     sched.add_node_collection(node1, collection)
     assert not sched.collection_is_completed
     sched.add_node_collection(node2, collection)
     assert sched.collection_is_completed
     assert sched.node2collection[node1] == collection
     assert sched.node2collection[node2] == collection
     sched.schedule()
     assert not sched.pending
     assert sched.tests_finished
     assert len(node1.sent) == 1
     assert len(node2.sent) == 1
     assert node1.sent == [0]
     assert node2.sent == [1]
     sched.mark_test_complete(node1, node1.sent[0])
     assert sched.tests_finished