diff options
author | elenairina <elenairina@google.com> | 2018-07-06 03:06:21 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-07-06 03:07:25 -0700 |
commit | 9438d1042df9e70570d245f6bd259acdfbb3455e (patch) | |
tree | 106816a832efd2a1c351966de94fe52277c70f32 /tools | |
parent | c4622ac9205d2f1b42dac8c598e83113d39e7f11 (diff) |
Create Bazel coverage report action.
Fixes #5246
RELNOTES: None.
PiperOrigin-RevId: 203453340
Diffstat (limited to 'tools')
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); } } |