mirror of
https://github.com/AdaCore/aws.git
synced 2026-02-12 12:29:46 -08:00
Our packaging scripts… * set TARGET to Env().target.triplet at 'make setup' time, so testsuite.tags is generated in a directory named after this triplet; * run the testsuite launcher script directly from the 'regtests' folder, bypassing Makefile:run_regtests which (via regtests/Makefile:aws_regtests) might otherwise have changed to the correct directory. Under these circumstances, the most straightforward solution seems to be giving control back to our packaging scripts: they set TARGET, ergo they control the directory for testsuite.tags, ergo they should pass that information back to the testsuite runner. Arguably this could be fixed by having 'AWSTestsuite.set_up' use the correct compiler to locate 'build_dir' (our cross-compilers include the target triplet in their name; "gcc -dumpmachine" will only ever return the native triplet); it seems inelegant however to have testsuite.py use this heuristic, but not makefile.conf. TN: eng/shared/release#572
184 lines
6.3 KiB
Python
Executable File
184 lines
6.3 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# Ada Web Server
|
|
#
|
|
# Copyright (C) 2003-2024, AdaCore
|
|
#
|
|
# This library is free software; you can redistribute it and/or modify
|
|
# This is free software; you can redistribute it and/or modify it
|
|
# under terms of the GNU General Public License as published by the
|
|
# Free Software Foundation; either version12, or (at your option) any
|
|
# later version. This software is distributed in the hope that it will
|
|
# be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
|
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# distributed with this software; see file COPYING3. If not, go
|
|
# to http://www.gnu.org/licenses for a complete copy of the license.
|
|
"""
|
|
./testsuite.py [OPTIONS] [TEST_NAME]
|
|
|
|
This module is the main driver for AWS testsuite
|
|
"""
|
|
import logging
|
|
import os
|
|
import sys
|
|
import argparse
|
|
from pathlib import Path
|
|
|
|
from makevar import MakeVar
|
|
from subprocess import run
|
|
|
|
from e3.testsuite import Testsuite
|
|
from e3.testsuite.driver.adacore import AdaCoreLegacyTestDriver
|
|
from e3.testsuite.testcase_finder import ParsedTest, TestFinder
|
|
|
|
script_directory = os.path.dirname(os.path.abspath(sys.argv[0]))
|
|
|
|
class AWSTestFinder(TestFinder):
|
|
"""Look for testcase in directories which contains a test.py file.
|
|
|
|
The Z999_xfail testcase is ignored if not required by the user.
|
|
"""
|
|
def probe(
|
|
self,
|
|
testsuite,
|
|
dirpath,
|
|
dirnames,
|
|
filenames,
|
|
):
|
|
test_name = os.path.basename(dirpath)
|
|
|
|
# skip Z999_xfail if needed
|
|
if not testsuite.env.options.with_Z999 and test_name == "Z999_xfail":
|
|
return None
|
|
|
|
if "test.py" in filenames:
|
|
return ParsedTest(test_name, AdaCoreLegacyTestDriver, {}, dirpath)
|
|
else:
|
|
return None
|
|
|
|
|
|
class AWSTestsuite(Testsuite):
|
|
"""Run the testsuite."""
|
|
|
|
def set_up(self):
|
|
"""Setup the testsuite environment."""
|
|
|
|
# Build the discriminants
|
|
discs = self.env.discriminants + ["ALL"]
|
|
|
|
if self.env.target.os.name == "vxworks6":
|
|
discs += "vxworks6"
|
|
|
|
self.env.discs = discs
|
|
|
|
if self.env.options.target_dir is not None:
|
|
build_dir = self.env.options.target_dir
|
|
else:
|
|
gcc_target = run("gcc -dumpmachine", capture_output=True, shell=True)
|
|
build_dir = Path("..", gcc_target.stdout.decode().rstrip())
|
|
|
|
# Read discriminants from testsuite.tags
|
|
# The file testsuite.tags should have been generated by
|
|
# AWS 'make setup'
|
|
try:
|
|
with open(build_dir.joinpath("testsuite.tags")) as tags_file:
|
|
discs += tags_file.read().strip().split(",")
|
|
except IOError:
|
|
sys.exit("Cannot find testsuite.tags. Please run make setup")
|
|
|
|
logging.debug(
|
|
"Running the testsuite with the following discriminants: %s"
|
|
% ", ".join(discs)
|
|
)
|
|
|
|
# Save discriminants
|
|
with open(self.env.options.output_dir + "/discs", "w") as discs_f:
|
|
discs_f.write(" ".join(discs))
|
|
|
|
if self.env.options.with_gdb:
|
|
# Serialize runs and disable gprof
|
|
self.env.options.jobs = 1
|
|
self.env.options.with_gprof = False
|
|
|
|
# Add current directory in PYTHONPATH (to find test_support.py)
|
|
self.env.add_search_path("PYTHONPATH", script_directory)
|
|
|
|
if self.env.options.from_build_dir:
|
|
os.environ["ADA_PROJECT_PATH"] = os.getcwd()
|
|
# Read makefile.setup to set proper build environment
|
|
c = MakeVar(str(build_dir.joinpath("makefile.setup")))
|
|
os.environ["PRJ_BUILD"] = c.get("DEBUG", "true", "Debug", "Release")
|
|
os.environ["PRJ_XMLADA"] = c.get("XMLADA", "true", "Installed", "Disabled")
|
|
os.environ["PRJ_LAL"] = c.get("LAL", "true", "Installed", "Disabled")
|
|
os.environ["PRJ_LDAP"] = c.get("LDAP", "true", "Installed", "Disabled")
|
|
os.environ["PRJ_SOCKLIB"] = c.get("NETLIB")
|
|
os.environ["SOCKET"] = c.get("SOCKET")
|
|
os.environ["PRJ_TARGET"] = c.get("PRJ_TARGET")
|
|
os.environ["LIBRARY_TYPE"] = "static"
|
|
# from-build-dir only supported on native platforms
|
|
os.environ["PLATFORM"] = "native"
|
|
# Add current tools in from of PATH
|
|
|
|
os.environ["GPRBUILD_OPTIONS"] = os.environ["GPROPTS"]
|
|
os.environ["GPRBUILD_OPTIONS"] += " -XLIBRARY_TYPE=static"
|
|
|
|
static_tools_dir = build_dir.joinpath(
|
|
os.environ["PRJ_BUILD"].lower(), "static", "tools",
|
|
)
|
|
os.environ["PATH"] = os.pathsep.join(
|
|
(str(static_tools_dir), os.environ["PATH"])
|
|
)
|
|
|
|
os.environ['REGTESTS_DIR'] = script_directory
|
|
|
|
# Save the environment
|
|
self.env.test_environ = dict(os.environ)
|
|
self.env.test_environ["TEST_CONFIG"] = os.path.join(os.getcwd(), "env.dump")
|
|
self.env.store(self.env.test_environ["TEST_CONFIG"])
|
|
|
|
def add_options(self, parser: argparse.ArgumentParser) -> None:
|
|
parser.add_argument(
|
|
"--with-Z999",
|
|
action="store_true",
|
|
help="Add a test that always fail",
|
|
)
|
|
parser.add_argument(
|
|
"--with-gprof",
|
|
action="store_true",
|
|
help="Generate profiling reports",
|
|
)
|
|
parser.add_argument(
|
|
"--with-gdb",
|
|
action="store_true",
|
|
help="Run with gdb",
|
|
)
|
|
parser.add_argument(
|
|
"--with-valgrind",
|
|
action="store_true",
|
|
help="Run with valgrind",
|
|
)
|
|
parser.add_argument(
|
|
"--from-build-dir",
|
|
action="store_true",
|
|
help="Run testsuite from local build (in repository)",
|
|
)
|
|
parser.add_argument(
|
|
"--target-dir",
|
|
help=(
|
|
"Directory where target-specific resources live"
|
|
" (e.g. makefile.setup, testsuite.tags)."
|
|
),
|
|
type=Path,
|
|
)
|
|
|
|
@property
|
|
def test_finders(self):
|
|
return [AWSTestFinder()]
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# Run the testsuite
|
|
AWSTestsuite().testsuite_main()
|