Repository: sqoop Updated Branches: refs/heads/sqoop2 7e637244a -> 7b1d52f54
SQOOP-2430: Sqoop2: Precommit: Add test coverage reports (Jarek Jarcec Cecho via Gwen Shapira) Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/7b1d52f5 Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/7b1d52f5 Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/7b1d52f5 Branch: refs/heads/sqoop2 Commit: 7b1d52f5440873a7d9c4c0286838a4645c518581 Parents: 7e63724 Author: Gwen Shapira <[email protected]> Authored: Mon Jul 27 14:31:01 2015 -0700 Committer: Gwen Shapira <[email protected]> Committed: Mon Jul 27 14:31:01 2015 -0700 ---------------------------------------------------------------------- dev-support/test-patch.py | 50 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/sqoop/blob/7b1d52f5/dev-support/test-patch.py ---------------------------------------------------------------------- diff --git a/dev-support/test-patch.py b/dev-support/test-patch.py index 50ce78c..e376103 100755 --- a/dev-support/test-patch.py +++ b/dev-support/test-patch.py @@ -261,13 +261,14 @@ def mvn_install(result, output_dir): else: result.fatal("failed to build with patch (exit code %d, %s)" % (rc, jenkins_file_link_for_jira("report", "install.txt"))) -def find_all_files(top): +def find_all_files(top, fileRegExp=".*", dirRegExp=".*"): for root, dirs, files in os.walk(top): for f in files: + if re.search(fileRegExp, f) and re.search(dirRegExp, root): yield os.path.join(root, f) def mvn_test(result, output_dir): - run_mvn_test("test", "unit", result, output_dir) + run_mvn_test("cobertura:cobertura", "unit", result, output_dir) def mvn_integration(result, output_dir): run_mvn_test("integration-test -pl test", "integration", result, output_dir) @@ -334,6 +335,46 @@ class ResultItem(object): self.message = message self.bullets = bullets +def cobertura_get_percentage(fd): + for line in fd: + if "All Packages" in line: + matcher = re.search(".*>([0-9]+)%.*>([0-9]+)%.*", line) + if matcher: + fd.close() + return (int(matcher.groups()[0]), int(matcher.groups()[1])) + fd.close() + return (-1, -1) + +def cobertura_compare(result, output_dir, compare_url): + # Detailed report file + report = open("%s/%s" % (output_dir, "cobertura_report.txt"), "w+") + report.write("Cobertura compare report against %s\n\n" % compare_url) + # List of all modules for which the test coverage is worst then the compare base + lowers = [] + # For each report that exists locally + for path in list(find_all_files(".", "^frame-summary\.html$")): + package = path.replace("/target/site/cobertura/frame-summary.html", "").replace("./", "") + + (localLine, localBranch) = cobertura_get_percentage(open(path)) + (compareLine, compareBranch) = cobertura_get_percentage(urllib2.urlopen("%s%s" % (compare_url, path))) + + diffLine = localLine - compareLine + diffBranch = localBranch - compareBranch + + report.write("Package %s: Line coverage %d (%d -> %d), Branch coverage %d (%d -> %d)\n" % (package, diffLine, compareLine, localLine, diffBranch, compareBranch, localBranch)) + + if diffLine < 0 or diffBranch < 0: + lowers.append("Package {{%s}} has lower test coverage: Line coverage decreased by %d%% (from %d%% to %d%%), Branch coverage decreased by %d%% (from %d%% to %d%%)" % (package, abs(diffLine), compareLine, localLine, abs(diffBranch), compareBranch, localBranch)) + + # Add to the JIRA summary report + if len(lowers) == 0: + result.success("Test coverage did not decreased (%s)" % jenkins_file_link_for_jira("report", "cobertura_report.txt")) + else: + result.warning("Test coverage has decreased (%s)" % jenkins_file_link_for_jira("report", "cobertura_report.txt"), lowers) + + # Clean up + report.close() + class Result(object): def __init__(self): self._items = [] @@ -383,6 +424,8 @@ parser.add_option("--patch-command", dest="patch_cmd", default="git apply", help="Patch command such as `git apply' or `patch'", metavar="COMMAND") parser.add_option("-p", "--strip", dest="strip", default="1", help="Remove <n> leading slashes from diff paths", metavar="N") +parser.add_option("--cobertura", dest="cobertura", + help="HTTP URL with past cobertura results that we should compare") (options, args) = parser.parse_args() if not (options.defect or options.filename): @@ -490,6 +533,9 @@ mvn_install(result, output_dir) # Unit tests are conditional if run_tests: mvn_test(result, output_dir) + # And alternatively also run cobertura report + if options.cobertura: + cobertura_compare(result, output_dir, options.cobertura) else: result.info("Unit tests were skipped, please add --run-tests") # Integration tests are conditional
