From ac78e2c747abbffff91e5bce6a900b2ea3da244c Mon Sep 17 00:00:00 2001 From: Azure Devops Date: Tue, 3 Jan 2023 08:29:00 -0800 Subject: [PATCH 1/3] Initial commit --- .../HostUnitTestCompilerPlugin.py | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/.pytool/Plugin/HostUnitTestCompilerPlugin/HostUnitTestCompilerPlugin.py b/.pytool/Plugin/HostUnitTestCompilerPlugin/HostUnitTestCompilerPlugin.py index 2c12ae78cf..dc2cf1ba21 100644 --- a/.pytool/Plugin/HostUnitTestCompilerPlugin/HostUnitTestCompilerPlugin.py +++ b/.pytool/Plugin/HostUnitTestCompilerPlugin/HostUnitTestCompilerPlugin.py @@ -6,11 +6,12 @@ import logging import os -import re +import sys from edk2toollib.uefi.edk2.parsers.dsc_parser import DscParser from edk2toolext.environment.plugintypes.ci_build_plugin import ICiBuildPlugin +from edk2toolext.environment.plugintypes.uefi_build_plugin import IUefiBuildPlugin +from edk2toolext.environment.plugin_manager import PluginDescriptor from edk2toolext.environment.uefi_build import UefiBuilder -from edk2toolext import edk2_logging from edk2toolext.environment.var_dict import VarDict from edk2toollib.utility_functions import GetHostInfo @@ -132,18 +133,31 @@ def RunBuildPlugin(self, packagename, Edk2pathObj, pkgconfig, environment, PLM, # Skip if there is no intersection between SUPPORTED_ARCHITECTURES and TARGET_ARCHITECTURES if len(set(SUPPORTED_ARCHITECTURES) & set(TARGET_ARCHITECTURES)) == 0: tc.SetSkipped() - tc.LogStdError("No supported architecutres to build for host unit tests") + tc.LogStdError("No supported architectures to build for host unit tests") return -1 uefiBuilder = UefiBuilder() # do all the steps # WorkSpace, PackagesPath, PInHelper, PInManager + # Skip post build plugins and run only host-based-tests manually + sys.argv.append("--SkipPostBuild") ret = uefiBuilder.Go(Edk2pathObj.WorkspacePath, os.pathsep.join(Edk2pathObj.PackagePathList), PLMHelper, PLM) if ret != 0: # failure: tc.SetFailed("Compile failed for {0}".format(packagename), "Compile_FAILED") tc.LogStdError("{0} Compile failed with error code {1} ".format(AP_Path, ret)) return 1 - else: - tc.SetSuccess() - return 0 + def host_test_filter(plugin: PluginDescriptor) -> bool: + return plugin.descriptor['scope'] == 'host-based-test' + + build_plugins = PLM.GetPluginsOfClass(IUefiBuildPlugin) + host_test_plugins = filter(host_test_filter, build_plugins) + + for plugin in host_test_plugins: + if plugin.Obj.do_post_build(uefiBuilder) != 0: + tc.SetFailed("Host Based Unit Test failed for {0}".format(packagename), "HostUnitTest_FAILED") + tc.LogStdError("Host Based Unit Test failed for {0} ".format(packagename)) + return 1 + + tc.SetSuccess() + return 0 From 9b7dc4d64d7a6d6ec5716ed26896ef6bd9d0da49 Mon Sep 17 00:00:00 2001 From: Azure Devops Date: Tue, 3 Jan 2023 08:46:01 -0800 Subject: [PATCH 2/3] Update documentation --- .pytool/Plugin/HostUnitTestCompilerPlugin/Readme.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.pytool/Plugin/HostUnitTestCompilerPlugin/Readme.md b/.pytool/Plugin/HostUnitTestCompilerPlugin/Readme.md index 3eeebb4b16..f3811a929a 100644 --- a/.pytool/Plugin/HostUnitTestCompilerPlugin/Readme.md +++ b/.pytool/Plugin/HostUnitTestCompilerPlugin/Readme.md @@ -1,7 +1,10 @@ # Host UnitTest Compiler Plugin A CiBuildPlugin that compiles the dsc for host based unit test apps. -An IUefiBuildPlugin may be attached to this plugin that will run the unit tests and collect the results after successful compilation. + +To run the unit tests and collect the results after successful compilation, The +host UnitTest Compliler Plugin will execute any IUefiBuildPlugin that has the +scope 'host-based-test'. ## Configuration From 6c15645b7bad27a0a8e3ab05d9a09ed1f23099c5 Mon Sep 17 00:00:00 2001 From: Azure Devops Date: Tue, 3 Jan 2023 13:42:25 -0800 Subject: [PATCH 3/3] Update how SkipPostBuild is set --- .../HostUnitTestCompilerPlugin/HostUnitTestCompilerPlugin.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.pytool/Plugin/HostUnitTestCompilerPlugin/HostUnitTestCompilerPlugin.py b/.pytool/Plugin/HostUnitTestCompilerPlugin/HostUnitTestCompilerPlugin.py index dc2cf1ba21..876db5cd96 100644 --- a/.pytool/Plugin/HostUnitTestCompilerPlugin/HostUnitTestCompilerPlugin.py +++ b/.pytool/Plugin/HostUnitTestCompilerPlugin/HostUnitTestCompilerPlugin.py @@ -137,10 +137,11 @@ def RunBuildPlugin(self, packagename, Edk2pathObj, pkgconfig, environment, PLM, return -1 uefiBuilder = UefiBuilder() + # do all the steps # WorkSpace, PackagesPath, PInHelper, PInManager # Skip post build plugins and run only host-based-tests manually - sys.argv.append("--SkipPostBuild") + uefiBuilder.SkipPostBuild = True ret = uefiBuilder.Go(Edk2pathObj.WorkspacePath, os.pathsep.join(Edk2pathObj.PackagePathList), PLMHelper, PLM) if ret != 0: # failure: tc.SetFailed("Compile failed for {0}".format(packagename), "Compile_FAILED")