From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: passt.top; dkim=pass (2048-bit key; secure) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.a=rsa-sha256 header.s=202408 header.b=kusQwXEv; dkim-atps=neutral Received: from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3]) by passt.top (Postfix) with ESMTPS id A78A95A004E for ; Mon, 26 Aug 2024 04:09:58 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=202408; t=1724638184; bh=Pc7wOXnQyzA4q03y2ReyhS/QW95A/xAam14qUjVuP5E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kusQwXEv5UJcEr1VH/wP4uHDSiKF2dT5nS9W+bNEdRc8hta9em382JMckAEUjdvyA rBmLmomhkl5hUsez+eQRM+66qVncJf1YwG3wnU2dGTeX2ZRP3BU2QiOJ0uDOknYd9r sCfEIRonNEqa2uKGRkLVuiBFfWoW+ABBbrht5gY0MNWgBRXUXaYJJINgjoue5s+1BH OJuW9XxYZt9nomXB8NefgR87XmQP9KEeOia+CvdQfLDIGRXWz09Yajz9amlu3vPgNU 6Y/66xZP8VvmEz1bghzuLaFflqUKr3gOYNDYqrzc8Qo1Xb8gHvJkFlGcxANkERCfT4 dtdbiN35Ml/jg== Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4WsYyw5T58z4x8j; Mon, 26 Aug 2024 12:09:44 +1000 (AEST) From: David Gibson To: Stefano Brivio , passt-dev@passt.top Subject: [PATCH v3 05/15] tasst: Support library and linters for tests in Python Date: Mon, 26 Aug 2024 12:09:32 +1000 Message-ID: <20240826020942.545155-6-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240826020942.545155-1-david@gibson.dropbear.id.au> References: <20240826020942.545155-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: DNB3VXEBT7KPL75HWXCXGK5EZXQOTXPE X-Message-ID-Hash: DNB3VXEBT7KPL75HWXCXGK5EZXQOTXPE 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 , 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: Create a Python package "tasst" with common helper code for use in passt and pasta tests. Initially it just has a placeholder selftest. Add a "make meta" target to run selftests for the test infrastructure itself. For now this runs the dummy selftest, the flake8 Python linter and the mypy static type checker. Signed-off-by: David Gibson --- test/Makefile | 30 ++++++++++++++++++++++++++++-- test/build/static_checkers.sh | 2 -- test/meta/.gitignore | 1 + test/meta/lint.sh | 28 ++++++++++++++++++++++++++++ test/tasst/.gitignore | 1 + test/tasst/__init__.py | 11 +++++++++++ test/tasst/__main__.py | 22 ++++++++++++++++++++++ 7 files changed, 91 insertions(+), 4 deletions(-) create mode 100644 test/meta/.gitignore create mode 100644 test/meta/lint.sh create mode 100644 test/tasst/.gitignore create mode 100644 test/tasst/__init__.py create mode 100644 test/tasst/__main__.py diff --git a/test/Makefile b/test/Makefile index d5a0f776..1daf1999 100644 --- a/test/Makefile +++ b/test/Makefile @@ -6,6 +6,8 @@ # Author: David Gibson WGET = wget -c +FLAKE8 = flake8-3 +MYPY = mypy DEBIAN_IMGS = debian-8.11.0-openstack-amd64.qcow2 \ debian-9-nocloud-amd64-daily-20200210-166.qcow2 \ @@ -68,10 +70,18 @@ EXETER_JOBS = $(EXETER_SH:%.sh=%.json) AVOCADO_JOBS = $(EXETER_JOBS) avocado/static_checkers.json +TASST_SRCS = __init__.py __main__.py + +EXETER_META = meta/lint.json meta/tasst.json +META_JOBS = $(EXETER_META) + +PYPKGS = tasst + PYTHON = python3 VENV = venv PIP = $(VENV)/bin/pip3 RUN_AVOCADO = $(VENV)/bin/python3 run_avocado +PYTHONPATH = exeter/py3 CFLAGS = -Wall -Werror -Wextra -pedantic -std=c99 @@ -137,10 +147,26 @@ venv: %.json: %.sh pull-exeter sh $< --avocado > $@ +%.json: %.py pull-exeter + PYTHONPATH=$(PYTHONPATH) $(PYTHON) $< --avocado > $@ + +meta/tasst.json: $(TASST_SRCS:%=tasst/%) $(VENV) pull-exeter + PYTHONPATH=$(PYTHONPATH) $(PYTHON) -m tasst --avocado > $@ + .PHONY: avocado avocado: venv $(AVOCADO_JOBS) $(RUN_AVOCADO) all $(AVOCADO_JOBS) +.PHONY: meta +meta: venv $(META_JOBS) + PYTHONPATH=$(PYTHONPATH) $(RUN_AVOCADO) meta $(META_JOBS) + +flake8: + $(FLAKE8) $(PYPKGS) + +mypy: + PYTHONPATH=$(PYTHONPATH) $(MYPY) --no-namespace-packages --strict $(PYPKGS) + check: assets ./run @@ -152,8 +178,8 @@ clean: rm -f $(LOCAL_ASSETS) rm -rf test_logs rm -f prepared-*.qcow2 prepared-*.img - rm -rf $(VENV) - rm -f $(EXETER_JOBS) + rm -rf $(VENV) tasst/__pycache__ + rm -f $(EXETER_JOBS) $(EXETER_META) realclean: clean rm -rf $(DOWNLOAD_ASSETS) diff --git a/test/build/static_checkers.sh b/test/build/static_checkers.sh index 41152c25..e02503d4 100644 --- a/test/build/static_checkers.sh +++ b/test/build/static_checkers.sh @@ -26,5 +26,3 @@ clang_tidy () { exeter_register clang_tidy exeter_main "$@" - - diff --git a/test/meta/.gitignore b/test/meta/.gitignore new file mode 100644 index 00000000..a6c57f5f --- /dev/null +++ b/test/meta/.gitignore @@ -0,0 +1 @@ +*.json diff --git a/test/meta/lint.sh b/test/meta/lint.sh new file mode 100644 index 00000000..661c2267 --- /dev/null +++ b/test/meta/lint.sh @@ -0,0 +1,28 @@ +#! /bin/sh +# +# 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/meta/lint.sh - Linters for the test code +# +# Copyright Red Hat +# Author: David Gibson + +source $(dirname $0)/../exeter/sh/exeter.sh + +flake8 () { + make flake8 +} +exeter_register flake8 + +mypy () { + make mypy +} +exeter_register mypy + +exeter_main "$@" diff --git a/test/tasst/.gitignore b/test/tasst/.gitignore new file mode 100644 index 00000000..c18dd8d8 --- /dev/null +++ b/test/tasst/.gitignore @@ -0,0 +1 @@ +__pycache__/ diff --git a/test/tasst/__init__.py b/test/tasst/__init__.py new file mode 100644 index 00000000..c1d5d9dd --- /dev/null +++ b/test/tasst/__init__.py @@ -0,0 +1,11 @@ +#! /usr/bin/env python3 + +# SPDX-License-Identifier: GPL-2.0-or-later +# +# Copyright Red Hat +# Author: David Gibson + +""" +Test A Simple Socket Transport +library of test helpers for passt & pasta +""" diff --git a/test/tasst/__main__.py b/test/tasst/__main__.py new file mode 100644 index 00000000..310e31d7 --- /dev/null +++ b/test/tasst/__main__.py @@ -0,0 +1,22 @@ +#! /usr/bin/env python3 + +# SPDX-License-Identifier: GPL-2.0-or-later +# +# Copyright Red Hat +# Author: David Gibson + +""" +Test A Simple Socket Transport +library of test helpers for passt & pasta +""" + +import exeter + + +@exeter.test +def placeholder() -> None: + pass + + +if __name__ == '__main__': + exeter.main() -- 2.46.0