>>> py3-dumb-init: Building community/py3-dumb-init 1.2.5-r2 (using abuild 3.15.0-r0) started Sun, 12 Oct 2025 18:11:25 +0000 >>> py3-dumb-init: Validating /home/udu/aports/community/py3-dumb-init/APKBUILD... >>> py3-dumb-init: Analyzing dependencies... >>> py3-dumb-init: Installing for build: build-base py3-setuptools py3-gpep517 py3-wheel bash py3-pytest WARNING: opening /home/udu/packages//community: No such file or directory WARNING: opening /home/udu/packages//main: No such file or directory fetch http://dl-cdn.alpinelinux.org/alpine/v3.22/main/x86_64/APKINDEX.tar.gz fetch http://dl-cdn.alpinelinux.org/alpine/v3.22/community/x86_64/APKINDEX.tar.gz (1/21) Installing py3-setuptools-pyc (80.9.0-r0) (2/21) Installing py3-parsing (3.2.3-r0) (3/21) Installing py3-parsing-pyc (3.2.3-r0) (4/21) Installing py3-packaging-pyc (25.0-r0) (5/21) Installing py3-packaging (25.0-r0) (6/21) Installing py3-setuptools (80.9.0-r0) (7/21) Installing py3-installer (0.7.0-r2) (8/21) Installing py3-installer-pyc (0.7.0-r2) (9/21) Installing py3-gpep517 (19-r0) (10/21) Installing py3-gpep517-pyc (19-r0) (11/21) Installing py3-wheel (0.46.1-r0) (12/21) Installing py3-wheel-pyc (0.46.1-r0) (13/21) Installing py3-iniconfig (2.1.0-r0) (14/21) Installing py3-iniconfig-pyc (2.1.0-r0) (15/21) Installing py3-pluggy (1.5.0-r0) (16/21) Installing py3-pluggy-pyc (1.5.0-r0) (17/21) Installing py3-py (1.11.0-r4) (18/21) Installing py3-py-pyc (1.11.0-r4) (19/21) Installing py3-pytest (8.3.5-r0) (20/21) Installing py3-pytest-pyc (8.3.5-r0) (21/21) Installing .makedepends-py3-dumb-init (20251012.181126) Executing busybox-1.37.0-r19.trigger OK: 310 MiB in 110 packages >>> py3-dumb-init: Cleaning up srcdir >>> py3-dumb-init: Cleaning up pkgdir >>> py3-dumb-init: Cleaning up tmpdir >>> py3-dumb-init: Fetching py3-dumb-init-1.2.5.tar.gz::https://github.com/Yelp/dumb-init/archive/refs/tags/v1.2.5.tar.gz >>> py3-dumb-init: Fetching py3-dumb-init-1.2.5.tar.gz::https://github.com/Yelp/dumb-init/archive/refs/tags/v1.2.5.tar.gz >>> py3-dumb-init: Checking sha512sums... py3-dumb-init-1.2.5.tar.gz: OK >>> py3-dumb-init: Unpacking /var/cache/distfiles/py3-dumb-init-1.2.5.tar.gz... 2025-10-12 18:11:27,888 gpep517 INFO Building wheel via backend setuptools.build_meta:__legacy__ :16: DeprecationWarning: The 'wheel.bdist_wheel' module has been removed. Please update your setuptools to v70.1 or later. If you're explicitly importing 'wheel.bdist_wheel', please update your import to point to 'setuptools.command.bdist_wheel' instead. 2025-10-12 18:11:27,923 root INFO running bdist_wheel 2025-10-12 18:11:27,944 root INFO running build 2025-10-12 18:11:27,944 root INFO running build_py 2025-10-12 18:11:27,950 root INFO creating build/lib/testing 2025-10-12 18:11:27,950 root INFO copying testing/print_signals.py -> build/lib/testing 2025-10-12 18:11:27,950 root INFO copying testing/__init__.py -> build/lib/testing 2025-10-12 18:11:27,951 root INFO running build_cexe 2025-10-12 18:11:27,985 root INFO creating build/temp.linux-x86_64-cpython-312 2025-10-12 18:11:27,986 root INFO cc -c dumb-init.c -o build/temp.linux-x86_64-cpython-312/dumb-init.o 2025-10-12 18:11:28,037 root INFO creating build/scripts-3.12 2025-10-12 18:11:28,037 root INFO cc build/temp.linux-x86_64-cpython-312/dumb-init.o -o build/scripts-3.12/dumb-init -static 2025-10-12 18:11:28,079 root INFO installing to build/bdist.linux-x86_64/wheel 2025-10-12 18:11:28,079 root INFO running install 2025-10-12 18:11:28,088 root INFO running install_lib 2025-10-12 18:11:28,092 root INFO creating build/bdist.linux-x86_64/wheel/dumb_init-1.2.5.data/purelib 2025-10-12 18:11:28,092 root INFO creating build/bdist.linux-x86_64/wheel/dumb_init-1.2.5.data/purelib/testing 2025-10-12 18:11:28,092 root INFO copying build/lib/testing/print_signals.py -> build/bdist.linux-x86_64/wheel/dumb_init-1.2.5.data/purelib/testing 2025-10-12 18:11:28,093 root INFO copying build/lib/testing/__init__.py -> build/bdist.linux-x86_64/wheel/dumb_init-1.2.5.data/purelib/testing 2025-10-12 18:11:28,093 root INFO running install_egg_info 2025-10-12 18:11:28,097 root INFO running egg_info 2025-10-12 18:11:28,099 root INFO creating dumb_init.egg-info 2025-10-12 18:11:28,099 root INFO writing dumb_init.egg-info/PKG-INFO 2025-10-12 18:11:28,099 root INFO writing dependency_links to dumb_init.egg-info/dependency_links.txt 2025-10-12 18:11:28,100 root INFO writing top-level names to dumb_init.egg-info/top_level.txt 2025-10-12 18:11:28,100 root INFO writing manifest file 'dumb_init.egg-info/SOURCES.txt' 2025-10-12 18:11:28,103 root INFO reading manifest file 'dumb_init.egg-info/SOURCES.txt' 2025-10-12 18:11:28,103 root INFO reading manifest template 'MANIFEST.in' 2025-10-12 18:11:28,103 root INFO adding license file 'LICENSE' 2025-10-12 18:11:28,104 root INFO writing manifest file 'dumb_init.egg-info/SOURCES.txt' 2025-10-12 18:11:28,104 root INFO Copying dumb_init.egg-info to build/bdist.linux-x86_64/wheel/dumb_init-1.2.5.data/purelib/dumb_init-1.2.5-py3.12.egg-info 2025-10-12 18:11:28,105 root INFO running install_scripts 2025-10-12 18:11:28,105 root INFO running install_cexe 2025-10-12 18:11:28,105 root INFO creating build/bdist.linux-x86_64/wheel/dumb_init-1.2.5.data/scripts 2025-10-12 18:11:28,105 root INFO copying build/scripts-3.12/dumb-init -> build/bdist.linux-x86_64/wheel/dumb_init-1.2.5.data/scripts 2025-10-12 18:11:28,111 root INFO creating build/bdist.linux-x86_64/wheel/dumb_init-1.2.5.dist-info/WHEEL 2025-10-12 18:11:28,112 wheel INFO creating '/home/udu/aports/community/py3-dumb-init/src/dumb-init-1.2.5/.dist/.tmp-o_ejrr8h/dumb_init-1.2.5-py2.py3-none-linux_x86_64.whl' and adding 'build/bdist.linux-x86_64/wheel' to it 2025-10-12 18:11:28,113 wheel INFO adding 'dumb_init-1.2.5.data/purelib/testing/__init__.py' 2025-10-12 18:11:28,113 wheel INFO adding 'dumb_init-1.2.5.data/purelib/testing/print_signals.py' 2025-10-12 18:11:28,114 wheel INFO adding 'dumb_init-1.2.5.data/scripts/dumb-init' 2025-10-12 18:11:28,115 wheel INFO adding 'dumb_init-1.2.5.dist-info/licenses/LICENSE' 2025-10-12 18:11:28,115 wheel INFO adding 'dumb_init-1.2.5.dist-info/METADATA' 2025-10-12 18:11:28,115 wheel INFO adding 'dumb_init-1.2.5.dist-info/WHEEL' 2025-10-12 18:11:28,115 wheel INFO adding 'dumb_init-1.2.5.dist-info/top_level.txt' 2025-10-12 18:11:28,115 wheel INFO adding 'dumb_init-1.2.5.dist-info/RECORD' 2025-10-12 18:11:28,116 root INFO removing build/bdist.linux-x86_64/wheel 2025-10-12 18:11:28,117 gpep517 INFO The backend produced .dist/dumb_init-1.2.5-py2.py3-none-linux_x86_64.whl dumb_init-1.2.5-py2.py3-none-linux_x86_64.whl supports -static... yes ============================================================================================================================================ test session starts ============================================================================================================================================= platform linux -- Python 3.12.11, pytest-8.3.5, pluggy-1.5.0 -- /home/udu/aports/community/py3-dumb-init/src/dumb-init-1.2.5/.testenv/bin/python3 cachedir: .pytest_cache rootdir: /home/udu/aports/community/py3-dumb-init/src/dumb-init-1.2.5 configfile: pytest.ini collecting ... collected 182 items tests/child_processes_test.py::test_setsid_signals_entire_group[1] FAILED [ 0%] tests/child_processes_test.py::test_setsid_signals_entire_group[0] FAILED [ 1%] tests/child_processes_test.py::test_no_setsid_doesnt_signal_entire_group[1] FAILED [ 1%] tests/child_processes_test.py::test_no_setsid_doesnt_signal_entire_group[0] FAILED [ 2%] tests/child_processes_test.py::test_all_processes_receive_term_on_exit_if_setsid[1] PASSED [ 2%] tests/child_processes_test.py::test_all_processes_receive_term_on_exit_if_setsid[0] PASSED [ 3%] tests/child_processes_test.py::test_processes_dont_receive_term_on_exit_if_no_setsid[1] PASSED [ 3%] tests/child_processes_test.py::test_processes_dont_receive_term_on_exit_if_no_setsid[0] PASSED [ 4%] tests/child_processes_test.py::test_fails_nonzero_with_bad_exec[1-1-args0] PASSED [ 4%] tests/child_processes_test.py::test_fails_nonzero_with_bad_exec[1-1-args1] PASSED [ 5%] tests/child_processes_test.py::test_fails_nonzero_with_bad_exec[1-1-args2] PASSED [ 6%] tests/child_processes_test.py::test_fails_nonzero_with_bad_exec[1-1-args3] PASSED [ 6%] tests/child_processes_test.py::test_fails_nonzero_with_bad_exec[1-0-args0] PASSED [ 7%] tests/child_processes_test.py::test_fails_nonzero_with_bad_exec[1-0-args1] PASSED [ 7%] tests/child_processes_test.py::test_fails_nonzero_with_bad_exec[1-0-args2] PASSED [ 8%] tests/child_processes_test.py::test_fails_nonzero_with_bad_exec[1-0-args3] PASSED [ 8%] tests/child_processes_test.py::test_fails_nonzero_with_bad_exec[0-1-args0] PASSED [ 9%] tests/child_processes_test.py::test_fails_nonzero_with_bad_exec[0-1-args1] PASSED [ 9%] tests/child_processes_test.py::test_fails_nonzero_with_bad_exec[0-1-args2] PASSED [ 10%] tests/child_processes_test.py::test_fails_nonzero_with_bad_exec[0-1-args3] PASSED [ 10%] tests/child_processes_test.py::test_fails_nonzero_with_bad_exec[0-0-args0] PASSED [ 11%] tests/child_processes_test.py::test_fails_nonzero_with_bad_exec[0-0-args1] PASSED [ 12%] tests/child_processes_test.py::test_fails_nonzero_with_bad_exec[0-0-args2] PASSED [ 12%] tests/child_processes_test.py::test_fails_nonzero_with_bad_exec[0-0-args3] PASSED [ 13%] tests/cli_test.py::test_no_arguments_prints_usage[1-1] PASSED [ 13%] tests/cli_test.py::test_no_arguments_prints_usage[1-0] PASSED [ 14%] tests/cli_test.py::test_no_arguments_prints_usage[0-1] PASSED [ 14%] tests/cli_test.py::test_no_arguments_prints_usage[0-0] PASSED [ 15%] tests/cli_test.py::test_exits_invalid_with_invalid_args[1-1] PASSED [ 15%] tests/cli_test.py::test_exits_invalid_with_invalid_args[1-0] PASSED [ 16%] tests/cli_test.py::test_exits_invalid_with_invalid_args[0-1] PASSED [ 17%] tests/cli_test.py::test_exits_invalid_with_invalid_args[0-0] PASSED [ 17%] tests/cli_test.py::test_help_message[1-1--h] PASSED [ 18%] tests/cli_test.py::test_help_message[1-1---help] PASSED [ 18%] tests/cli_test.py::test_help_message[1-0--h] PASSED [ 19%] tests/cli_test.py::test_help_message[1-0---help] PASSED [ 19%] tests/cli_test.py::test_help_message[0-1--h] PASSED [ 20%] tests/cli_test.py::test_help_message[0-1---help] PASSED [ 20%] tests/cli_test.py::test_help_message[0-0--h] PASSED [ 21%] tests/cli_test.py::test_help_message[0-0---help] PASSED [ 21%] tests/cli_test.py::test_version_message[1-1--V] PASSED [ 22%] tests/cli_test.py::test_version_message[1-1---version] PASSED [ 23%] tests/cli_test.py::test_version_message[1-0--V] PASSED [ 23%] tests/cli_test.py::test_version_message[1-0---version] PASSED [ 24%] tests/cli_test.py::test_version_message[0-1--V] PASSED [ 24%] tests/cli_test.py::test_version_message[0-1---version] PASSED [ 25%] tests/cli_test.py::test_version_message[0-0--V] PASSED [ 25%] tests/cli_test.py::test_version_message[0-0---version] PASSED [ 26%] tests/cli_test.py::test_verbose[-v] PASSED [ 26%] tests/cli_test.py::test_verbose[--verbose] PASSED [ 27%] tests/cli_test.py::test_verbose_and_single_child[-c--v] PASSED [ 28%] tests/cli_test.py::test_verbose_and_single_child[-c---verbose] PASSED [ 28%] tests/cli_test.py::test_verbose_and_single_child[--single-child--v] PASSED [ 29%] tests/cli_test.py::test_verbose_and_single_child[--single-child---verbose] PASSED [ 29%] tests/cli_test.py::test_rewrite_errors[1-1-extra_args0] PASSED [ 30%] tests/cli_test.py::test_rewrite_errors[1-1-extra_args1] PASSED [ 30%] tests/cli_test.py::test_rewrite_errors[1-1-extra_args2] PASSED [ 31%] tests/cli_test.py::test_rewrite_errors[1-1-extra_args3] PASSED [ 31%] tests/cli_test.py::test_rewrite_errors[1-1-extra_args4] PASSED [ 32%] tests/cli_test.py::test_rewrite_errors[1-1-extra_args5] PASSED [ 32%] tests/cli_test.py::test_rewrite_errors[1-1-extra_args6] PASSED [ 33%] tests/cli_test.py::test_rewrite_errors[1-1-extra_args7] PASSED [ 34%] tests/cli_test.py::test_rewrite_errors[1-1-extra_args8] PASSED [ 34%] tests/cli_test.py::test_rewrite_errors[1-1-extra_args9] PASSED [ 35%] tests/cli_test.py::test_rewrite_errors[1-0-extra_args0] PASSED [ 35%] tests/cli_test.py::test_rewrite_errors[1-0-extra_args1] PASSED [ 36%] tests/cli_test.py::test_rewrite_errors[1-0-extra_args2] PASSED [ 36%] tests/cli_test.py::test_rewrite_errors[1-0-extra_args3] PASSED [ 37%] tests/cli_test.py::test_rewrite_errors[1-0-extra_args4] PASSED [ 37%] tests/cli_test.py::test_rewrite_errors[1-0-extra_args5] PASSED [ 38%] tests/cli_test.py::test_rewrite_errors[1-0-extra_args6] PASSED [ 39%] tests/cli_test.py::test_rewrite_errors[1-0-extra_args7] PASSED [ 39%] tests/cli_test.py::test_rewrite_errors[1-0-extra_args8] PASSED [ 40%] tests/cli_test.py::test_rewrite_errors[1-0-extra_args9] PASSED [ 40%] tests/cli_test.py::test_rewrite_errors[0-1-extra_args0] PASSED [ 41%] tests/cli_test.py::test_rewrite_errors[0-1-extra_args1] PASSED [ 41%] tests/cli_test.py::test_rewrite_errors[0-1-extra_args2] PASSED [ 42%] tests/cli_test.py::test_rewrite_errors[0-1-extra_args3] PASSED [ 42%] tests/cli_test.py::test_rewrite_errors[0-1-extra_args4] PASSED [ 43%] tests/cli_test.py::test_rewrite_errors[0-1-extra_args5] PASSED [ 43%] tests/cli_test.py::test_rewrite_errors[0-1-extra_args6] PASSED [ 44%] tests/cli_test.py::test_rewrite_errors[0-1-extra_args7] PASSED [ 45%] tests/cli_test.py::test_rewrite_errors[0-1-extra_args8] PASSED [ 45%] tests/cli_test.py::test_rewrite_errors[0-1-extra_args9] PASSED [ 46%] tests/cli_test.py::test_rewrite_errors[0-0-extra_args0] PASSED [ 46%] tests/cli_test.py::test_rewrite_errors[0-0-extra_args1] PASSED [ 47%] tests/cli_test.py::test_rewrite_errors[0-0-extra_args2] PASSED [ 47%] tests/cli_test.py::test_rewrite_errors[0-0-extra_args3] PASSED [ 48%] tests/cli_test.py::test_rewrite_errors[0-0-extra_args4] PASSED [ 48%] tests/cli_test.py::test_rewrite_errors[0-0-extra_args5] PASSED [ 49%] tests/cli_test.py::test_rewrite_errors[0-0-extra_args6] PASSED [ 50%] tests/cli_test.py::test_rewrite_errors[0-0-extra_args7] PASSED [ 50%] tests/cli_test.py::test_rewrite_errors[0-0-extra_args8] PASSED [ 51%] tests/cli_test.py::test_rewrite_errors[0-0-extra_args9] PASSED [ 51%] tests/cwd_test.py::test_working_directories[1-1] FAILED [ 52%] tests/cwd_test.py::test_working_directories[1-0] FAILED [ 52%] tests/cwd_test.py::test_working_directories[0-1] FAILED [ 53%] tests/cwd_test.py::test_working_directories[0-0] FAILED [ 53%] tests/exit_status_test.py::test_exit_status_regular_exit[1-1-0] PASSED [ 54%] tests/exit_status_test.py::test_exit_status_regular_exit[1-1-1] PASSED [ 54%] tests/exit_status_test.py::test_exit_status_regular_exit[1-1-2] PASSED [ 55%] tests/exit_status_test.py::test_exit_status_regular_exit[1-1-32] PASSED [ 56%] tests/exit_status_test.py::test_exit_status_regular_exit[1-1-64] PASSED [ 56%] tests/exit_status_test.py::test_exit_status_regular_exit[1-1-127] PASSED [ 57%] tests/exit_status_test.py::test_exit_status_regular_exit[1-1-254] PASSED [ 57%] tests/exit_status_test.py::test_exit_status_regular_exit[1-1-255] PASSED [ 58%] tests/exit_status_test.py::test_exit_status_regular_exit[1-0-0] PASSED [ 58%] tests/exit_status_test.py::test_exit_status_regular_exit[1-0-1] PASSED [ 59%] tests/exit_status_test.py::test_exit_status_regular_exit[1-0-2] PASSED [ 59%] tests/exit_status_test.py::test_exit_status_regular_exit[1-0-32] PASSED [ 60%] tests/exit_status_test.py::test_exit_status_regular_exit[1-0-64] PASSED [ 60%] tests/exit_status_test.py::test_exit_status_regular_exit[1-0-127] PASSED [ 61%] tests/exit_status_test.py::test_exit_status_regular_exit[1-0-254] PASSED [ 62%] tests/exit_status_test.py::test_exit_status_regular_exit[1-0-255] PASSED [ 62%] tests/exit_status_test.py::test_exit_status_regular_exit[0-1-0] PASSED [ 63%] tests/exit_status_test.py::test_exit_status_regular_exit[0-1-1] PASSED [ 63%] tests/exit_status_test.py::test_exit_status_regular_exit[0-1-2] PASSED [ 64%] tests/exit_status_test.py::test_exit_status_regular_exit[0-1-32] PASSED [ 64%] tests/exit_status_test.py::test_exit_status_regular_exit[0-1-64] PASSED [ 65%] tests/exit_status_test.py::test_exit_status_regular_exit[0-1-127] PASSED [ 65%] tests/exit_status_test.py::test_exit_status_regular_exit[0-1-254] PASSED [ 66%] tests/exit_status_test.py::test_exit_status_regular_exit[0-1-255] PASSED [ 67%] tests/exit_status_test.py::test_exit_status_regular_exit[0-0-0] PASSED [ 67%] tests/exit_status_test.py::test_exit_status_regular_exit[0-0-1] PASSED [ 68%] tests/exit_status_test.py::test_exit_status_regular_exit[0-0-2] PASSED [ 68%] tests/exit_status_test.py::test_exit_status_regular_exit[0-0-32] PASSED [ 69%] tests/exit_status_test.py::test_exit_status_regular_exit[0-0-64] PASSED [ 69%] tests/exit_status_test.py::test_exit_status_regular_exit[0-0-127] PASSED [ 70%] tests/exit_status_test.py::test_exit_status_regular_exit[0-0-254] PASSED [ 70%] tests/exit_status_test.py::test_exit_status_regular_exit[0-0-255] PASSED [ 71%] tests/exit_status_test.py::test_exit_status_terminated_by_signal[1-1-15] PASSED [ 71%] tests/exit_status_test.py::test_exit_status_terminated_by_signal[1-1-1] PASSED [ 72%] tests/exit_status_test.py::test_exit_status_terminated_by_signal[1-1-3] PASSED [ 73%] tests/exit_status_test.py::test_exit_status_terminated_by_signal[1-1-9] PASSED [ 73%] tests/exit_status_test.py::test_exit_status_terminated_by_signal[1-0-15] PASSED [ 74%] tests/exit_status_test.py::test_exit_status_terminated_by_signal[1-0-1] PASSED [ 74%] tests/exit_status_test.py::test_exit_status_terminated_by_signal[1-0-3] PASSED [ 75%] tests/exit_status_test.py::test_exit_status_terminated_by_signal[1-0-9] PASSED [ 75%] tests/exit_status_test.py::test_exit_status_terminated_by_signal[0-1-15] PASSED [ 76%] tests/exit_status_test.py::test_exit_status_terminated_by_signal[0-1-1] PASSED [ 76%] tests/exit_status_test.py::test_exit_status_terminated_by_signal[0-1-3] PASSED [ 77%] tests/exit_status_test.py::test_exit_status_terminated_by_signal[0-1-9] PASSED [ 78%] tests/exit_status_test.py::test_exit_status_terminated_by_signal[0-0-15] PASSED [ 78%] tests/exit_status_test.py::test_exit_status_terminated_by_signal[0-0-1] PASSED [ 79%] tests/exit_status_test.py::test_exit_status_terminated_by_signal[0-0-3] PASSED [ 79%] tests/exit_status_test.py::test_exit_status_terminated_by_signal[0-0-9] PASSED [ 80%] tests/proxies_signals_test.py::test_proxies_signals[1-1] PASSED [ 80%] tests/proxies_signals_test.py::test_proxies_signals[1-0] PASSED [ 81%] tests/proxies_signals_test.py::test_proxies_signals[0-1] PASSED [ 81%] tests/proxies_signals_test.py::test_proxies_signals[0-0] PASSED [ 82%] tests/proxies_signals_test.py::test_proxies_signals_with_rewrite[1-1-rewrite_map0-sequence0-expected0] PASSED [ 82%] tests/proxies_signals_test.py::test_proxies_signals_with_rewrite[1-1-rewrite_map1-sequence1-expected1] PASSED [ 83%] tests/proxies_signals_test.py::test_proxies_signals_with_rewrite[1-1-rewrite_map2-sequence2-expected2] PASSED [ 84%] tests/proxies_signals_test.py::test_proxies_signals_with_rewrite[1-1-rewrite_map3-sequence3-expected3] PASSED [ 84%] tests/proxies_signals_test.py::test_proxies_signals_with_rewrite[1-0-rewrite_map0-sequence0-expected0] PASSED [ 85%] tests/proxies_signals_test.py::test_proxies_signals_with_rewrite[1-0-rewrite_map1-sequence1-expected1] PASSED [ 85%] tests/proxies_signals_test.py::test_proxies_signals_with_rewrite[1-0-rewrite_map2-sequence2-expected2] PASSED [ 86%] tests/proxies_signals_test.py::test_proxies_signals_with_rewrite[1-0-rewrite_map3-sequence3-expected3] PASSED [ 86%] tests/proxies_signals_test.py::test_proxies_signals_with_rewrite[0-1-rewrite_map0-sequence0-expected0] PASSED [ 87%] tests/proxies_signals_test.py::test_proxies_signals_with_rewrite[0-1-rewrite_map1-sequence1-expected1] PASSED [ 87%] tests/proxies_signals_test.py::test_proxies_signals_with_rewrite[0-1-rewrite_map2-sequence2-expected2] PASSED [ 88%] tests/proxies_signals_test.py::test_proxies_signals_with_rewrite[0-1-rewrite_map3-sequence3-expected3] PASSED [ 89%] tests/proxies_signals_test.py::test_proxies_signals_with_rewrite[0-0-rewrite_map0-sequence0-expected0] PASSED [ 89%] tests/proxies_signals_test.py::test_proxies_signals_with_rewrite[0-0-rewrite_map1-sequence1-expected1] PASSED [ 90%] tests/proxies_signals_test.py::test_proxies_signals_with_rewrite[0-0-rewrite_map2-sequence2-expected2] PASSED [ 90%] tests/proxies_signals_test.py::test_proxies_signals_with_rewrite[0-0-rewrite_map3-sequence3-expected3] PASSED [ 91%] tests/proxies_signals_test.py::test_default_rewrites_can_be_overriden_with_setsid_enabled[1] FAILED [ 91%] tests/proxies_signals_test.py::test_default_rewrites_can_be_overriden_with_setsid_enabled[0] FAILED [ 92%] tests/proxies_signals_test.py::test_ignored_signals_are_not_proxied[1-1] PASSED [ 92%] tests/proxies_signals_test.py::test_ignored_signals_are_not_proxied[1-0] PASSED [ 93%] tests/proxies_signals_test.py::test_ignored_signals_are_not_proxied[0-1] PASSED [ 93%] tests/proxies_signals_test.py::test_ignored_signals_are_not_proxied[0-0] PASSED [ 94%] tests/shell_background_test.py::test_shell_background_support_setsid[1] FAILED [ 95%] tests/shell_background_test.py::test_shell_background_support_setsid[0] FAILED [ 95%] tests/shell_background_test.py::test_shell_background_support_without_setsid[1] FAILED [ 96%] tests/shell_background_test.py::test_shell_background_support_without_setsid[0] FAILED [ 96%] tests/tty_test.py::test_tty FAILED [ 97%] tests/tty_test.py::test_child_gets_controlling_tty_if_we_had_one[1-1] FAILED [ 97%] tests/tty_test.py::test_child_gets_controlling_tty_if_we_had_one[1-0] FAILED [ 98%] tests/tty_test.py::test_child_gets_controlling_tty_if_we_had_one[0-1] FAILED [ 98%] tests/tty_test.py::test_child_gets_controlling_tty_if_we_had_one[0-0] FAILED [ 99%] tests/tty_test.py::test_sighup_sigcont_ignored_if_was_session_leader FAILED [100%] ================================================================================================================================================== FAILURES ================================================================================================================================================== ____________________________________________________________________________________________________________________________________ test_setsid_signals_entire_group[1] _____________________________________________________________________________________________________________________________________ @pytest.mark.usefixtures('both_debug_modes', 'setsid_enabled') def test_setsid_signals_entire_group(): """When dumb-init is running in setsid mode, it should signal the entire process group rooted at it. """ > pids = spawn_and_kill_pipeline() tests/child_processes_test.py:43: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/child_processes_test.py:26: in spawn_and_kill_pipeline sleep_until(assert_living_pids) testing/__init__.py:95: in sleep_until fn() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def assert_living_pids(): > assert len(living_pids(pid_tree(os.getpid()))) == 6 E assert 0 == 6 E + where 0 = len(set()) E + where set() = living_pids(set()) E + where set() = pid_tree(4168509) E + where 4168509 = () E + where = os.getpid tests/child_processes_test.py:24: AssertionError -------------------------------------------------------------------------------------------------------------------------------------------- Captured stderr call -------------------------------------------------------------------------------------------------------------------------------------------- [dumb-init] Running in debug mode. [dumb-init] Unable to detach from controlling tty (errno=25 Not a tty). [dumb-init] Child spawned with PID 4168511. [dumb-init] Unable to attach to controlling tty (errno=25 Not a tty). [dumb-init] setsid complete. ____________________________________________________________________________________________________________________________________ test_setsid_signals_entire_group[0] _____________________________________________________________________________________________________________________________________ @pytest.mark.usefixtures('both_debug_modes', 'setsid_enabled') def test_setsid_signals_entire_group(): """When dumb-init is running in setsid mode, it should signal the entire process group rooted at it. """ > pids = spawn_and_kill_pipeline() tests/child_processes_test.py:43: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/child_processes_test.py:26: in spawn_and_kill_pipeline sleep_until(assert_living_pids) testing/__init__.py:95: in sleep_until fn() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def assert_living_pids(): > assert len(living_pids(pid_tree(os.getpid()))) == 6 E assert 0 == 6 E + where 0 = len(set()) E + where set() = living_pids(set()) E + where set() = pid_tree(4168509) E + where 4168509 = () E + where = os.getpid tests/child_processes_test.py:24: AssertionError ________________________________________________________________________________________________________________________________ test_no_setsid_doesnt_signal_entire_group[1] ________________________________________________________________________________________________________________________________ @pytest.mark.usefixtures('both_debug_modes', 'setsid_disabled') def test_no_setsid_doesnt_signal_entire_group(): """When dumb-init is not running in setsid mode, it should only signal its immediate child. """ > pids = spawn_and_kill_pipeline() tests/child_processes_test.py:56: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/child_processes_test.py:26: in spawn_and_kill_pipeline sleep_until(assert_living_pids) testing/__init__.py:95: in sleep_until fn() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def assert_living_pids(): > assert len(living_pids(pid_tree(os.getpid()))) == 6 E assert 0 == 6 E + where 0 = len(set()) E + where set() = living_pids(set()) E + where set() = pid_tree(4168509) E + where 4168509 = () E + where = os.getpid tests/child_processes_test.py:24: AssertionError -------------------------------------------------------------------------------------------------------------------------------------------- Captured stderr call -------------------------------------------------------------------------------------------------------------------------------------------- [dumb-init] Running in debug mode. [dumb-init] Not running in setsid mode. [dumb-init] Child spawned with PID 4168521. ________________________________________________________________________________________________________________________________ test_no_setsid_doesnt_signal_entire_group[0] ________________________________________________________________________________________________________________________________ @pytest.mark.usefixtures('both_debug_modes', 'setsid_disabled') def test_no_setsid_doesnt_signal_entire_group(): """When dumb-init is not running in setsid mode, it should only signal its immediate child. """ > pids = spawn_and_kill_pipeline() tests/child_processes_test.py:56: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/child_processes_test.py:26: in spawn_and_kill_pipeline sleep_until(assert_living_pids) testing/__init__.py:95: in sleep_until fn() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def assert_living_pids(): > assert len(living_pids(pid_tree(os.getpid()))) == 6 E assert 0 == 6 E + where 0 = len(set()) E + where set() = living_pids(set()) E + where set() = pid_tree(4168509) E + where 4168509 = () E + where = os.getpid tests/child_processes_test.py:24: AssertionError _______________________________________________________________________________________________________________________________________ test_working_directories[1-1] ________________________________________________________________________________________________________________________________________ @pytest.mark.usefixtures('both_debug_modes', 'both_setsid_modes') def test_working_directories(): """The child process must start in the working directory in which dumb-init was invoked, but dumb-init itself should not keep a reference to that.""" # We need absolute path to dumb-init since we pass cwd=/tmp to get # predictable output - so we can't rely on dumb-init being found # in the "." directory. dumb_init = os.path.realpath(shutil.which('dumb-init')) proc = run((dumb_init, 'sh', '-c', 'readlink /proc/$PPID/cwd && readlink /proc/$$/cwd'), cwd="/tmp", stdout=PIPE, stderr=PIPE) > assert proc.returncode == 0 E AssertionError: assert 1 == 0 E + where 1 = CompletedProcess(args=('/home/udu/aports/community/py3-dumb-init/src/dumb-init-1.2.5/.testenv/bin/dumb-init', 'sh', '-c', 'readlink /proc/$PPID/cwd && readlink /proc/$$/cwd'), returncode=1, stdout=b'', stderr=b'[dumb-init] Running in debug mode.\n[dumb-init] Unable to detach from controlling tty (errno=25 Not a tty).\n[dumb-init] Child spawned with PID 4168673.\n[dumb-init] Unable to attach to controlling tty (errno=25 Not a tty).\n[dumb-init] setsid complete.\n[dumb-init] Received signal 17.\n[dumb-init] A child with PID 4168673 exited with exit status 1.\n[dumb-init] Forwarded signal 15 to children.\n[dumb-init] Child exited with status 1. Goodbye.\n').returncode tests/cwd_test.py:21: AssertionError _______________________________________________________________________________________________________________________________________ test_working_directories[1-0] ________________________________________________________________________________________________________________________________________ @pytest.mark.usefixtures('both_debug_modes', 'both_setsid_modes') def test_working_directories(): """The child process must start in the working directory in which dumb-init was invoked, but dumb-init itself should not keep a reference to that.""" # We need absolute path to dumb-init since we pass cwd=/tmp to get # predictable output - so we can't rely on dumb-init being found # in the "." directory. dumb_init = os.path.realpath(shutil.which('dumb-init')) proc = run((dumb_init, 'sh', '-c', 'readlink /proc/$PPID/cwd && readlink /proc/$$/cwd'), cwd="/tmp", stdout=PIPE, stderr=PIPE) > assert proc.returncode == 0 E AssertionError: assert 1 == 0 E + where 1 = CompletedProcess(args=('/home/udu/aports/community/py3-dumb-init/src/dumb-init-1.2.5/.testenv/bin/dumb-init', 'sh', '-c', 'readlink /proc/$PPID/cwd && readlink /proc/$$/cwd'), returncode=1, stdout=b'', stderr=b'[dumb-init] Running in debug mode.\n[dumb-init] Not running in setsid mode.\n[dumb-init] Child spawned with PID 4168676.\n[dumb-init] Received signal 17.\n[dumb-init] A child with PID 4168676 exited with exit status 1.\n[dumb-init] Forwarded signal 15 to children.\n[dumb-init] Child exited with status 1. Goodbye.\n').returncode tests/cwd_test.py:21: AssertionError _______________________________________________________________________________________________________________________________________ test_working_directories[0-1] ________________________________________________________________________________________________________________________________________ @pytest.mark.usefixtures('both_debug_modes', 'both_setsid_modes') def test_working_directories(): """The child process must start in the working directory in which dumb-init was invoked, but dumb-init itself should not keep a reference to that.""" # We need absolute path to dumb-init since we pass cwd=/tmp to get # predictable output - so we can't rely on dumb-init being found # in the "." directory. dumb_init = os.path.realpath(shutil.which('dumb-init')) proc = run((dumb_init, 'sh', '-c', 'readlink /proc/$PPID/cwd && readlink /proc/$$/cwd'), cwd="/tmp", stdout=PIPE, stderr=PIPE) > assert proc.returncode == 0 E AssertionError: assert 1 == 0 E + where 1 = CompletedProcess(args=('/home/udu/aports/community/py3-dumb-init/src/dumb-init-1.2.5/.testenv/bin/dumb-init', 'sh', '-c', 'readlink /proc/$PPID/cwd && readlink /proc/$$/cwd'), returncode=1, stdout=b'', stderr=b'').returncode tests/cwd_test.py:21: AssertionError _______________________________________________________________________________________________________________________________________ test_working_directories[0-0] ________________________________________________________________________________________________________________________________________ @pytest.mark.usefixtures('both_debug_modes', 'both_setsid_modes') def test_working_directories(): """The child process must start in the working directory in which dumb-init was invoked, but dumb-init itself should not keep a reference to that.""" # We need absolute path to dumb-init since we pass cwd=/tmp to get # predictable output - so we can't rely on dumb-init being found # in the "." directory. dumb_init = os.path.realpath(shutil.which('dumb-init')) proc = run((dumb_init, 'sh', '-c', 'readlink /proc/$PPID/cwd && readlink /proc/$$/cwd'), cwd="/tmp", stdout=PIPE, stderr=PIPE) > assert proc.returncode == 0 E AssertionError: assert 1 == 0 E + where 1 = CompletedProcess(args=('/home/udu/aports/community/py3-dumb-init/src/dumb-init-1.2.5/.testenv/bin/dumb-init', 'sh', '-c', 'readlink /proc/$PPID/cwd && readlink /proc/$$/cwd'), returncode=1, stdout=b'', stderr=b'').returncode tests/cwd_test.py:21: AssertionError _______________________________________________________________________________________________________________________ test_default_rewrites_can_be_overriden_with_setsid_enabled[1] ________________________________________________________________________________________________________________________ self = , func = , args = ('/proc/4168822/status', 'r'), kwargs = {}, __tracebackhide__ = False, cls = , value = FileNotFoundError(2, 'No such file or directory'), tb = , errno = 2 def checked_call(self, func, *args, **kwargs): """ call a function and raise an errno-exception if applicable. """ __tracebackhide__ = True try: > return func(*args, **kwargs) E FileNotFoundError: [Errno 2] No such file or directory: '/proc/4168822/status' /usr/lib/python3.12/site-packages/py/_error.py:66: FileNotFoundError During handling of the above exception, another exception occurred: @pytest.mark.usefixtures('both_debug_modes', 'setsid_enabled') def test_default_rewrites_can_be_overriden_with_setsid_enabled(): """In setsid mode, dumb-init should allow overwriting the default rewrites (but still suspend itself). """ rewrite_map = { signal.SIGTTIN: signal.SIGTERM, signal.SIGTTOU: signal.SIGINT, signal.SIGTSTP: signal.SIGHUP, } with print_signals(_rewrite_map_to_args(rewrite_map)) as (proc, _): for send, expect_receive in rewrite_map.items(): > assert process_state(proc.pid) in ['running', 'sleeping'] tests/proxies_signals_test.py:80: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ testing/__init__.py:84: in process_state status = LocalPath('/proc').join(str(pid), 'status').read() /usr/lib/python3.12/site-packages/py/_path/common.py:176: in read with self.open(mode) as f: /usr/lib/python3.12/site-packages/py/_path/local.py:369: in open return py.error.checked_call(open, self.strpath, mode) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , func = , args = ('/proc/4168822/status', 'r'), kwargs = {}, __tracebackhide__ = False, cls = , value = FileNotFoundError(2, 'No such file or directory'), tb = , errno = 2 def checked_call(self, func, *args, **kwargs): """ call a function and raise an errno-exception if applicable. """ __tracebackhide__ = True try: return func(*args, **kwargs) except self.Error: raise except (OSError, EnvironmentError): cls, value, tb = sys.exc_info() if not hasattr(value, 'errno'): raise __tracebackhide__ = False errno = value.errno try: if not isinstance(value, WindowsError): raise NameError except NameError: # we are not on Windows, or we got a proper OSError cls = self._geterrnoclass(errno) else: try: cls = self._geterrnoclass(_winerrnomap[errno]) except KeyError: raise value > raise cls("%s%r" % (func.__name__, args)) E py.error.ENOENT: [No such file or directory]: open('/proc/4168822/status', 'r') /usr/lib/python3.12/site-packages/py/_error.py:86: ENOENT -------------------------------------------------------------------------------------------------------------------------------------------- Captured stderr call -------------------------------------------------------------------------------------------------------------------------------------------- [dumb-init] Running in debug mode. [dumb-init] Unable to detach from controlling tty (errno=25 Not a tty). [dumb-init] Child spawned with PID 4168823. [dumb-init] Unable to attach to controlling tty (errno=25 Not a tty). [dumb-init] setsid complete. _______________________________________________________________________________________________________________________ test_default_rewrites_can_be_overriden_with_setsid_enabled[0] ________________________________________________________________________________________________________________________ self = , func = , args = ('/proc/4168824/status', 'r'), kwargs = {}, __tracebackhide__ = False, cls = , value = FileNotFoundError(2, 'No such file or directory'), tb = , errno = 2 def checked_call(self, func, *args, **kwargs): """ call a function and raise an errno-exception if applicable. """ __tracebackhide__ = True try: > return func(*args, **kwargs) E FileNotFoundError: [Errno 2] No such file or directory: '/proc/4168824/status' /usr/lib/python3.12/site-packages/py/_error.py:66: FileNotFoundError During handling of the above exception, another exception occurred: @pytest.mark.usefixtures('both_debug_modes', 'setsid_enabled') def test_default_rewrites_can_be_overriden_with_setsid_enabled(): """In setsid mode, dumb-init should allow overwriting the default rewrites (but still suspend itself). """ rewrite_map = { signal.SIGTTIN: signal.SIGTERM, signal.SIGTTOU: signal.SIGINT, signal.SIGTSTP: signal.SIGHUP, } with print_signals(_rewrite_map_to_args(rewrite_map)) as (proc, _): for send, expect_receive in rewrite_map.items(): > assert process_state(proc.pid) in ['running', 'sleeping'] tests/proxies_signals_test.py:80: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ testing/__init__.py:84: in process_state status = LocalPath('/proc').join(str(pid), 'status').read() /usr/lib/python3.12/site-packages/py/_path/common.py:176: in read with self.open(mode) as f: /usr/lib/python3.12/site-packages/py/_path/local.py:369: in open return py.error.checked_call(open, self.strpath, mode) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , func = , args = ('/proc/4168824/status', 'r'), kwargs = {}, __tracebackhide__ = False, cls = , value = FileNotFoundError(2, 'No such file or directory'), tb = , errno = 2 def checked_call(self, func, *args, **kwargs): """ call a function and raise an errno-exception if applicable. """ __tracebackhide__ = True try: return func(*args, **kwargs) except self.Error: raise except (OSError, EnvironmentError): cls, value, tb = sys.exc_info() if not hasattr(value, 'errno'): raise __tracebackhide__ = False errno = value.errno try: if not isinstance(value, WindowsError): raise NameError except NameError: # we are not on Windows, or we got a proper OSError cls = self._geterrnoclass(errno) else: try: cls = self._geterrnoclass(_winerrnomap[errno]) except KeyError: raise value > raise cls("%s%r" % (func.__name__, args)) E py.error.ENOENT: [No such file or directory]: open('/proc/4168824/status', 'r') /usr/lib/python3.12/site-packages/py/_error.py:86: ENOENT __________________________________________________________________________________________________________________________________ test_shell_background_support_setsid[1] ___________________________________________________________________________________________________________________________________ self = , func = , args = ('/proc/4168835/status', 'r'), kwargs = {}, __tracebackhide__ = False, cls = , value = FileNotFoundError(2, 'No such file or directory'), tb = , errno = 2 def checked_call(self, func, *args, **kwargs): """ call a function and raise an errno-exception if applicable. """ __tracebackhide__ = True try: > return func(*args, **kwargs) E FileNotFoundError: [Errno 2] No such file or directory: '/proc/4168835/status' /usr/lib/python3.12/site-packages/py/_error.py:66: FileNotFoundError During handling of the above exception, another exception occurred: @pytest.mark.usefixtures('both_debug_modes', 'setsid_enabled') def test_shell_background_support_setsid(): """In setsid mode, dumb-init should suspend itself and its children when it receives SIGTSTP, SIGTTOU, or SIGTTIN. """ with print_signals() as (proc, pid): for signum in SUSPEND_SIGNALS: # both dumb-init and print_signals should be running or sleeping > assert process_state(pid) in ['running', 'sleeping'] tests/shell_background_test.py:20: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ testing/__init__.py:84: in process_state status = LocalPath('/proc').join(str(pid), 'status').read() /usr/lib/python3.12/site-packages/py/_path/common.py:176: in read with self.open(mode) as f: /usr/lib/python3.12/site-packages/py/_path/local.py:369: in open return py.error.checked_call(open, self.strpath, mode) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , func = , args = ('/proc/4168835/status', 'r'), kwargs = {}, __tracebackhide__ = False, cls = , value = FileNotFoundError(2, 'No such file or directory'), tb = , errno = 2 def checked_call(self, func, *args, **kwargs): """ call a function and raise an errno-exception if applicable. """ __tracebackhide__ = True try: return func(*args, **kwargs) except self.Error: raise except (OSError, EnvironmentError): cls, value, tb = sys.exc_info() if not hasattr(value, 'errno'): raise __tracebackhide__ = False errno = value.errno try: if not isinstance(value, WindowsError): raise NameError except NameError: # we are not on Windows, or we got a proper OSError cls = self._geterrnoclass(errno) else: try: cls = self._geterrnoclass(_winerrnomap[errno]) except KeyError: raise value > raise cls("%s%r" % (func.__name__, args)) E py.error.ENOENT: [No such file or directory]: open('/proc/4168835/status', 'r') /usr/lib/python3.12/site-packages/py/_error.py:86: ENOENT -------------------------------------------------------------------------------------------------------------------------------------------- Captured stderr call -------------------------------------------------------------------------------------------------------------------------------------------- [dumb-init] Running in debug mode. [dumb-init] Unable to detach from controlling tty (errno=25 Not a tty). [dumb-init] Child spawned with PID 4168835. [dumb-init] Unable to attach to controlling tty (errno=25 Not a tty). [dumb-init] setsid complete. __________________________________________________________________________________________________________________________________ test_shell_background_support_setsid[0] ___________________________________________________________________________________________________________________________________ self = , func = , args = ('/proc/4168837/status', 'r'), kwargs = {}, __tracebackhide__ = False, cls = , value = FileNotFoundError(2, 'No such file or directory'), tb = , errno = 2 def checked_call(self, func, *args, **kwargs): """ call a function and raise an errno-exception if applicable. """ __tracebackhide__ = True try: > return func(*args, **kwargs) E FileNotFoundError: [Errno 2] No such file or directory: '/proc/4168837/status' /usr/lib/python3.12/site-packages/py/_error.py:66: FileNotFoundError During handling of the above exception, another exception occurred: @pytest.mark.usefixtures('both_debug_modes', 'setsid_enabled') def test_shell_background_support_setsid(): """In setsid mode, dumb-init should suspend itself and its children when it receives SIGTSTP, SIGTTOU, or SIGTTIN. """ with print_signals() as (proc, pid): for signum in SUSPEND_SIGNALS: # both dumb-init and print_signals should be running or sleeping > assert process_state(pid) in ['running', 'sleeping'] tests/shell_background_test.py:20: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ testing/__init__.py:84: in process_state status = LocalPath('/proc').join(str(pid), 'status').read() /usr/lib/python3.12/site-packages/py/_path/common.py:176: in read with self.open(mode) as f: /usr/lib/python3.12/site-packages/py/_path/local.py:369: in open return py.error.checked_call(open, self.strpath, mode) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , func = , args = ('/proc/4168837/status', 'r'), kwargs = {}, __tracebackhide__ = False, cls = , value = FileNotFoundError(2, 'No such file or directory'), tb = , errno = 2 def checked_call(self, func, *args, **kwargs): """ call a function and raise an errno-exception if applicable. """ __tracebackhide__ = True try: return func(*args, **kwargs) except self.Error: raise except (OSError, EnvironmentError): cls, value, tb = sys.exc_info() if not hasattr(value, 'errno'): raise __tracebackhide__ = False errno = value.errno try: if not isinstance(value, WindowsError): raise NameError except NameError: # we are not on Windows, or we got a proper OSError cls = self._geterrnoclass(errno) else: try: cls = self._geterrnoclass(_winerrnomap[errno]) except KeyError: raise value > raise cls("%s%r" % (func.__name__, args)) E py.error.ENOENT: [No such file or directory]: open('/proc/4168837/status', 'r') /usr/lib/python3.12/site-packages/py/_error.py:86: ENOENT ______________________________________________________________________________________________________________________________ test_shell_background_support_without_setsid[1] _______________________________________________________________________________________________________________________________ self = , func = , args = ('/proc/4168838/status', 'r'), kwargs = {}, __tracebackhide__ = False, cls = , value = FileNotFoundError(2, 'No such file or directory'), tb = , errno = 2 def checked_call(self, func, *args, **kwargs): """ call a function and raise an errno-exception if applicable. """ __tracebackhide__ = True try: > return func(*args, **kwargs) E FileNotFoundError: [Errno 2] No such file or directory: '/proc/4168838/status' /usr/lib/python3.12/site-packages/py/_error.py:66: FileNotFoundError During handling of the above exception, another exception occurred: @pytest.mark.usefixtures('both_debug_modes', 'setsid_disabled') def test_shell_background_support_without_setsid(): """In non-setsid mode, dumb-init should forward the signals SIGTSTP, SIGTTOU, and SIGTTIN, and then suspend itself. """ with print_signals() as (proc, _): for signum in SUSPEND_SIGNALS: > assert process_state(proc.pid) in ['running', 'sleeping'] tests/shell_background_test.py:47: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ testing/__init__.py:84: in process_state status = LocalPath('/proc').join(str(pid), 'status').read() /usr/lib/python3.12/site-packages/py/_path/common.py:176: in read with self.open(mode) as f: /usr/lib/python3.12/site-packages/py/_path/local.py:369: in open return py.error.checked_call(open, self.strpath, mode) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , func = , args = ('/proc/4168838/status', 'r'), kwargs = {}, __tracebackhide__ = False, cls = , value = FileNotFoundError(2, 'No such file or directory'), tb = , errno = 2 def checked_call(self, func, *args, **kwargs): """ call a function and raise an errno-exception if applicable. """ __tracebackhide__ = True try: return func(*args, **kwargs) except self.Error: raise except (OSError, EnvironmentError): cls, value, tb = sys.exc_info() if not hasattr(value, 'errno'): raise __tracebackhide__ = False errno = value.errno try: if not isinstance(value, WindowsError): raise NameError except NameError: # we are not on Windows, or we got a proper OSError cls = self._geterrnoclass(errno) else: try: cls = self._geterrnoclass(_winerrnomap[errno]) except KeyError: raise value > raise cls("%s%r" % (func.__name__, args)) E py.error.ENOENT: [No such file or directory]: open('/proc/4168838/status', 'r') /usr/lib/python3.12/site-packages/py/_error.py:86: ENOENT -------------------------------------------------------------------------------------------------------------------------------------------- Captured stderr call -------------------------------------------------------------------------------------------------------------------------------------------- [dumb-init] Running in debug mode. [dumb-init] Not running in setsid mode. [dumb-init] Child spawned with PID 4168839. ______________________________________________________________________________________________________________________________ test_shell_background_support_without_setsid[0] _______________________________________________________________________________________________________________________________ self = , func = , args = ('/proc/4168840/status', 'r'), kwargs = {}, __tracebackhide__ = False, cls = , value = FileNotFoundError(2, 'No such file or directory'), tb = , errno = 2 def checked_call(self, func, *args, **kwargs): """ call a function and raise an errno-exception if applicable. """ __tracebackhide__ = True try: > return func(*args, **kwargs) E FileNotFoundError: [Errno 2] No such file or directory: '/proc/4168840/status' /usr/lib/python3.12/site-packages/py/_error.py:66: FileNotFoundError During handling of the above exception, another exception occurred: @pytest.mark.usefixtures('both_debug_modes', 'setsid_disabled') def test_shell_background_support_without_setsid(): """In non-setsid mode, dumb-init should forward the signals SIGTSTP, SIGTTOU, and SIGTTIN, and then suspend itself. """ with print_signals() as (proc, _): for signum in SUSPEND_SIGNALS: > assert process_state(proc.pid) in ['running', 'sleeping'] tests/shell_background_test.py:47: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ testing/__init__.py:84: in process_state status = LocalPath('/proc').join(str(pid), 'status').read() /usr/lib/python3.12/site-packages/py/_path/common.py:176: in read with self.open(mode) as f: /usr/lib/python3.12/site-packages/py/_path/local.py:369: in open return py.error.checked_call(open, self.strpath, mode) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , func = , args = ('/proc/4168840/status', 'r'), kwargs = {}, __tracebackhide__ = False, cls = , value = FileNotFoundError(2, 'No such file or directory'), tb = , errno = 2 def checked_call(self, func, *args, **kwargs): """ call a function and raise an errno-exception if applicable. """ __tracebackhide__ = True try: return func(*args, **kwargs) except self.Error: raise except (OSError, EnvironmentError): cls, value, tb = sys.exc_info() if not hasattr(value, 'errno'): raise __tracebackhide__ = False errno = value.errno try: if not isinstance(value, WindowsError): raise NameError except NameError: # we are not on Windows, or we got a proper OSError cls = self._geterrnoclass(errno) else: try: cls = self._geterrnoclass(_winerrnomap[errno]) except KeyError: raise value > raise cls("%s%r" % (func.__name__, args)) E py.error.ENOENT: [No such file or directory]: open('/proc/4168840/status', 'r') /usr/lib/python3.12/site-packages/py/_error.py:86: ENOENT __________________________________________________________________________________________________________________________________________________ test_tty __________________________________________________________________________________________________________________________________________________ @pytest.mark.usefixtures('debug_disabled') def test_tty(): """Ensure processes under dumb-init can write successfully, given a tty.""" > pid, fd = pty.fork() tests/tty_test.py:45: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/pty.py:107: in fork master_fd, slave_fd = openpty() /usr/lib/python3.12/pty.py:34: in openpty master_fd, slave_name = _open_terminal() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def _open_terminal(): """Open pty master and return (master_fd, tty_name).""" for x in 'pqrstuvwxyzPQRST': for y in '0123456789abcdef': pty_name = '/dev/pty' + x + y try: fd = os.open(pty_name, os.O_RDWR) except OSError: continue return (fd, '/dev/tty' + x + y) > raise OSError('out of pty devices') E OSError: out of pty devices /usr/lib/python3.12/pty.py:67: OSError _____________________________________________________________________________________________________________________________ test_child_gets_controlling_tty_if_we_had_one[1-1] _____________________________________________________________________________________________________________________________ @pytest.mark.usefixtures('both_debug_modes') @pytest.mark.usefixtures('both_setsid_modes') def test_child_gets_controlling_tty_if_we_had_one(): """If dumb-init has a controlling TTY, it should give it to the child. To test this, we make a new TTY then exec "dumb-init bash" and ensure that the shell has working job control. """ > pid, sfd = pty.fork() tests/tty_test.py:67: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/pty.py:107: in fork master_fd, slave_fd = openpty() /usr/lib/python3.12/pty.py:34: in openpty master_fd, slave_name = _open_terminal() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def _open_terminal(): """Open pty master and return (master_fd, tty_name).""" for x in 'pqrstuvwxyzPQRST': for y in '0123456789abcdef': pty_name = '/dev/pty' + x + y try: fd = os.open(pty_name, os.O_RDWR) except OSError: continue return (fd, '/dev/tty' + x + y) > raise OSError('out of pty devices') E OSError: out of pty devices /usr/lib/python3.12/pty.py:67: OSError _____________________________________________________________________________________________________________________________ test_child_gets_controlling_tty_if_we_had_one[1-0] _____________________________________________________________________________________________________________________________ @pytest.mark.usefixtures('both_debug_modes') @pytest.mark.usefixtures('both_setsid_modes') def test_child_gets_controlling_tty_if_we_had_one(): """If dumb-init has a controlling TTY, it should give it to the child. To test this, we make a new TTY then exec "dumb-init bash" and ensure that the shell has working job control. """ > pid, sfd = pty.fork() tests/tty_test.py:67: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/pty.py:107: in fork master_fd, slave_fd = openpty() /usr/lib/python3.12/pty.py:34: in openpty master_fd, slave_name = _open_terminal() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def _open_terminal(): """Open pty master and return (master_fd, tty_name).""" for x in 'pqrstuvwxyzPQRST': for y in '0123456789abcdef': pty_name = '/dev/pty' + x + y try: fd = os.open(pty_name, os.O_RDWR) except OSError: continue return (fd, '/dev/tty' + x + y) > raise OSError('out of pty devices') E OSError: out of pty devices /usr/lib/python3.12/pty.py:67: OSError _____________________________________________________________________________________________________________________________ test_child_gets_controlling_tty_if_we_had_one[0-1] _____________________________________________________________________________________________________________________________ @pytest.mark.usefixtures('both_debug_modes') @pytest.mark.usefixtures('both_setsid_modes') def test_child_gets_controlling_tty_if_we_had_one(): """If dumb-init has a controlling TTY, it should give it to the child. To test this, we make a new TTY then exec "dumb-init bash" and ensure that the shell has working job control. """ > pid, sfd = pty.fork() tests/tty_test.py:67: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/pty.py:107: in fork master_fd, slave_fd = openpty() /usr/lib/python3.12/pty.py:34: in openpty master_fd, slave_name = _open_terminal() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def _open_terminal(): """Open pty master and return (master_fd, tty_name).""" for x in 'pqrstuvwxyzPQRST': for y in '0123456789abcdef': pty_name = '/dev/pty' + x + y try: fd = os.open(pty_name, os.O_RDWR) except OSError: continue return (fd, '/dev/tty' + x + y) > raise OSError('out of pty devices') E OSError: out of pty devices /usr/lib/python3.12/pty.py:67: OSError _____________________________________________________________________________________________________________________________ test_child_gets_controlling_tty_if_we_had_one[0-0] _____________________________________________________________________________________________________________________________ @pytest.mark.usefixtures('both_debug_modes') @pytest.mark.usefixtures('both_setsid_modes') def test_child_gets_controlling_tty_if_we_had_one(): """If dumb-init has a controlling TTY, it should give it to the child. To test this, we make a new TTY then exec "dumb-init bash" and ensure that the shell has working job control. """ > pid, sfd = pty.fork() tests/tty_test.py:67: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/pty.py:107: in fork master_fd, slave_fd = openpty() /usr/lib/python3.12/pty.py:34: in openpty master_fd, slave_name = _open_terminal() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def _open_terminal(): """Open pty master and return (master_fd, tty_name).""" for x in 'pqrstuvwxyzPQRST': for y in '0123456789abcdef': pty_name = '/dev/pty' + x + y try: fd = os.open(pty_name, os.O_RDWR) except OSError: continue return (fd, '/dev/tty' + x + y) > raise OSError('out of pty devices') E OSError: out of pty devices /usr/lib/python3.12/pty.py:67: OSError _____________________________________________________________________________________________________________________________ test_sighup_sigcont_ignored_if_was_session_leader ______________________________________________________________________________________________________________________________ def test_sighup_sigcont_ignored_if_was_session_leader(): """The first SIGHUP/SIGCONT should be ignored if dumb-init is the session leader. Due to TTY quirks (#136), when dumb-init is the session leader and forks, it needs to avoid forwarding the first SIGHUP and SIGCONT to the child. Otherwise, the child might receive the SIGHUP post-exec and terminate itself. You can "force" this race by adding a `sleep(1)` before the signal handling loop in dumb-init's code, but it's hard to reproduce the race reliably in a test otherwise. Because of this, we're stuck just asserting debug messages. """ > pid, fd = pty.fork() tests/tty_test.py:100: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/pty.py:107: in fork master_fd, slave_fd = openpty() /usr/lib/python3.12/pty.py:34: in openpty master_fd, slave_name = _open_terminal() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def _open_terminal(): """Open pty master and return (master_fd, tty_name).""" for x in 'pqrstuvwxyzPQRST': for y in '0123456789abcdef': pty_name = '/dev/pty' + x + y try: fd = os.open(pty_name, os.O_RDWR) except OSError: continue return (fd, '/dev/tty' + x + y) > raise OSError('out of pty devices') E OSError: out of pty devices /usr/lib/python3.12/pty.py:67: OSError ============================================================================================================================================== warnings summary ============================================================================================================================================== ../../../../../../../usr/lib/python3.12/site-packages/_pytest/config/__init__.py:1441 /usr/lib/python3.12/site-packages/_pytest/config/__init__.py:1441: PytestConfigWarning: Unknown config option: timeout self._warn_or_fail_if_strict(f"Unknown config option: {key}\n") -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ========================================================================================================================================== short test summary info =========================================================================================================================================== FAILED tests/child_processes_test.py::test_setsid_signals_entire_group[1] - assert 0 == 6 FAILED tests/child_processes_test.py::test_setsid_signals_entire_group[0] - assert 0 == 6 FAILED tests/child_processes_test.py::test_no_setsid_doesnt_signal_entire_group[1] - assert 0 == 6 FAILED tests/child_processes_test.py::test_no_setsid_doesnt_signal_entire_group[0] - assert 0 == 6 FAILED tests/cwd_test.py::test_working_directories[1-1] - AssertionError: assert 1 == 0 FAILED tests/cwd_test.py::test_working_directories[1-0] - AssertionError: assert 1 == 0 FAILED tests/cwd_test.py::test_working_directories[0-1] - AssertionError: assert 1 == 0 FAILED tests/cwd_test.py::test_working_directories[0-0] - AssertionError: assert 1 == 0 FAILED tests/proxies_signals_test.py::test_default_rewrites_can_be_overriden_with_setsid_enabled[1] - py.error.ENOENT: [No such file or directory]: open('/proc/4168822/status', 'r') FAILED tests/proxies_signals_test.py::test_default_rewrites_can_be_overriden_with_setsid_enabled[0] - py.error.ENOENT: [No such file or directory]: open('/proc/4168824/status', 'r') FAILED tests/shell_background_test.py::test_shell_background_support_setsid[1] - py.error.ENOENT: [No such file or directory]: open('/proc/4168835/status', 'r') FAILED tests/shell_background_test.py::test_shell_background_support_setsid[0] - py.error.ENOENT: [No such file or directory]: open('/proc/4168837/status', 'r') FAILED tests/shell_background_test.py::test_shell_background_support_without_setsid[1] - py.error.ENOENT: [No such file or directory]: open('/proc/4168838/status', 'r') FAILED tests/shell_background_test.py::test_shell_background_support_without_setsid[0] - py.error.ENOENT: [No such file or directory]: open('/proc/4168840/status', 'r') FAILED tests/tty_test.py::test_tty - OSError: out of pty devices FAILED tests/tty_test.py::test_child_gets_controlling_tty_if_we_had_one[1-1] - OSError: out of pty devices FAILED tests/tty_test.py::test_child_gets_controlling_tty_if_we_had_one[1-0] - OSError: out of pty devices FAILED tests/tty_test.py::test_child_gets_controlling_tty_if_we_had_one[0-1] - OSError: out of pty devices FAILED tests/tty_test.py::test_child_gets_controlling_tty_if_we_had_one[0-0] - OSError: out of pty devices FAILED tests/tty_test.py::test_sighup_sigcont_ignored_if_was_session_leader - OSError: out of pty devices ================================================================================================================================= 20 failed, 162 passed, 1 warning in 14.95s ================================================================================================================================= >>> ERROR: py3-dumb-init: check failed >>> py3-dumb-init: Uninstalling dependencies... (1/21) Purging .makedepends-py3-dumb-init (20251012.181126) (2/21) Purging py3-setuptools-pyc (80.9.0-r0) (3/21) Purging py3-setuptools (80.9.0-r0) (4/21) Purging py3-gpep517-pyc (19-r0) (5/21) Purging py3-gpep517 (19-r0) (6/21) Purging py3-installer-pyc (0.7.0-r2) (7/21) Purging py3-installer (0.7.0-r2) (8/21) Purging py3-wheel-pyc (0.46.1-r0) (9/21) Purging py3-wheel (0.46.1-r0) (10/21) Purging py3-pytest-pyc (8.3.5-r0) (11/21) Purging py3-pytest (8.3.5-r0) (12/21) Purging py3-iniconfig-pyc (2.1.0-r0) (13/21) Purging py3-iniconfig (2.1.0-r0) (14/21) Purging py3-packaging-pyc (25.0-r0) (15/21) Purging py3-packaging (25.0-r0) (16/21) Purging py3-parsing-pyc (3.2.3-r0) (17/21) Purging py3-parsing (3.2.3-r0) (18/21) Purging py3-pluggy-pyc (1.5.0-r0) (19/21) Purging py3-pluggy (1.5.0-r0) (20/21) Purging py3-py-pyc (1.11.0-r4) (21/21) Purging py3-py (1.11.0-r4) Executing busybox-1.37.0-r19.trigger OK: 296 MiB in 89 packages