From e415c5c996a3b408eb1064bd86048522897fc811 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20=C5=A0pa=C4=8Dek?= Date: Tue, 1 Jul 2025 11:12:15 +0200 Subject: [PATCH] Test command line tools without stdio fds Testing all combinations seems unnecessary but is cheap. I was too lazy to run this against all tools we have. nsupdate was chosen because it is one of few tools which actually use stdin and the original issue was reproducible even without any network communication, which was not the case for simple dig invocation. Sorry for new shell test but doing this in Python seemed very complicated and fragile. --- bin/tests/system/tools/tests.sh | 24 ++++++++++++++++++++++++ bin/tests/system/tools/tests_sh_tools.py | 18 ++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 bin/tests/system/tools/tests.sh create mode 100644 bin/tests/system/tools/tests_sh_tools.py diff --git a/bin/tests/system/tools/tests.sh b/bin/tests/system/tools/tests.sh new file mode 100644 index 0000000000..4132d99985 --- /dev/null +++ b/bin/tests/system/tools/tests.sh @@ -0,0 +1,24 @@ +#!/usr/sh +# Copyright (C) Internet Systems Consortium, Inc. ("ISC") +# +# SPDX-License-Identifier: MPL-2.0 +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, you can obtain one at https://mozilla.org/MPL/2.0/. +# +# See the COPYRIGHT file distributed with this work for additional +# information regarding copyright ownership. + +set -e + +. ../conf.sh + +echo_i "tools must not crash if stdio is closed" +"$NSUPDATE" 0>&- +"$NSUPDATE" 0>&- 1>&- +"$NSUPDATE" 0>&- 1>&- 2>&- +"$NSUPDATE" 0>&- 2>&- +"$NSUPDATE" 1>&- +"$NSUPDATE" 1>&- 2>&- +"$NSUPDATE" 2>&- diff --git a/bin/tests/system/tools/tests_sh_tools.py b/bin/tests/system/tools/tests_sh_tools.py new file mode 100644 index 0000000000..b031a8ac70 --- /dev/null +++ b/bin/tests/system/tools/tests_sh_tools.py @@ -0,0 +1,18 @@ +# Copyright (C) Internet Systems Consortium, Inc. ("ISC") +# +# SPDX-License-Identifier: MPL-2.0 +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, you can obtain one at https://mozilla.org/MPL/2.0/. +# +# See the COPYRIGHT file distributed with this work for additional +# information regarding copyright ownership. + +import pytest + +pytestmark = pytest.mark.extra_artifacts([]) + + +def test_tools(run_tests_sh): + run_tests_sh()