NetworkManager/src/tests/client/test-client.sh
Lubomir Rintel d89d42bf23 tests/client: test nm-cloud-setup
Some fairly rudimentary testing of nm-cloud-setup.
2023-03-21 23:35:42 +01:00

106 lines
3.2 KiB
Bash
Executable file

#!/bin/bash
# Runs the "test-python.sh" test, setting proper environment variables
# for the build tree.
#
# - the first three arguments are the BUILDDIR, SRCDIR and PYTHON paths.
# The following arguments are passed on to "test-python.sh".
#
# - you can use "--" to separate the extra arguments.
#
# The full format is
#
# $ src/tests/client/test-client.sh "$BUILDDIR" "$SRCDIR" "$PYTHON" -- "${EXTRA[@]}"
#
# - "$BUILDDIR" "$SRCDIR" and "$PYTHON" can be set to "", to fallback
# to a default.
#
# The safe way to call it is thus
#
# $ src/tests/client/test-client.sh "" "" "" -- "${EXTRA[@]}"
#
# but for brevity, you can also call
#
# $ src/tests/client/test-client.sh -- "${EXTRA[@]}"
#
# if (and only if) "${EXTRA[@]}" does not contain "--".
set -e
die() {
printf '%s\n' "$@"
exit 1
}
if [ "$4" = "--" ] ; then
ARGS=("${@:1:3}")
EXTRA=("${@:5}")
elif [ "$3" = "--" ]; then
ARGS=("${@:1:2}")
EXTRA=("${@:4}")
elif [ "$2" = "--" ]; then
ARGS=("${@:1:1}")
EXTRA=("${@:3}")
elif [ "$1" = "--" ]; then
ARGS=()
EXTRA=("${@:2}")
else
ARGS=("${@:1:3}")
EXTRA=("${@:4}")
fi
if [ "${ARGS[1]}" != "" ]; then
SRCDIR="$(realpath "${ARGS[1]}")"
else
SRCDIR="$(realpath "$(dirname "$BASH_SOURCE")/../../..")"
fi
if [ "${ARGS[0]}" != "" ]; then
BUILDDIR="$(realpath "${ARGS[0]}")"
elif test -d "$SRCDIR/build" ; then
BUILDDIR="$(realpath "$SRCDIR/build")"
else
BUILDDIR="$SRCDIR"
fi
if [ "${ARGS[2]}" != "" ]; then
PYTHON="${ARGS[2]}"
elif [ "$PYTHON" == "" ]; then
PYTHON="$(command -v python)" || die "python not found?"
fi
test -d "$BUILDDIR" || die "BUILDDIR \"$BUILDDIR\" does not exist?"
test -d "$SRCDIR" || die "SRCDIR \"$SRCDIR\" does not exist?"
if test -f "$BUILDDIR/src/libnm-client-impl/.libs/libnm.so" ; then
LIBDIR="$BUILDDIR/src/libnm-client-impl/.libs"
elif test -f "$BUILDDIR/src/libnm-client-impl/libnm.so" ; then
LIBDIR="$BUILDDIR/src/libnm-client-impl"
else
die "libnm.so does not exist under expected paths in \"$BUILDDIR/src/libnm-client-impl/{.,.libs}/\""
fi
mkdir -p "$BUILDDIR/src/tests/client/" || die "failure to create build output directory \"$BUILDDIR/src/tests/client/\""
export NM_TEST_CLIENT_NMCLI_PATH="$BUILDDIR/src/nmcli/nmcli"
export NM_TEST_CLIENT_CLOUD_SETUP_PATH="$BUILDDIR/src/nm-cloud-setup/nm-cloud-setup"
export GI_TYPELIB_PATH="$BUILDDIR/src/libnm-client-impl${GI_TYPELIB_PATH:+:$GI_TYPELIB_PATH}"
export LD_LIBRARY_PATH="$LIBDIR${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
export NM_TEST_CLIENT_BUILDDIR="$BUILDDIR"
# Run nmcli at least once. With libtool, nmcli is a shell script and with LTO
# this seems to perform some slow setup during the first run. If we do that
# during the test, it will timeout and fail.
"$NM_TEST_CLIENT_NMCLI_PATH" --version &>/dev/null || :
"$NM_TEST_CLIENT_CLOUD_SETUP_PATH" --invalid &>/dev/null || :
# we first collect all the output in "test-client.log" and print it at once
# afterwards. The only reason is that when you run with `make -j` that the
# test output is grouped together.
r="ok"
"$PYTHON" "$SRCDIR/src/tests/client/test-client.py" -v "${EXTRA[@]}" &> "$BUILDDIR/src/tests/client/test-client.log" || r=fail
cat "$BUILDDIR/src/tests/client/test-client.log"
test "$r" = ok || die "test-client.py failed!!"