tests: Use libtest-core.sh from ostree
Reduces drift. In the future we may want to explicitly share more test suite code too. See https://github.com/ostreedev/ostree/pull/877 Closes: #782 Approved by: jlebon
This commit is contained in:
parent
174510fc5d
commit
8ee6e86e38
132
tests/common/libtest-core.sh
Normal file
132
tests/common/libtest-core.sh
Normal file
@ -0,0 +1,132 @@
|
||||
# Core source library for shell script tests; this
|
||||
# file is intended to be the canonical source, which at
|
||||
# is copied at least into:
|
||||
#
|
||||
# - https://github.com/projectatomic/rpm-ostree
|
||||
#
|
||||
# Copyright (C) 2017 Colin Walters <walters@verbum.org>
|
||||
#
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
# License as published by the Free Software Foundation; either
|
||||
# version 2 of the License, or (at your option) any later version.
|
||||
#
|
||||
# This library 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
|
||||
# Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library; if not, write to the
|
||||
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
# Boston, MA 02111-1307, USA.
|
||||
|
||||
fatal() {
|
||||
echo $@ 1>&2; exit 1
|
||||
}
|
||||
# fatal() is shorter to type, but retain this alias
|
||||
assert_not_reached () {
|
||||
fatal "$@"
|
||||
}
|
||||
|
||||
# Some tests look for specific English strings. Use a UTF-8 version
|
||||
# of the C (POSIX) locale if we have one, or fall back to POSIX
|
||||
# (https://sourceware.org/glibc/wiki/Proposals/C.UTF-8)
|
||||
if locale -a | grep C.UTF-8 >/dev/null; then
|
||||
export LC_ALL=C.UTF-8
|
||||
else
|
||||
export LC_ALL=C
|
||||
fi
|
||||
|
||||
# This should really be the default IMO
|
||||
export G_DEBUG=fatal-warnings
|
||||
|
||||
assert_streq () {
|
||||
test "$1" = "$2" || fatal "$1 != $2"
|
||||
}
|
||||
|
||||
assert_str_match () {
|
||||
if ! echo "$1" | grep -E -q "$2"; then
|
||||
fatal "$1 does not match regexp $2"
|
||||
fi
|
||||
}
|
||||
|
||||
assert_not_streq () {
|
||||
(! test "$1" = "$2") || fatal "$1 == $2"
|
||||
}
|
||||
|
||||
assert_has_file () {
|
||||
test -f "$1" || fatal "Couldn't find '$1'"
|
||||
}
|
||||
|
||||
assert_has_dir () {
|
||||
test -d "$1" || fatal "Couldn't find '$1'"
|
||||
}
|
||||
|
||||
# Dump ls -al + file contents to stderr, then fatal()
|
||||
_fatal_print_file() {
|
||||
file="$1"
|
||||
shift
|
||||
ls -al "$file" >&2
|
||||
sed -e 's/^/# /' < "$file" >&2
|
||||
fatal "$@"
|
||||
}
|
||||
|
||||
assert_not_has_file () {
|
||||
if test -f "$1"; then
|
||||
_fatal_print_file "$1" "File '$1' exists"
|
||||
fi
|
||||
}
|
||||
|
||||
assert_not_file_has_content () {
|
||||
fpath=$1
|
||||
shift
|
||||
for re in "$@"; do
|
||||
if grep -q -e "$re" "$fpath"; then
|
||||
_fatal_print_file "$fpath" "File '$fpath' matches regexp '$re'"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
assert_not_has_dir () {
|
||||
if test -d "$1"; then
|
||||
fatal "Directory '$1' exists"
|
||||
fi
|
||||
}
|
||||
|
||||
assert_file_has_content () {
|
||||
fpath=$1
|
||||
shift
|
||||
for re in "$@"; do
|
||||
if ! grep -q -e "$re" "$fpath"; then
|
||||
_fatal_print_file "$fpath" "File '$fpath' doesn't match regexp '$re'"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
assert_file_has_content_literal () {
|
||||
if ! grep -q -F -e "$2" "$1"; then
|
||||
_fatal_print_file "$1" "File '$1' doesn't match fixed string list '$2'"
|
||||
fi
|
||||
}
|
||||
|
||||
assert_symlink_has_content () {
|
||||
if ! test -L "$1"; then
|
||||
fatal "File '$1' is not a symbolic link"
|
||||
fi
|
||||
if ! readlink "$1" | grep -q -e "$2"; then
|
||||
_fatal_print_file "$1" "Symbolic link '$1' doesn't match regexp '$2'"
|
||||
fi
|
||||
}
|
||||
|
||||
assert_file_empty() {
|
||||
if test -s "$1"; then
|
||||
_fatal_print_file "$1" "File '$1' is not empty"
|
||||
fi
|
||||
}
|
||||
|
||||
# Use to skip all of these tests
|
||||
skip() {
|
||||
echo "1..0 # SKIP" "$@"
|
||||
exit 0
|
||||
}
|
@ -26,6 +26,10 @@ fi
|
||||
LIBTEST_SH=1
|
||||
|
||||
self="$(realpath $0)"
|
||||
if test -z "${SRCDIR:-}"; then
|
||||
SRCDIR=${topsrcdir}/tests
|
||||
fi
|
||||
. ${SRCDIR}/common/libtest-core.sh
|
||||
|
||||
for bin in jq; do
|
||||
if ! command -v $bin >/dev/null; then
|
||||
@ -33,10 +37,6 @@ for bin in jq; do
|
||||
fi
|
||||
done
|
||||
|
||||
if test -z "${SRCDIR:-}"; then
|
||||
SRCDIR=${topsrcdir}/tests
|
||||
fi
|
||||
|
||||
_cleanup_tmpdir () {
|
||||
if test -z "${TEST_SKIP_CLEANUP:-}"; then
|
||||
if test -f ${test_tmpdir}/.test; then
|
||||
@ -98,68 +98,6 @@ if test -n "${OT_TESTS_VALGRIND:-}"; then
|
||||
CMD_PREFIX="env G_SLICE=always-malloc valgrind -q --leak-check=full --num-callers=30 --suppressions=${SRCDIR}/ostree-valgrind.supp"
|
||||
fi
|
||||
|
||||
assert_not_reached () {
|
||||
echo $@ 1>&2; exit 1
|
||||
}
|
||||
|
||||
assert_streq () {
|
||||
test "$1" = "$2" || (echo 1>&2 "$1 != $2"; exit 1)
|
||||
}
|
||||
|
||||
assert_not_streq () {
|
||||
(! test "$1" = "$2") || (echo 1>&2 "$1 == $2"; exit 1)
|
||||
}
|
||||
|
||||
assert_has_file () {
|
||||
test -f "$1" || (echo 1>&2 "Couldn't find '$1'"; exit 1)
|
||||
}
|
||||
|
||||
assert_has_dir () {
|
||||
test -d "$1" || (echo 1>&2 "Couldn't find '$1'"; exit 1)
|
||||
}
|
||||
|
||||
assert_not_has_file () {
|
||||
if test -f "$1"; then
|
||||
sed -e 's/^/# /' < "$1" >&2
|
||||
echo 1>&2 "File '$1' exists"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
assert_not_file_has_content () {
|
||||
if grep -q -e "$2" "$1"; then
|
||||
sed -e 's/^/# /' < "$1" >&2
|
||||
echo 1>&2 "File '$1' incorrectly matches regexp '$2'"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
assert_not_has_dir () {
|
||||
if test -d "$1"; then
|
||||
echo 1>&2 "Directory '$1' exists"; exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
assert_file_has_content () {
|
||||
fpath=$1
|
||||
shift
|
||||
for re in "$@"; do
|
||||
if ! grep -q -e "$re" "$fpath"; then
|
||||
sed -e 's/^/# /' < "$fpath" >&2
|
||||
echo 1>&2 "File '$fpath' doesn't match regexp '$re'"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
assert_file_empty() {
|
||||
if test -s "$1"; then
|
||||
sed -e 's/^/# /' < "$1" >&2
|
||||
echo 1>&2 "File '$1' is not empty"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# A wrapper which also possibly disables xattrs for CI testing
|
||||
ostree_repo_init() {
|
||||
repo=$1
|
||||
@ -295,7 +233,7 @@ setup_os_repository () {
|
||||
export bootcsum
|
||||
mv boot/vmlinuz-3.6.0 boot/vmlinuz-3.6.0-${bootcsum}
|
||||
mv boot/initramfs-3.6.0 boot/initramfs-3.6.0-${bootcsum}
|
||||
|
||||
|
||||
echo "an executable" > usr/bin/sh
|
||||
echo "some shared data" > usr/share/langs.txt
|
||||
echo "a library" > usr/lib/libfoo.so.0
|
||||
@ -314,7 +252,7 @@ EOF
|
||||
echo "a default daemon file" > usr/etc/testdirectory/test
|
||||
|
||||
ostree --repo=${test_tmpdir}/testos-repo commit --add-metadata-string version=1.0.9 -b testos/buildmaster/x86_64-runtime -s "Build"
|
||||
|
||||
|
||||
# Ensure these commits have distinct second timestamps
|
||||
sleep 2
|
||||
echo "a new executable" > usr/bin/sh
|
||||
@ -345,7 +283,7 @@ EOF
|
||||
setup_os_boot_uboot
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
cd ${test_tmpdir}
|
||||
mkdir ${test_tmpdir}/httpd
|
||||
cd httpd
|
||||
@ -387,11 +325,6 @@ os_repository_new_commit ()
|
||||
cd ${test_tmpdir}
|
||||
}
|
||||
|
||||
skip() {
|
||||
echo "1..0 # SKIP" "$@"
|
||||
exit 0
|
||||
}
|
||||
|
||||
check_root_test ()
|
||||
{
|
||||
if test "$(id -u)" != "0"; then
|
||||
|
Loading…
Reference in New Issue
Block a user