Move the build and make install tests from the old hand-rolled test
harness to avocado. The avocado versions are safer, in that they make a
private copy of the sources before building, so they won't interfere with
concurrent tests or builds in the original source tree.
Signed-off-by: David Gibson
---
oldtest/run | 2 +-
test/Makefile | 2 +-
test/avocado/build.py | 94 +++++++++++++++++++++++++++++++++++++++++++
test/build/all | 61 ----------------------------
test/lib/setup | 7 ----
test/run | 4 --
6 files changed, 96 insertions(+), 74 deletions(-)
create mode 100644 test/avocado/build.py
delete mode 100644 test/build/all
diff --git a/oldtest/run b/oldtest/run
index 56fcd1b3..a16bc49b 100755
--- a/oldtest/run
+++ b/oldtest/run
@@ -65,7 +65,7 @@ run() {
[ ${CI} -eq 1 ] && video_start ci
setup build
-# test build/all
+ test build/all
test build/cppcheck
test build/clang_tidy
teardown build
diff --git a/test/Makefile b/test/Makefile
index 0e641024..58159c83 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -210,7 +210,7 @@ PYTHON = python3
VENV = venv
PLUGIN = avocado_classless
PYPKGS = $(PLUGIN)/$(PLUGIN) $(wildcard $(PLUGIN)/*.py) \
- tasst
+ tasst $(shell find avocado -name '*.py')
# Put this back if/when the plugin becomes available in upstream/system avocado
#AVOCADO := $(shell which avocado)
diff --git a/test/avocado/build.py b/test/avocado/build.py
new file mode 100644
index 00000000..4cce77a6
--- /dev/null
+++ b/test/avocado/build.py
@@ -0,0 +1,94 @@
+#! /usr/bin/env avocado-runner-avocado-classless
+
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# Copyright Red Hat
+# Author: David Gibson
+
+"""
+avocado/build.py - Test passt & pasta build targets
+"""
+
+
+import contextlib
+import os
+import os.path
+import shutil
+from tempfile import TemporaryDirectory
+
+from avocado_classless.test import assert_raises, test
+
+from tasst.exesite import CmdError, REAL_HOST
+
+
+@contextlib.contextmanager
+def clone_source_tree():
+ REAL_HOST.require_cmds('git', 'make')
+
+ with TemporaryDirectory(ignore_cleanup_errors=False) as tmpdir:
+ os.chdir('..')
+ # Make a temporary copy of the sources
+ srcfiles = REAL_HOST.output('git ls-files') \
+ .decode('utf-8').splitlines()
+ for src in srcfiles:
+ dst = os.path.join(tmpdir, src)
+ os.makedirs(os.path.dirname(dst), exist_ok=True)
+ shutil.copy(src, dst)
+ os.chdir(tmpdir)
+ yield tmpdir
+
+
+def build_target(target, outputs):
+ with clone_source_tree():
+ for o in outputs:
+ assert not os.path.exists(o)
+ REAL_HOST.fg(f'make {target} CFLAGS="-Werror"')
+ for o in outputs:
+ assert os.path.exists(o)
+ REAL_HOST.fg('make clean')
+ for o in outputs:
+ assert not os.path.exists(o)
+
+
+@test
+def test_make_passt():
+ build_target('passt', ['passt'])
+
+
+@test
+def test_make_pasta():
+ build_target('pasta', ['pasta'])
+
+
+@test
+def test_make_qrap():
+ build_target('qrap', ['qrap'])
+
+
+@test
+def test_make_all():
+ build_target('all', ['passt', 'pasta', 'qrap'])
+
+
+@test
+def test_make_install_uninstall():
+ with clone_source_tree():
+ with TemporaryDirectory(ignore_cleanup_errors=False) as prefix:
+ bindir = os.path.join(prefix, 'bin')
+ mandir = os.path.join(prefix, 'share', 'man')
+ exes = ['passt', 'pasta', 'qrap']
+
+ # Install
+ REAL_HOST.fg(f'make install CFLAGS="-Werror" prefix={prefix}')
+
+ for t in exes:
+ assert os.path.isfile(os.path.join(bindir, t))
+ REAL_HOST.fg(f'man -M {mandir} -W passt')
+
+ # Uninstall
+ REAL_HOST.fg(f'make uninstall prefix={prefix}')
+
+ for t in exes:
+ assert not os.path.exists(os.path.join(bindir, t))
+ assert_raises(CmdError, REAL_HOST.fg,
+ f'man -M {mandir} -W passt')
diff --git a/test/build/all b/test/build/all
deleted file mode 100644
index 1f79e0d8..00000000
--- a/test/build/all
+++ /dev/null
@@ -1,61 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0-or-later
-#
-# PASST - Plug A Simple Socket Transport
-# for qemu/UNIX domain socket mode
-#
-# PASTA - Pack A Subtle Tap Abstraction
-# for network namespace/tap device mode
-#
-# test/build/all - Build targets, one by one, then all together, check output
-#
-# Copyright (c) 2021 Red Hat GmbH
-# Author: Stefano Brivio
-
-htools make cc rm uname getconf mkdir cp rm man
-
-test Build passt
-host make clean
-check ! [ -e passt ]
-host CFLAGS="-Werror" make passt
-check [ -f passt ]
-
-test Build pasta
-host make clean
-check ! [ -e pasta ]
-host CFLAGS="-Werror" make pasta
-check [ -h pasta ]
-
-test Build qrap
-host make clean
-check ! [ -e qrap ]
-host CFLAGS="-Werror" make qrap
-check [ -f qrap ]
-
-test Build all
-host make clean
-check ! [ -e passt ]
-check ! [ -e pasta ]
-check ! [ -e qrap ]
-host CFLAGS="-Werror" make
-check [ -f passt ]
-check [ -h pasta ]
-check [ -f qrap ]
-
-test Install
-host mkdir __STATEDIR__/prefix
-host prefix=__STATEDIR__/prefix make install
-check [ -f __STATEDIR__/prefix/bin/passt ]
-check [ -h __STATEDIR__/prefix/bin/pasta ]
-check [ -f __STATEDIR__/prefix/bin/qrap ]
-check man -M __STATEDIR__/prefix/share/man -W passt
-check man -M __STATEDIR__/prefix/share/man -W pasta
-check man -M __STATEDIR__/prefix/share/man -W qrap
-
-test Uninstall
-host prefix=__STATEDIR__/prefix make uninstall
-check ! [ -f __STATEDIR__/prefix/bin/passt ]
-check ! [ -h __STATEDIR__/prefix/bin/pasta ]
-check ! [ -f __STATEDIR__/prefix/bin/qrap ]
-check ! man -M __STATEDIR__/prefix/share/man -W passt 2>/dev/null
-check ! man -M __STATEDIR__/prefix/share/man -W pasta 2>/dev/null
-check ! man -M __STATEDIR__/prefix/share/man -W qrap 2>/dev/null
diff --git a/test/lib/setup b/test/lib/setup
index 9b39b9fe..5386805f 100755
--- a/test/lib/setup
+++ b/test/lib/setup
@@ -18,13 +18,6 @@ VCPUS="$( [ $(nproc) -ge 8 ] && echo 6 || echo $(( $(nproc) / 2 + 1 )) )"
__mem_kib="$(sed -n 's/MemTotal:[ ]*\([0-9]*\) kB/\1/p' /proc/meminfo)"
VMEM="$((${__mem_kib} / 1024 / 4))"
-# setup_build() - Set up pane layout for build tests
-setup_build() {
- context_setup_host host
-
- layout_host
-}
-
# setup_passt() - Start qemu and passt
setup_passt() {
context_setup_host host
diff --git a/test/run b/test/run
index ce24f446..b8000224 100755
--- a/test/run
+++ b/test/run
@@ -64,10 +64,6 @@ run() {
perf_init
[ ${CI} -eq 1 ] && video_start ci
- setup build
- test build/all
- teardown build
-
setup pasta
test pasta/ndp
test pasta/dhcp
--
2.41.0