873306199e
Currently, emulator builtin binaries are downloaded after the rootfs build by each tests running the emulator (Qemu) on armv5 or armv7. Due to download quota on the server hosting theses binaries [1] some GitLab jobs are failing due to "Connection reset by peer" [2]: ConnectionResetError: [Errno 104] Connection reset by peer In a follow up commit, we'll add the possibility to download only once all emulator builtin binaries to pass them as build artifacts. As such, we will need to make sure that run-tests only download theses binaries, and that it does not run the testsuite. Add such a mode, with a new option, --prepare-only. [1] http://autobuild.buildroot.net/artefacts [2] https://gitlab.com/buildroot.org/buildroot/-/jobs/4409032417 Signed-off-by: Romain Naour <romain.naour@gmail.com> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
136 lines
4.5 KiB
Python
Executable File
136 lines
4.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import argparse
|
|
import multiprocessing
|
|
import os
|
|
import sys
|
|
|
|
import nose2
|
|
|
|
from infra.basetest import BRConfigTest
|
|
|
|
import infra
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description='Run Buildroot tests')
|
|
parser.add_argument('testname', nargs='*',
|
|
help='list of test cases to execute')
|
|
parser.add_argument('-l', '--list', action='store_true',
|
|
help='list of available test cases')
|
|
parser.add_argument('-a', '--all', action='store_true',
|
|
help='execute all test cases')
|
|
parser.add_argument('-s', '--stdout', action='store_true',
|
|
help='log everything to stdout')
|
|
parser.add_argument('-o', '--output',
|
|
help='output directory')
|
|
parser.add_argument('-d', '--download',
|
|
help='download directory')
|
|
parser.add_argument('-p', '--prepare-only', action='store_true',
|
|
help='download emulator builtin binaries')
|
|
parser.add_argument('-k', '--keep',
|
|
help='keep build directories',
|
|
action='store_true')
|
|
parser.add_argument('-t', '--testcases', type=int, default=1,
|
|
help='number of testcases to run simultaneously')
|
|
parser.add_argument('-j', '--jlevel', type=int,
|
|
help='BR2_JLEVEL to use for each testcase')
|
|
parser.add_argument('--timeout-multiplier', type=int, default=1,
|
|
help='increase timeouts (useful for slow machines)')
|
|
|
|
args = parser.parse_args()
|
|
|
|
script_path = os.path.realpath(__file__)
|
|
test_dir = os.path.dirname(script_path)
|
|
|
|
if args.stdout:
|
|
BRConfigTest.logtofile = False
|
|
|
|
if args.list:
|
|
print("List of tests")
|
|
nose2.discover(argv=[script_path,
|
|
"-s", test_dir,
|
|
"-v",
|
|
"--collect-only"],
|
|
plugins=["nose2.plugins.collect"])
|
|
return 0
|
|
|
|
if args.download is None:
|
|
args.download = os.getenv("BR2_DL_DIR")
|
|
if args.download is None:
|
|
print("Missing download directory, please use -d/--download")
|
|
print("")
|
|
parser.print_help()
|
|
return 1
|
|
|
|
BRConfigTest.downloaddir = os.path.abspath(args.download)
|
|
|
|
if args.prepare_only:
|
|
emulator_builtin_binaries = ["kernel-vexpress-5.10.7",
|
|
"vexpress-v2p-ca9-5.10.7.dtb",
|
|
"kernel-versatile-5.10.7",
|
|
"versatile-pb-5.10.7.dtb"]
|
|
print("Downloading emulator builtin binaries")
|
|
for binary in emulator_builtin_binaries:
|
|
infra.download(BRConfigTest.downloaddir, binary)
|
|
return 0
|
|
|
|
if args.output is None:
|
|
print("Missing output directory, please use -o/--output")
|
|
print("")
|
|
parser.print_help()
|
|
return 1
|
|
|
|
if not os.path.exists(args.output):
|
|
os.mkdir(args.output)
|
|
|
|
BRConfigTest.outputdir = os.path.abspath(args.output)
|
|
|
|
if args.all is False and not args.testname:
|
|
print("No test selected")
|
|
print("")
|
|
parser.print_help()
|
|
return 1
|
|
|
|
BRConfigTest.keepbuilds = args.keep
|
|
|
|
if args.testcases != 1:
|
|
if args.testcases < 1:
|
|
print("Invalid number of testcases to run simultaneously")
|
|
print("")
|
|
parser.print_help()
|
|
return 1
|
|
# same default BR2_JLEVEL as package/Makefile.in
|
|
br2_jlevel = 1 + multiprocessing.cpu_count()
|
|
each_testcase = int((br2_jlevel + args.testcases) / args.testcases)
|
|
BRConfigTest.jlevel = each_testcase
|
|
|
|
if args.jlevel:
|
|
if args.jlevel < 0:
|
|
print("Invalid BR2_JLEVEL to use for each testcase")
|
|
print("")
|
|
parser.print_help()
|
|
return 1
|
|
# the user can override the auto calculated value
|
|
BRConfigTest.jlevel = args.jlevel
|
|
|
|
if args.timeout_multiplier < 1:
|
|
print("Invalid multiplier for timeout values")
|
|
print("")
|
|
parser.print_help()
|
|
return 1
|
|
BRConfigTest.timeout_multiplier = args.timeout_multiplier
|
|
|
|
nose2_args = ["-v",
|
|
"-N", str(args.testcases),
|
|
"-s", test_dir,
|
|
"-c", os.path.join(test_dir, "conf/unittest.cfg")]
|
|
|
|
if args.testname:
|
|
nose2_args += args.testname
|
|
|
|
nose2.discover(argv=nose2_args)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|