Hi, Some high-level comments:
On 09-08-17 14:32, David Sommerseth wrote: > This runs openvpn --help to check if the output is somewhat > sensible and sane. It will catch if the binary segfaults, > if it is a normal build or an --enable-small build and > does some simple checks when a list of options is produced. > > This is based on the discussions in this [1] mailing thread. > > [1] > https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg15172.html > Message-Id: <20170807132301.22759-3-chipits...@gmail.com> While extensive testing is good, fragile tests are not so good. I'm afraid this patch crosses that line. > Signed-off-by: David Sommerseth <dav...@openvpn.net> > --- > tests/Makefile.am | 2 +- > tests/t_sanity_check.sh | 118 > ++++++++++++++++++++++++++++++++++++++++++++++++ t_sanity_check is less descriptive than the t_usage proposed by Ilya. (Sanity check could be anything, while we specifically test the usage output.) > 2 files changed, 119 insertions(+), 1 deletion(-) > create mode 100755 tests/t_sanity_check.sh > > diff --git a/tests/Makefile.am b/tests/Makefile.am > index 0795680c..7af5101e 100644 > --- a/tests/Makefile.am > +++ b/tests/Makefile.am > @@ -14,7 +14,7 @@ MAINTAINERCLEANFILES = \ > > SUBDIRS = unit_tests > > -test_scripts = t_client.sh > +test_scripts = t_sanity_check.sh t_client.sh > if ENABLE_CRYPTO > test_scripts += t_lpback.sh t_cltsrv.sh > endif > diff --git a/tests/t_sanity_check.sh b/tests/t_sanity_check.sh > new file mode 100755 > index 00000000..e6c228c8 > --- /dev/null > +++ b/tests/t_sanity_check.sh > @@ -0,0 +1,118 @@ > +#! /bin/sh > +# > +# t_sanity_check.sh -- Check that openvpn --help makes somewhat sense > +# > +# Copyright (C) 2017 David Sommerseth <dav...@openvpn.net> > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of the GNU General Public License > +# as published by the Free Software Foundation; either version 2 > +# of the License, or (at your option) any later version. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write to the Free Software > +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA > +# 02110-1301, USA. > + > +set -u > +top_builddir="${top_builddir:-..}" > + > +failed=0 > +count_failure() > +{ > + failed=$(($failed + 1)) > +} > + > + > +check_option_count() > +{ > + num_min="$1" > + num_max="$2" > + > + echo -n "Checking if number of options are between $num_min and $num_max > ... " > + optcount="$(cat sanity_check_options.$$ | wc -l )" > + if [ $optcount -le $num_min ]; then > + echo "FAIL (too few, found $optcount options)" > + count_failure > + return > + fi > + if [ $optcount -gt $num_max ]; then > + echo "FAIL (too many, found $optcount options)" > + count_failure > + return > + fi > + echo "PASS (found $optcount options)" > +} This is quite fragile. For example, this breaks 'make check' for --disable-crypto builds. It will also fail easily after adding or removing some options, and we probably have more configure flags that will cause this check to fail. That's we I don't like it very much. > + > +check_options_present() > +{ > + for opt in $*; > + do > + echo -n "Checking for option --${opt} ..." > + grep -E "^--${opt} " sanity_check_options.$$ 1>/dev/null 2>&1 > + if [ $? -ne 0 ]; then > + echo "FAIL (missing option)" > + count_failure > + else > + echo "PASS" > + fi > + done > +} > + > +echo "*** OpenVPN sanity check: openvpn --help" > +echo -n "Running 'openvpn --help' ... " > +"${top_builddir}/src/openvpn/openvpn" --help > sanity_check_log.$$ 2>&1 > +res=$? > +if [ $res -ne 1 ]; then > + echo "FAIL (Something bad happened)" > + cat sanity_check_log.$$ > + count_failure > +else > + echo "PASS" > + echo -n "Check build type ... " > + linecount="$(cat sanity_check_log.$$ | wc -l)" > + if [ $linecount -eq 1 ]; then > + # Is this an --enable-small build? > + grep "Usage message not available" sanity_check_log.$$ \ > + 1> /dev/null 2> /dev/null > + if [ $? -ne 0 ]; then > + echo "Unknown build type" > + cat sanity_check_log.$$ > + count_failure > + else > + echo "PASS (--enable-small build, no further checks)" > + fi > + else > + echo "PASS (normal build)" > + > + # Extract only the options > + echo -n "Extracting options ... " > + grep -E -- ^-- sanity_check_log.$$ > sanity_check_options.$$ > + if [ $? -ne 0 ]; then > + echo "FAIL" > + count_failure > + else > + echo "PASS" > + > + # Check that the number of option counts are between 220 and 245 > + check_option_count 225 245 > + > + # Check for a selected subset of options we always expect to see > + options_check="dev dev-type remote local port proto topology > route ifconfig" > + check_options_present $options_check > + fi > + fi > +fi > +echo "*** OpenVPN sanity check result - Failed tasks: $failed" > + > +rm -f sanity_check_log.$$ sanity_check_options.$$ > +if [ $failed -gt 0 ]; then > + exit 1 > +fi > +exit 0 > -Steffan ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel