def test_senditems_each_and_receive_with_two_nodes(self, testdir): item = testdir.getitem("def test_func(): pass") node1 = MockNode() node2 = MockNode() session = DSession(item.config) session.addnode(node1) session.addnode(node2) session.senditems_each([item]) assert session.node2pending[node1] == [item] assert session.node2pending[node2] == [item] assert node1 in session.item2nodes[item] assert node2 in session.item2nodes[item] session.removeitem(item, node1) assert session.item2nodes[item] == [node2] session.removeitem(item, node2) assert not session.node2pending[node1] assert not session.item2nodes
def test_senditems_each_and_receive_with_two_nodes(self, testdir): item = testdir.getitem("def test_func(): pass") node1 = MockNode() node2 = MockNode() session = DSession(item.config) session.addnode(node1) session.addnode(node2) session.senditems_each([item]) assert session.node2pending[node1] == [item] assert session.node2pending[node2] == [item] assert node1 in session.item2nodes[item] assert node2 in session.item2nodes[item] session.removeitem(item, node1) assert session.item2nodes[item] == [node2] session.removeitem(item, node2) assert not session.node2pending[node1] assert not session.item2nodes
def test_removeitem_from_failing_teardown(self, testdir): # teardown reports only come in when they signal a failure # internal session-management should basically ignore them # XXX probably it'S best to invent a new error hook for # teardown/setup related failures modcol = testdir.getmodulecol(""" def test_one(): pass def teardown_function(function): assert 0 """) item1, = modcol.collect() # setup a session with two nodes session = DSession(item1.config) node1, node2 = MockNode(), MockNode() session.addnode(node1) session.addnode(node2) # have one test pending for a node that goes down session.senditems_each([item1]) nodes = session.item2nodes[item1] class rep: failed = True item = item1 node = nodes[0] when = "call" session.queueevent("pytest_runtest_logreport", report=rep) reprec = testdir.getreportrecorder(session) print session.item2nodes loopstate = session._initloopstate([]) assert len(session.item2nodes[item1]) == 2 session.loop_once(loopstate) assert len(session.item2nodes[item1]) == 1 rep.when = "teardown" session.queueevent("pytest_runtest_logreport", report=rep) session.loop_once(loopstate) assert len(session.item2nodes[item1]) == 1