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 <david(a)gibson.dropbear.id.au> # Conflicts: # avocado/tasst/site.py --- avocado/build.py | 81 ++++++++++++++++++++++++++++++++++++++++++++++++ oldtest/run | 2 +- test/build/all | 61 ------------------------------------ test/lib/setup | 7 ----- test/run | 4 --- 5 files changed, 82 insertions(+), 73 deletions(-) create mode 100644 avocado/build.py delete mode 100644 test/build/all diff --git a/avocado/build.py b/avocado/build.py new file mode 100644 index 0000000..5efbc88 --- /dev/null +++ b/avocado/build.py @@ -0,0 +1,81 @@ +#! /usr/bin/python3 + +# SPDX-License-Identifier: GPL-2.0-or-later +# +# avocado/build.py - Test various make targets +# +# Copyright Red Hat +# Author: David Gibson <david(a)gibson.dropbear.id.au> + +import contextlib +import os +import os.path +import shutil +import sys +import tempfile + +import tasst +from tasst.site import CmdError, REAL_HOST + + +(a)contextlib.contextmanager +def clone_source_tree(where): + REAL_HOST.require_cmds('git', 'make') + + with tempfile.TemporaryDirectory(dir=where, ignore_cleanup_errors=False) as tmpdir: + # 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 + + +class BuildTasst(tasst.Tasst): + # Some of these can take a little while + timeout = 60.0 + + def build_target(self, target, outputs): + with clone_source_tree(self.workdir): + self.assertFalse(any(os.path.exists(o) for o in outputs)) + REAL_HOST.fg('make {} CFLAGS="-Werror"'.format(target)) + self.assertTrue(all(os.path.exists(o) for o in outputs)) + REAL_HOST.fg('make clean') + self.assertFalse(any(os.path.exists(o) for o in outputs)) + + def test_make_passt(self): + self.build_target('passt', ['passt']) + + def test_make_pasta(self): + self.build_target('pasta', ['pasta']) + + def test_make_qrap(self): + self.build_target('qrap', ['qrap']) + + def test_make_all(self): + self.build_target('all', ['passt', 'pasta', 'qrap']) + + def test_make_install_uninstall(self): + with clone_source_tree(self.workdir): + with tempfile.TemporaryDirectory(dir=self.workdir, + 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('make install CFLAGS="-Werror" prefix={}'.format(prefix)) + + for t in exes: + self.assertTrue(os.path.isfile(os.path.join(bindir, t))) + REAL_HOST.fg('man -M {} -W passt'.format(mandir)) + + # Uninstall + REAL_HOST.fg('make uninstall prefix={}'.format(prefix)) + + for t in exes: + self.assertFalse(os.path.exists(os.path.join(bindir, t))) + self.assertRaises(CmdError, REAL_HOST.fg, + 'man -M {} -W passt'.format(mandir)) diff --git a/oldtest/run b/oldtest/run index 56fcd1b..a16bc49 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/build/all b/test/build/all deleted file mode 100644 index 1f79e0d..0000000 --- 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 <sbrivio(a)redhat.com> - -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 9b39b9f..5386805 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 ce24f44..b800022 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.40.1