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> --- 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 <david(a)gibson.dropbear.id.au> + +""" +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 + + +(a)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 <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 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