Files
libguestfs/tests/functions.sh.in
Richard W.M. Jones b5fbc7e617 tests: Replace $TEST_FUNCTIONS
Replace strange $TEST_FUNCTIONS variable/expansion thing with
something more like what we use in nbdkit, a simple tests/functions.sh
script that gets sourced into each test script.

Update the common submodule to get:

  commit 8137d47d0e654065391151eb275e3b64f230f6f5
  Author: Richard W.M. Jones <rjones@redhat.com>
  Date:   Thu Feb 13 11:13:55 2025 +0000

    mlcustomize, mltools: Replace $TEST_FUNCTIONS

    TEST_FUNCTIONS is being removed from libguestfs and guestfs-tools (it
    was removed from virt-v2v a while back).  Make the same adjustment in
    the common submodule.

(and some other commits which are not relevant to libguestfs)
2025-02-13 11:15:34 +00:00

326 lines
8.9 KiB
Bash
Executable File

#!/bin/bash -
# libguestfs
# Copyright (C) 2014-2025 Red Hat Inc.
#
# 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.
# Most of the tests written in shell script source this file for
# useful functions.
#
# To include this file, the test should do:
#
# source ./functions.sh
# set -e
# set -x
# Clean up the environment in every test script.
unset CDPATH
export LANG=C
# Various variables defined by autoconf that test scripts might want
# to use.
top_srcdir="@top_srcdir@"
top_builddir="@top_builddir@"
abs_top_srcdir="@abs_top_srcdir@"
abs_top_builddir="@abs_top_builddir@"
abs_builddir="$PWD"
abs_srcdir="$(cd "@srcdir@" && pwd)"
# Configure check results.
source $abs_top_builddir/config.sh
# Skip if $SKIP_<script_name> environment variable is set.
# Every test should call this function first.
skip_if_skipped ()
{
local v
if [ -n "$1" ]; then
v="SKIP_$(basename $1 | tr a-z.- A-Z__)"
else
v="SKIP_$(basename $0 | tr a-z.- A-Z__)"
fi
if [ -n "${!v}" ]; then
echo "$(basename $0): test skipped because \$$v is set"
exit 77
fi
echo "$(basename $0): info: you can skip this test by setting $v=1"
}
# Skip if the current libguestfs backend is $1.
# eg. skip_if_backend libvirt
skip_if_backend ()
{
local b="$(guestfish get-backend)"
case "$1" in
# Some magic happens for $1 == libvirt.
libvirt)
if [ "$b" = "libvirt" ] || [[ "$b" =~ ^libvirt: ]]; then
echo "$(basename $0): test skipped because the current backend is $b"
exit 77
fi
;;
*)
if [ "$b" = "$1" ]; then
echo "$(basename $0): test skipped because the current backend is $b"
exit 77
fi
;;
esac
}
# Skip if the current libguestfs backend is NOT $1.
skip_unless_backend ()
{
local b="$(guestfish get-backend)"
case "$1" in
# Some magic happens for $1 == libvirt.
libvirt)
if [ "$b" != "libvirt" ] && [[ ! "$b" =~ ^libvirt: ]]; then
echo "$(basename $0): this test only runs if the backend is libvirt, but the current backend is $b"
exit 77
fi
;;
*)
if [ "$b" != "$1" ]; then
echo "$(basename $0): this test only runs if the backend is $1, but the current backend is $b"
exit 77
fi
;;
esac
}
# Skip if the named ($1) disk image in test-data/phony-guests was not
# created.
skip_unless_phony_guest ()
{
local f="$abs_top_builddir/test-data/phony-guests/$1"
if ! test -f $f || ! test -s $f; then
echo "$(basename $0): test skipped because disk image '$1' was not created"
echo "$(basename $0): try running: make -C test-data check"
exit 77
fi
}
# Skip if test.iso was not created.
skip_unless_test_iso ()
{
local f="$abs_top_builddir/test-data/test.iso"
if ! test -f $f || ! test -s $f; then
echo "$(basename $0): test skipped because test-data/test.iso was not created"
echo "$(basename $0): try running: make -C test-data check"
exit 77
fi
}
# Skip if the current arch = $1.
skip_if_arch ()
{
local m="$(uname -m)"
case "$1" in
# Some magic happens for some architectures.
arm)
if [[ "$m" =~ ^arm ]]; then
echo "$(basename $0): test skipped because the current architecture ($m) is arm (32 bit)"
exit 77
fi
;;
i?86)
if [[ "$m" =~ ^i?86 ]]; then
echo "$(basename $0): test skipped because the current architecture ($m) is $1"
exit 77
fi
;;
*)
if [ "$m" = "$1" ]; then
echo "$(basename $0): test skipped because the current architecture ($m) is $1"
exit 77
fi
;;
esac
}
# Skip if the current arch != $1.
skip_unless_arch ()
{
local m="$(uname -m)"
case "$1" in
# Some magic happens for some architectures.
arm)
if [[ ! "$m" =~ ^arm ]]; then
echo "$(basename $0): test skipped because the current architecture ($m) is not arm (32 bit)"
exit 77
fi
;;
i?86)
if [[ ! "$m" =~ ^i?86 ]]; then
echo "$(basename $0): test skipped because the current architecture ($m) is not $1"
exit 77
fi
;;
*)
if [ "$m" != "$1" ]; then
echo "$(basename $0): test skipped because the current architecture ($m) is not $1"
exit 77
fi
;;
esac
}
# Skip if $1 is not known to virt-builder.
skip_unless_virt_builder_guest ()
{
if ! virt-builder -l "$1" >/dev/null 2>&1; then
echo "$(basename $0): test skipped because $1 is not known to virt-builder"
exit 77
fi
}
# Skip if FUSE is not available in the host kernel.
skip_unless_fuse ()
{
if ! test -w /dev/fuse; then
echo "$(basename $0): test skipped because the host kernel does not support FUSE"
echo "$(basename $0): /dev/fuse is missing or not writable by the current user"
exit 77
fi
}
# Skip if a feature is not available in the daemon.
skip_unless_feature_available ()
{
if ! guestfish -a /dev/null run : available "$1"; then
echo "$(basename $0): test skipped because feature $1 is not available"
exit 77
fi
}
# Skip if a filesystem is unavailable in the daemon.
skip_unless_filesystem_available ()
{
r="$(guestfish -a /dev/null run : filesystem_available "$1")"
if [ "$r" != "true" ] ; then
echo "$(basename $0): test skipped because $1 filesystem is not available"
exit 77
fi
}
# Skip unless the libvirt minimum version is met.
skip_unless_libvirt_minimum_version ()
{
if ! test -x $abs_top_builddir/lib/libvirt-is-version; then
echo "$(basename $0): test skipped because lib/libvirt-is-version is not built yet"
exit 77
fi
if ! $abs_top_builddir/lib/libvirt-is-version "$@"; then
echo "$(basename $0): test skipped because libvirt is too old, <" "$@"
exit 77
fi
}
# Skip unless the environment variable named is set to a non-empty value.
skip_unless_environment_variable_set ()
{
if [ -z "${!1}" ]; then
echo "$(basename $0): test skipped because \$$1 is not set"
exit 77
fi
}
# Run an external command and skip if the command fails. This can be
# used to test if a command exists. Normally you should use
# `cmd --help' or `cmd --version' or similar.
skip_unless ()
{
if ! "$@"; then
echo "$(basename $0): test skipped because $1 is not available"
exit 77
fi
}
# Use this if a test is broken. "$1" should contain the reason.
skip_because ()
{
echo "$(basename $0): test skipped because: $1"
exit 77
}
# Skip if the user is trying to run a test as root.
# Tests shouldn't be run as root, but a few are especially dangerous.
skip_if_root ()
{
if [ "$(id -u)" -eq 0 ]; then
echo "$(basename $0): test skipped because you're running tests as root."
echo "$(basename $0): it is NEVER a good idea to run libguestfs tests as root."
exit 77
fi
}
# Slow tests should always call this function. (See guestfs-hacking(1)).
slow_test ()
{
if [ -z "$SLOW" ]; then
echo "$(basename $0): use 'make check-slow' to run this test"
exit 77
fi
}
# Root tests should always call this function. (See guestfs-hacking(1)).
root_test ()
{
if test "$(id -u)" -ne 0; then
echo "$(basename $0): use 'sudo make check-root' to run this test"
exit 77
fi
}
do_md5 ()
{
case "$(uname)" in
Linux)
md5sum "$1" | awk '{print $1}'
;;
*)
echo "$(basename $0): unknown method to calculate MD5 of file on $(uname)"
exit 1
;;
esac
}
do_sha1 ()
{
case "$(uname)" in
Linux)
sha1sum "$1" | awk '{print $1}'
;;
*)
echo "$(basename $0): unknown method to calculate SHA1 of file on $(uname)"
exit 1
;;
esac
}
do_sha256 ()
{
case "$(uname)" in
Linux)
sha256sum "$1" | awk '{print $1}'
;;
*)
echo "$(basename $0): unknown method to calculate SHA256 of file on $(uname)"
exit 1
;;
esac
}