aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorGravatar elenairina <elenairina@google.com>2018-07-06 03:06:21 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-06 03:07:25 -0700
commit9438d1042df9e70570d245f6bd259acdfbb3455e (patch)
tree106816a832efd2a1c351966de94fe52277c70f32 /tools
parentc4622ac9205d2f1b42dac8c598e83113d39e7f11 (diff)
Create Bazel coverage report action.
Fixes #5246 RELNOTES: None. PiperOrigin-RevId: 203453340
Diffstat (limited to 'tools')
-rw-r--r--tools/test/BUILD2
-rw-r--r--tools/test/LcovMerger/java/com/google/devtools/lcovmerger/BUILD.tools1
-rw-r--r--tools/test/LcovMerger/java/com/google/devtools/lcovmerger/Main.java61
-rw-r--r--tools/test/LcovMerger/javatests/com/google/devtools/lcovmerger/MainTest.java4
4 files changed, 58 insertions, 10 deletions
diff --git a/tools/test/BUILD b/tools/test/BUILD
index 3f7d28b72a..4a4e56b284 100644
--- a/tools/test/BUILD
+++ b/tools/test/BUILD
@@ -24,7 +24,7 @@ filegroup(
filegroup(
name = "coverage_report_generator",
- srcs = ["//tools/coverage:coverage_report_generator"],
+ srcs = ["@bazel_tools//tools/test/LcovMerger/java/com/google/devtools/lcovmerger:Main"],
)
filegroup(
diff --git a/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/BUILD.tools b/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/BUILD.tools
index 37cf8e4657..29a60f0fef 100644
--- a/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/BUILD.tools
+++ b/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/BUILD.tools
@@ -7,6 +7,7 @@ java_import(
java_binary(
name = "Main",
+ create_executable = 1,
main_class = "com.google.devtools.lcovmerger.Main",
runtime_deps = [":all_lcov_merger_lib"],
)
diff --git a/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/Main.java b/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/Main.java
index 5bac98e80d..2984d7b274 100644
--- a/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/Main.java
+++ b/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/Main.java
@@ -15,12 +15,15 @@
package com.google.devtools.lcovmerger;
import static com.google.devtools.lcovmerger.LcovConstants.TRACEFILE_EXTENSION;
+import static java.nio.charset.StandardCharsets.UTF_8;
import com.google.common.annotations.VisibleForTesting;
+import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.InputStreamReader;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -48,14 +51,23 @@ public class Main {
System.exit(1);
}
- List<File> lcovTracefiles = getLcovTracefiles(flags.get("coverage_dir"));
+ List<File> lcovTracefiles = new ArrayList<>();
+ if (flags.containsKey("coverage_dir")) {
+ logger.log(Level.SEVERE, "Retrieving tracefiles from coverage_dir.");
+ lcovTracefiles = getLcovTracefilesFromDir(flags.get("coverage_dir"));
+ } else if (flags.containsKey("reports_file")) {
+ logger.log(Level.SEVERE, "Retrieving tracefiles from reports_file.");
+ lcovTracefiles = getLcovTracefilesFromFile(flags.get("reports_file"));
+ }
if (lcovTracefiles.isEmpty()) {
logger.log(Level.SEVERE, "No lcov file found.");
System.exit(1);
}
+ logger.log(Level.SEVERE, "Found " + lcovTracefiles.size() + " tracefiles.");
Coverage coverage = new Coverage();
for (File tracefile : lcovTracefiles) {
try {
+ logger.log(Level.SEVERE, "Parsing tracefile " + tracefile.toString());
List<SourceFileCoverage> sourceFilesCoverage =
LcovParser.parse(new FileInputStream(tracefile));
for (SourceFileCoverage sourceFileCoverage : sourceFilesCoverage) {
@@ -72,7 +84,8 @@ public class Main {
File coverageFile = new File(outputFile);
LcovPrinter.print(new FileOutputStream(coverageFile), coverage);
} catch (IOException e) {
- logger.log(Level.SEVERE, "Could not write to output file " + outputFile);
+ logger.log(Level.SEVERE,
+ "Could not write to output file " + outputFile + " due to " + e.getMessage());
exitStatus = 1;
}
System.exit(exitStatus);
@@ -83,19 +96,37 @@ public class Main {
* directory.
*/
@VisibleForTesting
- static List<File> getLcovTracefiles(String coverageDir) {
+ static List<File> getLcovTracefilesFromDir(String coverageDir) {
List<File> datFiles = new ArrayList<>();
try (Stream<Path> stream = Files.walk(Paths.get(coverageDir))) {
datFiles = stream.filter(p -> p.toString().endsWith(TRACEFILE_EXTENSION))
.map(path -> path.toFile())
.collect(Collectors.toList());
} catch (IOException ex) {
- logger.log(Level.SEVERE, "error reading folder " + coverageDir + ": " + ex.getMessage());
+ logger.log(Level.SEVERE, "Error reading folder " + coverageDir + ": " + ex.getMessage());
}
return datFiles;
}
+ static List<File> getLcovTracefilesFromFile(String reportsFile) {
+ List<File> datFiles = new ArrayList<>();
+ try (FileInputStream inputStream = new FileInputStream(reportsFile)) {
+ InputStreamReader inputStreamReader = new InputStreamReader(inputStream, UTF_8);
+ BufferedReader reader = new BufferedReader(inputStreamReader);
+ for (String tracefile = reader.readLine(); tracefile != null; tracefile = reader.readLine()) {
+ // TODO(elenairina): baseline coverage contains some file names that need to be modified
+ if (!tracefile.endsWith("baseline_coverage.dat")) {
+ datFiles.add(new File(tracefile));
+ }
+ }
+
+ } catch (IOException e) {
+ logger.log(Level.SEVERE, "Error reading file " + reportsFile + ": " + e.getMessage());
+ }
+ return datFiles;
+ }
+
/**
* Parse flags in the form of "--coverage_dir=... -output_file=..."
*/
@@ -114,12 +145,28 @@ public class Main {
}
// Validate flags
- if (!flags.containsKey("coverage_dir")) {
- throw new IllegalArgumentException("coverage_dir was not specified");
+ for (String flag : flags.keySet()) {
+ switch (flag) {
+ case "coverage_dir":
+ case "reports_file":
+ case "output_file":
+ continue;
+ default:
+ throw new IllegalArgumentException("Unknown flag --" + flag);
+ }
+ }
+
+ if (!flags.containsKey("coverage_dir") && !flags.containsKey("reports_file")) {
+ throw new IllegalArgumentException(
+ "At least one of --coverage_dir or --reports_file should be specified.");
+ }
+ if (flags.containsKey("coverage_dir") && flags.containsKey("reports_file")) {
+ throw new IllegalArgumentException(
+ "Only one of --coverage_dir or --reports_file must be specified.");
}
if (!flags.containsKey("output_file")) {
// Different from blaze, this should be mandatory
- throw new IllegalArgumentException("output_file was not specified");
+ throw new IllegalArgumentException("--output_file was not specified");
}
return flags;
diff --git a/tools/test/LcovMerger/javatests/com/google/devtools/lcovmerger/MainTest.java b/tools/test/LcovMerger/javatests/com/google/devtools/lcovmerger/MainTest.java
index 07be4215e5..a6b99fb12e 100644
--- a/tools/test/LcovMerger/javatests/com/google/devtools/lcovmerger/MainTest.java
+++ b/tools/test/LcovMerger/javatests/com/google/devtools/lcovmerger/MainTest.java
@@ -41,7 +41,7 @@ public class MainTest {
@Test
public void testMainEmptyCoverageDir() {
- assertThat(Main.getLcovTracefiles(coverageDir.toAbsolutePath().toString())).isEmpty();
+ assertThat(Main.getLcovTracefilesFromDir(coverageDir.toAbsolutePath().toString())).isEmpty();
}
@Test
@@ -52,7 +52,7 @@ public class MainTest {
Files.createTempFile(ccCoverageDir, "tracefile1", ".dat");
Files.createTempFile(javaCoverageDir, "tracefile2", ".dat");
- List<File> tracefiles = Main.getLcovTracefiles(coverageDir.toAbsolutePath().toString());
+ List<File> tracefiles = Main.getLcovTracefilesFromDir(coverageDir.toAbsolutePath().toString());
assertThat(tracefiles).hasSize(2);
}
}