From cc92210dc294f8031de8dea79a5271e3befcb7f2 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 26 Nov 2018 12:09:39 +0100 Subject: [PATCH] Retry crashed tests --- src/tests/conftest.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/tests/conftest.py diff --git a/src/tests/conftest.py b/src/tests/conftest.py new file mode 100644 index 0000000000..367091d44c --- /dev/null +++ b/src/tests/conftest.py @@ -0,0 +1,28 @@ +import pytest +from xdist.dsession import DSession + + +@pytest.mark.trylast +def pytest_configure(config): + """ + Somehow, somewhere, our test suite causes a segfault in SQLite, but only when run + on Travis CI in full. Therefore, we monkeypatch pytest-xdist to retry segfaulted + tests and keep fingers crossed that this doesn't turn into an infinite loop. + """ + + def _handle_crashitem(self, nodeid, worker): + runner = self.config.pluginmanager.getplugin("runner") + fspath = nodeid.split("::")[0] + msg = "Worker %r crashed while running %r" % (worker.gateway.id, nodeid) + rep = runner.TestReport( + nodeid, (fspath, None, fspath), (), "failed", msg, "???" + ) + rep.node = worker + self.config.hook.pytest_runtest_logreport(report=rep) + + # Schedule retry + self.sched.pending.append(self.sched.collection.index(nodeid)) + for node in self.sched.node2pending: + self.sched.check_schedule(node) + + DSession.handle_crashitem = _handle_crashitem