From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from gandalf.ozlabs.org (gandalf.ozlabs.org [150.107.74.76]) by passt.top (Postfix) with ESMTPS id 0E5B55A027E for ; Tue, 27 Jun 2023 04:54:45 +0200 (CEST) Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4Qqq7K05ydz4wql; Tue, 27 Jun 2023 12:54:36 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=201602; t=1687834477; bh=+2G2oZak4LC6QWE3C+SKM9OnGimsOFNsP72+c3In2GA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mzHmqK2sXM0op6WRydRApscD9wvOeLd0hQcq7oX5xWXepzAV7297KRTSrDl2DzLYZ b04YkjbEKo1+0Vm2VpctIxBLtvNgPChDsNo1EJzlR9t903xWrL0NYLKfJ2okUzV42Q X7ogj+4xBmtXH5Q4M6kdLFxy1H3TLWox4WYUTk2g= From: David Gibson To: passt-dev@passt.top, Stefano Brivio Subject: [PATCH 12/27] avocado: Convert build tests to avocado Date: Tue, 27 Jun 2023 12:54:13 +1000 Message-ID: <20230627025429.2209702-13-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230627025429.2209702-1-david@gibson.dropbear.id.au> References: <20230627025429.2209702-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: JOBAESKHWX5GCUV4FESW6MVNHDDCQ5R2 X-Message-ID-Hash: JOBAESKHWX5GCUV4FESW6MVNHDDCQ5R2 X-MailFrom: dgibson@gandalf.ozlabs.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: crosa@redhat.com, jarichte@redhat.com, David Gibson X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: 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