public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Michael Kubacki" <michael.kubacki@outlook.com>
To: devel@edk2.groups.io
Cc: Bob Feng <bob.c.feng@intel.com>,
	Liming Gao <liming.gao@intel.com>,
	Bret Barkelew <Bret.Barkelew@microsoft.com>,
	Michael D Kinney <michael.d.kinney@intel.com>
Subject: [PATCH v1 2/2] BaseTools/Plugin: Update HostBasedUnitTestRunner to support Linux
Date: Wed, 15 Apr 2020 13:30:39 -0700	[thread overview]
Message-ID: <MWHPR07MB3440B919188C76C9FC7E7C07E9DB0@MWHPR07MB3440.namprd07.prod.outlook.com> (raw)
In-Reply-To: <20200415203039.23196-1-michael.kubacki@outlook.com>

From: Sean Brogan <sean.brogan@microsoft.com>

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>
---
 BaseTools/Plugin/HostBasedUnitTestRunner/HostBasedUnitTestRunner.py           | 58 ++++++++++----------
 BaseTools/Plugin/HostBasedUnitTestRunner/HostBasedUnitTestRunner_plug_in.yaml |  4 +-
 2 files changed, 31 insertions(+), 31 deletions(-)

diff --git a/BaseTools/Plugin/HostBasedUnitTestRunner/HostBasedUnitTestRunner.py b/BaseTools/Plugin/HostBasedUnitTestRunner/HostBasedUnitTestRunner.py
index 92426760ae0f..c1eeaf26251e 100644
--- a/BaseTools/Plugin/HostBasedUnitTestRunner/HostBasedUnitTestRunner.py
+++ b/BaseTools/Plugin/HostBasedUnitTestRunner/HostBasedUnitTestRunner.py
@@ -8,47 +8,23 @@
 import os
 import logging
 import glob
+import stat
 import xml.etree.ElementTree
 from edk2toolext.environment.plugintypes.uefi_build_plugin import IUefiBuildPlugin
 from edk2toolext import edk2_logging
 import edk2toollib.windows.locate_tools as locate_tools
 from edk2toolext.environment import shell_environment
 from edk2toollib.utility_functions import RunCmd
+from edk2toollib.utility_functions import GetHostInfo
 
 
 class HostBasedUnitTestRunner(IUefiBuildPlugin):
 
     def do_pre_build(self, thebuilder):
         '''
-        Works with the compiler (either the HostBasedCompilerPlugin or an other Builder) to set
-        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'
+        Run Prebuild
         '''
-        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
 
     def do_post_build(self, thebuilder):
@@ -73,6 +49,9 @@ class HostBasedUnitTestRunner(IUefiBuildPlugin):
 
         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():
             logging.log(edk2_logging.get_subsection_level(),
                         "Testing for architecture: " + arch)
@@ -82,8 +61,29 @@ class HostBasedUnitTestRunner(IUefiBuildPlugin):
             for old_result in glob.iglob(os.path.join(cp, "*.result.xml")):
                 os.remove(old_result)
 
-            # Determine whether any tests exist.
-            testList = glob.glob(os.path.join(cp, "*Test*.exe"))
+            # Find and Run any Host Tests
+            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:
                 # Configure output name.
                 shell_env.set_shell_var(
diff --git a/BaseTools/Plugin/HostBasedUnitTestRunner/HostBasedUnitTestRunner_plug_in.yaml b/BaseTools/Plugin/HostBasedUnitTestRunner/HostBasedUnitTestRunner_plug_in.yaml
index d9eb852e97d9..a0fbf3d2fe16 100644
--- a/BaseTools/Plugin/HostBasedUnitTestRunner/HostBasedUnitTestRunner_plug_in.yaml
+++ b/BaseTools/Plugin/HostBasedUnitTestRunner/HostBasedUnitTestRunner_plug_in.yaml
@@ -6,7 +6,7 @@
 # SPDX-License-Identifier: BSD-2-Clause-Patent
 ##
 {
-  "scope": "host-test-win",
-  "name": "Windows Host-Based Unit Test Runner",
+  "scope": "host-based-test",
+  "name": "Host-Based Unit Test Runner",
   "module": "HostBasedUnitTestRunner"
 }
-- 
2.16.3.windows.1


      parent reply	other threads:[~2020-04-15 20:31 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20200415203039.23196-1-michael.kubacki@outlook.com>
2020-04-15 20:30 ` [PATCH v1 1/2] .pytool/CISettings: Remove Windows only scope for host based unit tests Michael Kubacki
2020-04-15 20:30 ` Michael Kubacki [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=MWHPR07MB3440B919188C76C9FC7E7C07E9DB0@MWHPR07MB3440.namprd07.prod.outlook.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox