Incompatible with Python 3.11
I tried running Deckard for the first time, and I found that it works with Python 3.10 and older, but fails with Python 3.11 and newer. When running any scenario, I see the following error.
deckard_pytest.py:165: in test_passes_qmin_off
run_test(scenario.path, False, scenario.config, max_retries)
deckard_pytest.py:144: in run_test
with TCPDump(config):
deckard_pytest.py:145: in run_test
deckard.process_file(path, qmin, config)
deckard.py:249: in process_file
daemons = setup_daemons(context)
deckard.py:181: in setup_daemons
conncheck_daemon(daemon_proc, program_config, context['_SOCKET_FAMILY'])
deckard.py:165: in conncheck_daemon
time.sleep(0.1)
E OSError: [Errno 22] Invalid argument
When I re-run this under strace, I see the following syscall.
53213 clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, {tv_sec=-1741143354, tv_nsec=597619110}, <unfinished ...>
53213 <... clock_nanosleep resumed>NULL) = -1 EINVAL (Invalid argument)
When running Python on its own, the tv_sec value in the argument is a positive number, and much smaller. The Python 3.11 release notes mention that this version started using a different syscall for time.sleep(). I suspect the root cause of this failure is related to the use of libfaketime.