MCPcopy
hub / github.com/pytest-dev/pytest-xdist / test_steal_work

Method test_steal_work

testing/test_remote.py:243–300  ·  view source on GitHub ↗
(
        self, worker: WorkerSetup, unserialize_report: UnserializerReport
    )

Source from the content-addressed store, hash-verified

241 assert ev.name == "errordown"
242
243 def test_steal_work(
244 self, worker: WorkerSetup, unserialize_report: UnserializerReport
245 ) -> None:
246 worker.pytester.makepyfile(
247 """
248 import time
249 def test_func(): time.sleep(1)
250 def test_func2(): pass
251 def test_func3(): pass
252 def test_func4(): pass
253 """
254 )
255 worker.setup()
256 ev = worker.popevent("collectionfinish")
257 ids = ev.kwargs["ids"]
258 assert len(ids) == 4
259 worker.sendcommand("runtests_all")
260
261 # wait for test_func setup
262 ev = worker.popevent("testreport")
263 rep = unserialize_report(ev.kwargs["data"])
264 assert rep.nodeid.endswith("::test_func")
265 assert rep.when == "setup"
266
267 worker.sendcommand("steal", indices=[1, 2])
268 ev = worker.popevent("unscheduled")
269 # Cannot steal index 1 because it is completed already, so do not steal any.
270 assert ev.kwargs["indices"] == []
271
272 # Index 2 can be stolen, as it is still pending.
273 worker.sendcommand("steal", indices=[2])
274 ev = worker.popevent("unscheduled")
275 assert ev.kwargs["indices"] == [2]
276
277 reports = [
278 ("test_func", "call"),
279 ("test_func", "teardown"),
280 ("test_func2", "setup"),
281 ("test_func2", "call"),
282 ("test_func2", "teardown"),
283 ]
284
285 for func, when in reports:
286 ev = worker.popevent("testreport")
287 rep = unserialize_report(ev.kwargs["data"])
288 assert rep.nodeid.endswith(f"::{func}")
289 assert rep.when == when
290
291 worker.sendcommand("shutdown")
292
293 for when in ["setup", "call", "teardown"]:
294 ev = worker.popevent("testreport")
295 rep = unserialize_report(ev.kwargs["data"])
296 assert rep.nodeid.endswith("::test_func4")
297 assert rep.when == when
298
299 ev = worker.popevent("workerfinished")
300 assert "workeroutput" in ev.kwargs

Callers

nothing calls this directly

Calls 3

popeventMethod · 0.80
setupMethod · 0.45
sendcommandMethod · 0.45

Tested by

no test coverage detected