BaseTools/Plugin: Update HostBasedUnitTestRunner to support Linux
REF:https://bugzilla.tianocore.org/show_bug.cgi?id=2513 Update HostBasedUnitTestRunner plugin to support the Linux environment and remove any Windows only logic. Cc: Bob Feng <bob.c.feng@intel.com> Cc: Liming Gao <liming.gao@intel.com> Cc: Bret Barkelew <Bret.Barkelew@microsoft.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Sean Brogan <sean.brogan@microsoft.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Shenglei Zhang <shenglei.zhang@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
committed by
mergify[bot]
parent
f4f9c4cb63
commit
c8543b8d83
@ -8,47 +8,23 @@
|
|||||||
import os
|
import os
|
||||||
import logging
|
import logging
|
||||||
import glob
|
import glob
|
||||||
|
import stat
|
||||||
import xml.etree.ElementTree
|
import xml.etree.ElementTree
|
||||||
from edk2toolext.environment.plugintypes.uefi_build_plugin import IUefiBuildPlugin
|
from edk2toolext.environment.plugintypes.uefi_build_plugin import IUefiBuildPlugin
|
||||||
from edk2toolext import edk2_logging
|
from edk2toolext import edk2_logging
|
||||||
import edk2toollib.windows.locate_tools as locate_tools
|
import edk2toollib.windows.locate_tools as locate_tools
|
||||||
from edk2toolext.environment import shell_environment
|
from edk2toolext.environment import shell_environment
|
||||||
from edk2toollib.utility_functions import RunCmd
|
from edk2toollib.utility_functions import RunCmd
|
||||||
|
from edk2toollib.utility_functions import GetHostInfo
|
||||||
|
|
||||||
|
|
||||||
class HostBasedUnitTestRunner(IUefiBuildPlugin):
|
class HostBasedUnitTestRunner(IUefiBuildPlugin):
|
||||||
|
|
||||||
def do_pre_build(self, thebuilder):
|
def do_pre_build(self, thebuilder):
|
||||||
'''
|
'''
|
||||||
Works with the compiler (either the HostBasedCompilerPlugin or an other Builder) to set
|
Run Prebuild
|
||||||
up the environment that will be needed to build host-based unit tests.
|
|
||||||
|
|
||||||
EXPECTS:
|
|
||||||
- Build Var 'CI_BUILD_TYPE' - If not set to 'host_unit_test', will not do anything.
|
|
||||||
|
|
||||||
UPDATES:
|
|
||||||
- Shell Var (Several) - Updates the shell with all vars listed in interesting_keys.
|
|
||||||
- Shell Path - Updated from QueryVcVariables()
|
|
||||||
- Shell Var 'CMOCKA_MESSAGE_OUTPUT'
|
|
||||||
'''
|
'''
|
||||||
ci_type = thebuilder.env.GetValue('CI_BUILD_TYPE')
|
|
||||||
if ci_type != 'host_unit_test':
|
|
||||||
return 0
|
|
||||||
|
|
||||||
shell_env = shell_environment.GetEnvironment()
|
|
||||||
# Use the tools lib to determine the correct values for the vars that interest us.
|
|
||||||
interesting_keys = ["ExtensionSdkDir", "INCLUDE", "LIB", "LIBPATH", "UniversalCRTSdkDir",
|
|
||||||
"UCRTVersion", "WindowsLibPath", "WindowsSdkBinPath", "WindowsSdkDir", "WindowsSdkVerBinPath",
|
|
||||||
"WindowsSDKVersion", "VCToolsInstallDir"]
|
|
||||||
vs_vars = locate_tools.QueryVcVariables(interesting_keys, "amd64")
|
|
||||||
for (k, v) in vs_vars.items():
|
|
||||||
if k.upper() == "PATH":
|
|
||||||
shell_env.append_path(v)
|
|
||||||
else:
|
|
||||||
shell_env.set_shell_var(k, v)
|
|
||||||
|
|
||||||
# Set up the reporting type for Cmocka.
|
|
||||||
shell_env.set_shell_var('CMOCKA_MESSAGE_OUTPUT', 'xml')
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def do_post_build(self, thebuilder):
|
def do_post_build(self, thebuilder):
|
||||||
@ -73,6 +49,9 @@ class HostBasedUnitTestRunner(IUefiBuildPlugin):
|
|||||||
|
|
||||||
failure_count = 0
|
failure_count = 0
|
||||||
|
|
||||||
|
# Set up the reporting type for Cmocka.
|
||||||
|
shell_env.set_shell_var('CMOCKA_MESSAGE_OUTPUT', 'xml')
|
||||||
|
|
||||||
for arch in thebuilder.env.GetValue("TARGET_ARCH").split():
|
for arch in thebuilder.env.GetValue("TARGET_ARCH").split():
|
||||||
logging.log(edk2_logging.get_subsection_level(),
|
logging.log(edk2_logging.get_subsection_level(),
|
||||||
"Testing for architecture: " + arch)
|
"Testing for architecture: " + arch)
|
||||||
@ -82,8 +61,29 @@ class HostBasedUnitTestRunner(IUefiBuildPlugin):
|
|||||||
for old_result in glob.iglob(os.path.join(cp, "*.result.xml")):
|
for old_result in glob.iglob(os.path.join(cp, "*.result.xml")):
|
||||||
os.remove(old_result)
|
os.remove(old_result)
|
||||||
|
|
||||||
# Determine whether any tests exist.
|
# Find and Run any Host Tests
|
||||||
testList = glob.glob(os.path.join(cp, "*Test*.exe"))
|
if GetHostInfo().os.upper() == "LINUX":
|
||||||
|
testList = glob.glob(os.path.join(cp, "*Test*"))
|
||||||
|
for a in testList[:]:
|
||||||
|
p = os.path.join(cp, a)
|
||||||
|
# It must be a file
|
||||||
|
if not os.path.isfile(p):
|
||||||
|
testList.remove(a)
|
||||||
|
logging.debug(f"Remove directory file: {p}")
|
||||||
|
continue
|
||||||
|
# It must be executable
|
||||||
|
if os.stat(p).st_mode & (stat.S_IEXEC | stat.S_IXGRP | stat.S_IXOTH) == 0:
|
||||||
|
testList.remove(a)
|
||||||
|
logging.debug(f"Remove non-executable file: {p}")
|
||||||
|
continue
|
||||||
|
|
||||||
|
logging.info(f"Test file found: {p}")
|
||||||
|
|
||||||
|
elif GetHostInfo().os.upper() == "WINDOWS":
|
||||||
|
testList = glob.glob(os.path.join(cp, "*Test*.exe"))
|
||||||
|
else:
|
||||||
|
raise NotImplementedError("Unsupported Operating System")
|
||||||
|
|
||||||
for test in testList:
|
for test in testList:
|
||||||
# Configure output name.
|
# Configure output name.
|
||||||
shell_env.set_shell_var(
|
shell_env.set_shell_var(
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
##
|
##
|
||||||
{
|
{
|
||||||
"scope": "host-test-win",
|
"scope": "host-based-test",
|
||||||
"name": "Windows Host-Based Unit Test Runner",
|
"name": "Host-Based Unit Test Runner",
|
||||||
"module": "HostBasedUnitTestRunner"
|
"module": "HostBasedUnitTestRunner"
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user