[Buildroot] [git commit] support/testing/tests: add get-developers tests
Thomas Petazzoni
thomas.petazzoni at bootlin.com
Sat Jul 23 14:32:59 UTC 2022
commit: https://git.buildroot.net/buildroot/commit/?id=9bb647297a6c48a7a79c20f4403be0dbea811a6c
branch: https://git.buildroot.net/buildroot/commit/?id=refs/heads/master
Add a runtime test in order to detect undesired changes in behavior of
the get-developers script.
The test uses a .patch file generated against the buildroot tree as a
fixture to check how get-developers operates when called to check it.
The test also overrides the DEVELOPERS file in order to be fully
reproducible and a -d option is added to get-developers in order to
allow this. Since get-developers only looks to already committed
files to compare against patch files, the fixture uses a package that
is very unlikely to be removed from buildroot tree: binutils.
Signed-off-by: Ricardo Martincoski <ricardo.martincoski at gmail.com>
[Thomas: extracted from a larger patch from Ricardo, submitted at
https://patchwork.ozlabs.org/project/buildroot/patch/20220528014832.289907-1-ricardo.martincoski@gmail.com/]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
---
support/testing/tests/utils/test_get_developers.py | 104 +++++++++++++++++++++
.../0001-package-binutils-change-.mk.patch | 23 +++++
2 files changed, 127 insertions(+)
diff --git a/support/testing/tests/utils/test_get_developers.py b/support/testing/tests/utils/test_get_developers.py
new file mode 100644
index 0000000000..e4420bc6dc
--- /dev/null
+++ b/support/testing/tests/utils/test_get_developers.py
@@ -0,0 +1,104 @@
+"""Test cases for utils/get-developers.
+
+It does not inherit from infra.basetest.BRTest and therefore does not generate
+a logfile. Only when the tests fail there will be output to the console.
+
+The file syntax is already tested by the GitLab-CI job check-DEVELOPERS.
+"""
+import os
+import subprocess
+import tempfile
+import unittest
+
+import infra
+
+
+def call_script(args, env, cwd):
+ """Call a script and return stdout and stderr as lists and the exit code."""
+ proc = subprocess.Popen(args, cwd=cwd, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE, env=env,
+ universal_newlines=True)
+ out, err = proc.communicate()
+ return out.splitlines(), err.splitlines(), proc.returncode
+
+
+def call_get_developers(cmd, args, env, cwd, developers_content):
+ """Call get-developers overrinding the default DEVELOPERS file."""
+ with tempfile.NamedTemporaryFile(buffering=0) as developers_file:
+ developers_file.write(developers_content)
+ return call_script([cmd, "-d", developers_file.name] + args, env, cwd)
+
+
+class TestGetDevelopers(unittest.TestCase):
+ """Test the various ways the script can be called in a simple top to bottom sequence."""
+
+ WITH_EMPTY_PATH = {}
+ WITH_UTILS_IN_PATH = {"PATH": infra.basepath("utils") + ":" + os.environ["PATH"]}
+
+ def test_run(self):
+ topdir = infra.basepath()
+
+ # no args, with syntax error in the file
+ developers = b'text3\n'
+ out, err, rc = call_get_developers("./utils/get-developers", [], self.WITH_EMPTY_PATH, topdir, developers)
+ self.assertIn("No action specified", out)
+ self.assertEqual(rc, 0)
+ self.assertEqual(len(err), 0)
+
+ # -v generating error, called from the main dir
+ developers = b'text1\n'
+ out, err, rc = call_get_developers("./utils/get-developers", ["-v"], self.WITH_EMPTY_PATH, topdir, developers)
+ self.assertIn("Syntax error in DEVELOPERS file, line 0: 'text1'", err)
+ self.assertEqual(rc, 1)
+ self.assertEqual(len(out), 0)
+
+ # -v generating error, called from path
+ developers = b'text2\n'
+ out, err, rc = call_get_developers("get-developers", ["-v"], self.WITH_UTILS_IN_PATH, topdir, developers)
+ self.assertIn("Syntax error in DEVELOPERS file, line 0: 'text2'", err)
+ self.assertEqual(rc, 1)
+ self.assertEqual(len(out), 0)
+
+ # -c generating warning and printing lots of files with no developer
+ developers = b'N:\tAuthor <email>\n' \
+ b'F:\tpath/that/does/not/exists/1\n' \
+ b'F:\tpath/that/does/not/exists/2\n'
+ out, err, rc = call_get_developers("./utils/get-developers", ["-c"], self.WITH_EMPTY_PATH, topdir, developers)
+ self.assertIn("WARNING: 'path/that/does/not/exists/1' doesn't match any file", err)
+ self.assertIn("WARNING: 'path/that/does/not/exists/2' doesn't match any file", err)
+ self.assertEqual(rc, 0)
+ self.assertGreater(len(out), 1000)
+
+ # -p lists more than one developer
+ developers = b'N:\tdev1\n' \
+ b'F:\ttoolchain/\n' \
+ b'\n' \
+ b'N:\tdev2\n' \
+ b'F:\ttoolchain/\n'
+ out, err, rc = call_get_developers("./utils/get-developers", ["-p", "toolchain"], self.WITH_EMPTY_PATH, topdir, developers)
+ self.assertIn("dev1", out)
+ self.assertIn("dev2", out)
+ self.assertEqual(rc, 0)
+ self.assertEqual(len(err), 0)
+
+ # no args, with syntax error in the file
+ developers = b'text3\n'
+ out, err, rc = call_get_developers("./utils/get-developers", [], self.WITH_EMPTY_PATH, topdir, developers)
+ self.assertIn("No action specified", out)
+ self.assertEqual(rc, 0)
+ self.assertEqual(len(err), 0)
+
+ # patchfile from topdir and from elsewhere
+ abs_path = infra.filepath("tests/utils/test_get_developers/")
+ rel_file = "0001-package-binutils-change-.mk.patch"
+ abs_file = os.path.join(abs_path, rel_file)
+ developers = b'N:\tdev1\n' \
+ b'F:\tpackage/binutils/\n'
+ out, err, rc = call_get_developers("./utils/get-developers", [abs_file], self.WITH_EMPTY_PATH, topdir, developers)
+ self.assertIn('git send-email --to buildroot at buildroot.org --cc "dev1"', out)
+ self.assertEqual(rc, 0)
+ self.assertEqual(len(err), 0)
+ out, err, rc = call_get_developers("get-developers", [rel_file], self.WITH_UTILS_IN_PATH, abs_path, developers)
+ self.assertIn('git send-email --to buildroot at buildroot.org --cc "dev1"', out)
+ self.assertEqual(rc, 0)
+ self.assertEqual(len(err), 0)
diff --git a/support/testing/tests/utils/test_get_developers/0001-package-binutils-change-.mk.patch b/support/testing/tests/utils/test_get_developers/0001-package-binutils-change-.mk.patch
new file mode 100644
index 0000000000..46ebeaa8f1
--- /dev/null
+++ b/support/testing/tests/utils/test_get_developers/0001-package-binutils-change-.mk.patch
@@ -0,0 +1,23 @@
+From f213fd29c1015a3afee9a3fde0dd7ce6c6325802 Mon Sep 17 00:00:00 2001
+From: Ricardo Martincoski <ricardo.martincoski at gmail.com>
+Date: Fri, 27 May 2022 20:15:00 -0300
+Subject: [PATCH 1/1] package/binutils: change .mk
+
+Signed-off-by: Ricardo Martincoski <ricardo.martincoski at gmail.com>
+---
+ package/binutils/binutils.mk | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/package/binutils/binutils.mk b/package/binutils/binutils.mk
+index 8c4a1371ca..3f143d9d76 100644
+--- a/package/binutils/binutils.mk
++++ b/package/binutils/binutils.mk
+@@ -1,6 +1,6 @@
+ ################################################################################
+ #
+-# binutils
++# Binutils
+ #
+ ################################################################################
+--
+2.25.1
More information about the buildroot
mailing list