mirror of
https://github.com/clearlinux/swupd-server.git
synced 2026-09-05 13:11:27 +00:00
Add initial functional test suite
The test suite uses BATS to emit TAP and the Automake TAP driver to consume the output. Most of the tests are basic, and full-run.bats creates a minimal update using autogenerated chroot content. Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
This commit is contained in:
@@ -27,3 +27,7 @@ cscope.*
|
||||
coverage/
|
||||
src/*.gcno
|
||||
src/*.gcda
|
||||
tap-driver.sh
|
||||
test/functional/*.log
|
||||
test/functional/*.trs
|
||||
test-suite.log
|
||||
|
||||
+19
@@ -96,6 +96,25 @@ noinst_HEADERS = \
|
||||
include/swupd.h \
|
||||
include/xattrs.h
|
||||
|
||||
TEST_EXTENSIONS = .sh
|
||||
|
||||
if ENABLE_TESTS
|
||||
tap_driver = env AM_TAP_AWK='$(AWK)' $(SHELL) \
|
||||
$(top_srcdir)/tap-driver.sh
|
||||
|
||||
LOG_DRIVER = $(tap_driver)
|
||||
SH_LOG_DRIVER = $(tap_driver)
|
||||
|
||||
TESTS = $(dist_check_SCRIPTS)
|
||||
|
||||
dist_check_SCRIPTS = \
|
||||
test/functional/basic.bats \
|
||||
test/functional/update.bats \
|
||||
test/functional/fullfiles.bats \
|
||||
test/functional/pack.bats \
|
||||
test/functional/full-run.bats
|
||||
endif
|
||||
|
||||
if COVERAGE
|
||||
AM_CFLAGS += --coverage
|
||||
|
||||
|
||||
@@ -28,6 +28,11 @@ AC_ARG_ENABLE(
|
||||
AC_DEFINE(SWUPD_WITH_STATELESS,1,[OS is stateless])
|
||||
)
|
||||
|
||||
AC_ARG_ENABLE(
|
||||
[tests],
|
||||
[AS_HELP_STRING([--disable-tests], [Do not enable functional test framework (enabled by default)])]
|
||||
)
|
||||
|
||||
have_coverage=no
|
||||
AC_ARG_ENABLE(coverage, AS_HELP_STRING([--enable-coverage], [enable test coverage]))
|
||||
if test "$enable_coverage" = "yes" ; then
|
||||
@@ -47,6 +52,14 @@ if test "$enable_coverage" = "yes" ; then
|
||||
fi
|
||||
AM_CONDITIONAL([COVERAGE], [test "$have_coverage" = "yes"])
|
||||
|
||||
AS_IF([test "$enable_tests" != "no"], [
|
||||
AC_PATH_PROG([have_bats], [bats])
|
||||
AS_IF([test -z "${have_bats}"], [
|
||||
AC_MSG_ERROR([Must have the Bash Automated Testing System (bats) installed to run functional tests])
|
||||
])
|
||||
])
|
||||
AM_CONDITIONAL([ENABLE_TESTS], [test "$enable_tests" != "no"])
|
||||
|
||||
AS_IF([test "$enable_bzip2" != "no"], [
|
||||
AC_CHECK_LIB([bz2], [BZ2_bzBuffToBuffCompress], [], [AC_MSG_ERROR([the libbz2 library is missing])])
|
||||
AC_CHECK_PROGS(BZIP2, bzip2)
|
||||
@@ -61,4 +74,5 @@ AS_IF([test "$enable_lzma" != "no"], [
|
||||
AM_CONDITIONAL([ENABLE_LZMA], [test "$enable_lzma" != "no"])
|
||||
|
||||
AC_CONFIG_FILES([Makefile])
|
||||
AC_REQUIRE_AUX_FILE([tap-driver.sh])
|
||||
AC_OUTPUT
|
||||
|
||||
Executable
+24
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env bats
|
||||
|
||||
@test "create_update help output" {
|
||||
run $srcdir/swupd_create_update --help
|
||||
[ "$status" -eq 1 ]
|
||||
run $srcdir/swupd_create_update -h
|
||||
[ "$status" -eq 1 ]
|
||||
}
|
||||
|
||||
@test "make_fullfiles help output" {
|
||||
run $srcdir/swupd_make_fullfiles --help
|
||||
[ "$status" -eq 1 ]
|
||||
run $srcdir/swupd_make_fullfiles -h
|
||||
[ "$status" -eq 1 ]
|
||||
}
|
||||
|
||||
@test "make_pack help output" {
|
||||
run $srcdir/swupd_make_pack --help
|
||||
[ "$status" -eq 1 ]
|
||||
run $srcdir/swupd_make_pack -h
|
||||
[ "$status" -eq 1 ]
|
||||
}
|
||||
|
||||
# vi: ft=sh ts=8 sw=2 sts=2 et tw=80
|
||||
Executable
+31
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env bats
|
||||
|
||||
# common functions
|
||||
load swupdlib
|
||||
|
||||
setup() {
|
||||
DIR=$(init_web_dir "$srcdir/web-dir")
|
||||
export DIR
|
||||
|
||||
init_server_ini
|
||||
init_latest_ver 0
|
||||
init_groups_ini os-core test-bundle
|
||||
|
||||
set_os_release 10 os-core
|
||||
set_os_release 10 test-bundle
|
||||
track_bundle 10 os-core
|
||||
track_bundle 10 test-bundle
|
||||
}
|
||||
|
||||
@test "full run update creation" {
|
||||
sudo $srcdir/swupd_create_update --osversion 10 --statedir $DIR
|
||||
sudo $srcdir/swupd_make_fullfiles --statedir $DIR 10
|
||||
sudo $srcdir/swupd_make_pack --statedir $DIR 0 10 os-core
|
||||
sudo $srcdir/swupd_make_pack --statedir $DIR 0 10 test-bundle
|
||||
}
|
||||
|
||||
teardown() {
|
||||
sudo rm -rf $DIR
|
||||
}
|
||||
|
||||
# vi: ft=sh ts=8 sw=2 sts=2 et tw=80
|
||||
Executable
+20
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env bats
|
||||
|
||||
@test "make_fullfiles required arg" {
|
||||
run $srcdir/swupd_make_fullfiles
|
||||
[ "$status" -eq 1 ]
|
||||
}
|
||||
|
||||
@test "make_fullfiles too many arguments" {
|
||||
# exactly one argument must be passed
|
||||
run $srcdir/swupd_make_fullfiles foo bar
|
||||
[ "$status" -eq 1 ]
|
||||
}
|
||||
|
||||
@test "make_fullfiles root priv check" {
|
||||
run $srcdir/swupd_make_fullfiles foo
|
||||
[ "$status" -eq 1 ]
|
||||
[[ "$output" =~ "not being run as root.. exiting" ]]
|
||||
}
|
||||
|
||||
# vi: ft=sh ts=8 sw=2 sts=2 et tw=80
|
||||
Executable
+26
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bats
|
||||
|
||||
@test "make_pack required arg" {
|
||||
run $srcdir/swupd_make_pack
|
||||
[ "$status" -eq 1 ]
|
||||
}
|
||||
|
||||
@test "make_pack too few arguments" {
|
||||
run $srcdir/swupd_make_pack foo
|
||||
[ "$status" -eq 1 ]
|
||||
run $srcdir/swupd_make_pack foo bar
|
||||
[ "$status" -eq 1 ]
|
||||
}
|
||||
|
||||
@test "make_pack too many arguments" {
|
||||
run $srcdir/swupd_make_pack foo bar foo bar
|
||||
[ "$status" -eq 1 ]
|
||||
}
|
||||
|
||||
@test "make_pack root priv check" {
|
||||
run $srcdir/swupd_make_pack foo bar foo
|
||||
[ "$status" -eq 1 ]
|
||||
[[ "$output" =~ "not being run as root.. exiting" ]]
|
||||
}
|
||||
|
||||
# vi: ft=sh ts=8 sw=2 sts=2 et tw=80
|
||||
@@ -0,0 +1,42 @@
|
||||
# NOTE: source this file from a *.bats file
|
||||
|
||||
init_web_dir() {
|
||||
# absolute path is a hard requirement right now
|
||||
local dir=$(realpath $1)
|
||||
mkdir -p $dir/{image,www}
|
||||
echo $dir
|
||||
}
|
||||
|
||||
init_server_ini() {
|
||||
cp $srcdir/server.ini $DIR
|
||||
sed -i "s|/var/lib/update|$DIR|" $DIR/server.ini
|
||||
}
|
||||
|
||||
init_latest_ver() {
|
||||
echo "$1" > $DIR/image/latest.version
|
||||
}
|
||||
|
||||
init_groups_ini() {
|
||||
for bundle in "$@"; do
|
||||
cat >> $DIR/groups.ini << EOF
|
||||
[$bundle]
|
||||
group=$bundle
|
||||
EOF
|
||||
done
|
||||
}
|
||||
|
||||
set_os_release() {
|
||||
local ver=$1
|
||||
local bundle=$2
|
||||
mkdir -p $DIR/image/$ver/$bundle/usr/lib/
|
||||
echo "VERSION_ID=$ver" > $DIR/image/$ver/$bundle/usr/lib/os-release
|
||||
}
|
||||
|
||||
track_bundle() {
|
||||
local ver=$1
|
||||
local bundle=$2
|
||||
mkdir -p $DIR/image/$ver/$bundle/usr/share/clear/bundles
|
||||
touch $DIR/image/$ver/$bundle/usr/share/clear/bundles/$bundle
|
||||
}
|
||||
|
||||
# vi: ft=sh ts=8 sw=2 sts=2 et tw=80
|
||||
Executable
+15
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env bats
|
||||
|
||||
@test "create_update required arg" {
|
||||
run $srcdir/swupd_create_update
|
||||
[ "$status" -eq 1 ]
|
||||
[[ "$output" =~ "Missing version parameter:" ]]
|
||||
}
|
||||
|
||||
@test "create_update root priv check" {
|
||||
run $srcdir/swupd_create_update -o 10
|
||||
[ "$status" -eq 1 ]
|
||||
[[ "$output" =~ "not being run as root.. exiting" ]]
|
||||
}
|
||||
|
||||
# vi: ft=sh ts=8 sw=2 sts=2 et tw=80
|
||||
Reference in New Issue
Block a user