summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGua Guo <gua.guo@intel.com>2023-05-08 18:45:55 +0800
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2023-05-11 05:45:51 +0000
commit6dd64168ed1f74c6226784233fa36a619a985a66 (patch)
tree450728c2543c21f81a2d4d4a88f0ed766e59bbcf
parentc6382ba0f2aec5200ee03e5d97018c303ddc64d8 (diff)
downloadedk2-6dd64168ed1f74c6226784233fa36a619a985a66.tar.gz
edk2-6dd64168ed1f74c6226784233fa36a619a985a66.tar.bz2
edk2-6dd64168ed1f74c6226784233fa36a619a985a66.zip
BaseTools/Plugin: Too many execute files cause "cmd too long" failure
Windows command prompt have 8191 characters limitation, enhance it to make command too long can be resloved. Provide an example, if have too many cov files, it causes to run single command over the 8191 characters limitation. > OpenCppCoverage > --export_type binary:coverage.cov > --working_dir={workspace}Build > --input_coverage=AAA.cov > ... > --input_coverage=NNN.cov The solution is passing many coverage files in single command line to breaking it up into many command lines with one coverage file per command line in order to prevent single line is over to 8191 characters. - Command Line 1 > OpenCppCoverage > --export_type binary:coverage.cov > --working_dir={workspace}Build > --input_coverage=AAA.cov > --input_coverage=coverage.cov ... - Command Line N > OpenCppCoverage > --export_type. binary:coverage.cov > --working_dir={workspace}Build > --input_coverage=NNN.cov > --input_coverage=coverage.cov Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Sean Brogan <sean.brogan@microsoft.com> Cc: Michael Kubacki <mikuback@linux.microsoft.com> Cc: Rebecca Cran <rebecca@bsdio.com> Cc: Liming Gao <gaoliming@byosoft.com.cn> Cc: Bob Feng <bob.c.feng@intel.com> Cc: Yuwei Chen <yuwei.chen@intel.com> Signed-off-by: Gua Guo <gua.guo@intel.com> Reviewed-by: Michael Kubacki <mikuback@linux.microsoft.com> Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>
-rw-r--r--BaseTools/Plugin/HostBasedUnitTestRunner/HostBasedUnitTestRunner.py46
1 files changed, 41 insertions, 5 deletions
diff --git a/BaseTools/Plugin/HostBasedUnitTestRunner/HostBasedUnitTestRunner.py b/BaseTools/Plugin/HostBasedUnitTestRunner/HostBasedUnitTestRunner.py
index d993de9412..2e5c462cd2 100644
--- a/BaseTools/Plugin/HostBasedUnitTestRunner/HostBasedUnitTestRunner.py
+++ b/BaseTools/Plugin/HostBasedUnitTestRunner/HostBasedUnitTestRunner.py
@@ -205,28 +205,64 @@ class HostBasedUnitTestRunner(IUefiBuildPlugin):
testList = glob.glob(os.path.join(buildOutputBase, "**","*Test*.exe"), recursive=True)
workspace = thebuilder.env.GetValue("WORKSPACE")
workspace = (workspace + os.sep) if workspace[-1] != os.sep else workspace
+ workspaceBuild = os.path.join(workspace, 'Build')
# Generate coverage file
coverageFile = ""
for testFile in testList:
ret = RunCmd("OpenCppCoverage", f"--source {workspace} --export_type binary:{testFile}.cov -- {testFile}")
- coverageFile += " --input_coverage=" + testFile + ".cov"
+ if ret != 0:
+ logging.error("UnitTest Coverage: Failed to collect coverage data.")
+ return 1
+
+ coverageFile = f" --input_coverage={testFile}.cov"
+ totalCoverageFile = os.path.join(buildOutputBase, 'coverage.cov')
+ if os.path.isfile(totalCoverageFile):
+ coverageFile += f" --input_coverage={totalCoverageFile}"
+ ret = RunCmd(
+ "OpenCppCoverage",
+ f"--export_type binary:{totalCoverageFile} " +
+ f"--working_dir={workspaceBuild} " +
+ f"{coverageFile}"
+ )
if ret != 0:
logging.error("UnitTest Coverage: Failed to collect coverage data.")
return 1
# Generate and XML file if requested.by each package
- ret = RunCmd("OpenCppCoverage", f"--export_type cobertura:{os.path.join(buildOutputBase, 'coverage.xml')} --working_dir={workspace}Build {coverageFile}")
+ ret = RunCmd(
+ "OpenCppCoverage",
+ f"--export_type cobertura:{os.path.join(buildOutputBase, 'coverage.xml')} " +
+ f"--working_dir={workspaceBuild} " +
+ f"--input_coverage={totalCoverageFile} "
+ )
if ret != 0:
logging.error("UnitTest Coverage: Failed to generate cobertura format xml in single package.")
return 1
# Generate total report XML file for all package
- testCoverageList = glob.glob(os.path.join(workspace, "Build", "**","*Test*.exe.cov"), recursive=True)
+ testCoverageList = glob.glob(os.path.join(workspace, "Build", "**", "*Test*.exe.cov"), recursive=True)
coverageFile = ""
+ totalCoverageFile = os.path.join(workspaceBuild, 'coverage.cov')
for testCoverage in testCoverageList:
- coverageFile += " --input_coverage=" + testCoverage
+ coverageFile = f" --input_coverage={testCoverage}"
+ if os.path.isfile(totalCoverageFile):
+ coverageFile += f" --input_coverage={totalCoverageFile}"
+ ret = RunCmd(
+ "OpenCppCoverage",
+ f"--export_type binary:{totalCoverageFile} " +
+ f"--working_dir={workspaceBuild} " +
+ f"{coverageFile}"
+ )
+ if ret != 0:
+ logging.error("UnitTest Coverage: Failed to collect coverage data.")
+ return 1
- ret = RunCmd("OpenCppCoverage", f"--export_type cobertura:{workspace}Build/coverage.xml --working_dir={workspace}Build {coverageFile}")
+ ret = RunCmd(
+ "OpenCppCoverage",
+ f"--export_type cobertura:{os.path.join(workspaceBuild, 'coverage.xml')} " +
+ f"--working_dir={workspaceBuild} " +
+ f"--input_coverage={totalCoverageFile}"
+ )
if ret != 0:
logging.error("UnitTest Coverage: Failed to generate cobertura format xml.")
return 1