From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from gandalf.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3]) by passt.top (Postfix) with ESMTPS id DB2C25A0277 for ; Wed, 31 May 2023 03:59:00 +0200 (CEST) Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4QWC9S2r4kz4x4N; Wed, 31 May 2023 11:58:52 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=201602; t=1685498332; bh=GtPBtU7KAdz0sXolfnAxd08gpRTwEFkNFdj/Q2FqfTU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WaraIesfDUWYxRw7KtXvmTwF/TeqxOqnK/yr4I46Pgo2XBEDPUCwchMhNG8hJjHJM lrgPr/4NPiuWkWFac5V0Um+JP4lYJzPmTR7n0XRhtAo7Y/8CmYJkrkrnKQQfrvIuRn RpHV5Xq8kQ5EPDQ3MGcLLnJVihr5iSVm6Oc8JSDc= From: David Gibson To: passt-dev@passt.top, Stefano Brivio Subject: [PATCH v3 06/20] avocado: Convert build tests to avocado Date: Wed, 31 May 2023 11:58:35 +1000 Message-Id: <20230531015849.3229596-7-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230531015849.3229596-1-david@gibson.dropbear.id.au> References: <20230531015849.3229596-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: 5TU6XMHK5YW6AKM3IWWW242QBZTPAVB2 X-Message-ID-Hash: 5TU6XMHK5YW6AKM3IWWW242QBZTPAVB2 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: Cleber Rosa , 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 # 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 + +import contextlib +import os +import os.path +import shutil +import sys +import tempfile + +import tasst +from tasst.site import CmdError, REAL_HOST + + +@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 - -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