Bug 8077888 - handle multiple coverage files being generated.
Change-Id: Ifd35d3fc2e15c5151142d854bb205a0538a2571b
diff --git a/src/com/android/tradefed/result/CodeCoverageReporter.java b/src/com/android/tradefed/result/CodeCoverageReporter.java
index d42c296..63e5523 100644
--- a/src/com/android/tradefed/result/CodeCoverageReporter.java
+++ b/src/com/android/tradefed/result/CodeCoverageReporter.java
@@ -32,6 +32,9 @@
import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
import java.util.zip.ZipFile;
/**
@@ -67,7 +70,7 @@
private ILogFileSaver mLogFileSaver;
private File mLocalTmpDir = null;
- private File mCoverageFile = null;
+ private List<File> mCoverageFilesList = new ArrayList<File>();
private File mCoverageMetaFile = null;
private File mXMLReportFile = null;
private File mReportOutputPath = null;
@@ -93,8 +96,10 @@
*/
@Override
public void testLog(String dataName, LogDataType dataType, InputStreamSource dataStream) {
- if (dataType.equals(LogDataType.COVERAGE)) {
- mCoverageFile = saveLogAsFile(dataName, dataType, dataStream);
+ if (LogDataType.COVERAGE.equals(dataType)) {
+ File coverageFile = saveLogAsFile(dataName, dataType, dataStream);
+ mCoverageFilesList.add(coverageFile);
+ CLog.d("Saved a new device coverage file saved at %s", coverageFile.getAbsolutePath());
}
}
@@ -157,16 +162,18 @@
try {
fetchAppropriateMetaDataFile();
- if (mCoverageFile != null) {
- generateCoverageReport(mCoverageFile, mCoverageMetaFile);
+ if (!mCoverageFilesList.isEmpty()) {
+ generateCoverageReport(mCoverageFilesList, mCoverageMetaFile);
} else {
- CLog.w("Coverage file was not generated by the test. " +
+ CLog.w("No coverage files were generated by the test. " +
"Perhaps test failed to run successfully.");
}
} finally {
// Cleanup residual files.
- if (mCoverageFile != null) {
- FileUtil.recursiveDelete(mCoverageFile);
+ if (!mCoverageFilesList.isEmpty()) {
+ for (File coverageFile : mCoverageFilesList) {
+ FileUtil.recursiveDelete(coverageFile);
+ }
}
if (mLocalTmpDir != null) {
FileUtil.recursiveDelete(mLocalTmpDir);
@@ -213,22 +220,26 @@
return buildIdPath;
}
- private void generateCoverageReport(File coverageFile, File metaFile) {
- Assert.assertNotNull("Could not find a valid coverage file.", coverageFile);
+ private void generateCoverageReport(List<File> coverageFileList, File metaFile) {
+ Assert.assertFalse("Could not find a valid coverage file.", coverageFileList.isEmpty());
Assert.assertNotNull("Could not find a valid meta data coverage file.", metaFile);
String emmaPath = findEmmaJarPath();
- String cmd[] = {
- "java", "-cp", emmaPath, "emma", "report", "-r", "html", "-r", "xml",
- "-in", coverageFile.getAbsolutePath(), "-in", metaFile.getAbsolutePath(),
- "-Dreport.html.out.encoding=UTF-8",
+ List<String> cmdList = new ArrayList<String>();
+ cmdList.addAll(Arrays.asList("java", "-cp", emmaPath, "emma", "report", "-r", "html",
+ "-r", "xml", "-in", metaFile.getAbsolutePath(), "-Dreport.html.out.encoding=UTF-8",
"-Dreport.html.out.file=" + mReportOutputPath.getAbsolutePath() + "/index.html",
- "-Dreport.xml.out.file=" + mReportOutputPath.getAbsolutePath() + "/report.xml"
- };
+ "-Dreport.xml.out.file=" + mReportOutputPath.getAbsolutePath() + "/report.xml"));
+ // Now append all the coverage files collected.
+ for (File coverageFile : coverageFileList) {
+ cmdList.add("-in");
+ cmdList.add(coverageFile.getAbsolutePath());
+ }
+ String[] cmd = cmdList.toArray(new String[cmdList.size()]);
IRunUtil runUtil = RunUtil.getDefault();
CommandResult result = runUtil.runTimedCmd(REPORT_GENERATION_TIMEOUT_MS, cmd);
if (!result.getStatus().equals(CommandStatus.SUCCESS)) {
- CLog.e("Failed to generate coverage report for %s. stderr: %s",
- coverageFile.getAbsolutePath(), result.getStderr());
+ CLog.e("Failed to generate coverage report. stderr: %s",
+ result.getStderr());
} else {
// Make the report world readable.
boolean setPerms = FileUtil.chmodRWXRecursively(mReportOutputPath);