Skip to content

Commit

Permalink
java: Report error as well as failure (MarkUsProject#401)
Browse files Browse the repository at this point in the history
  • Loading branch information
mishaschwartz committed Nov 2, 2022
1 parent a4c3f20 commit 7c1876d
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 5 deletions.
1 change: 1 addition & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
All notable changes to this project will be documented here.

## [v2.2.2]
- Fix a bug in the java tester where errors were not reported (#401)
- Add explicit namespaces to R test runner script so that test code will not interfere with result reporting (#407)

## [v2.2.1]
Expand Down
28 changes: 23 additions & 5 deletions server/autotest_server/testers/java/java_tester.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,25 @@ def _get_sources(self) -> Set:
scripts = ":".join(self.specs["test_data", "script_files"] + [sources])
return {path for path in self._parse_file_paths(scripts) if os.path.splitext(path)[1] == ".java"}

def _parse_failure_error(self, failure, error):
"""
Return a dictionary containing a status and message for either a failure, error, or both. If both
an error and failure are present, the message includes information for both.
"""
result = {}
if failure and error:
failure_message = self._parse_failure_error(failure, None)["message"]
error_message = self._parse_failure_error(None, error)["message"]
result["status"] = "error"
result["message"] = "\n\n".join([error_message, failure_message])
elif failure:
result["status"] = "failure"
result["message"] = f'{failure.attrib.get("type", "")}: {failure.attrib.get("message", "")}'
elif error:
result["status"] = "error"
result["message"] = f'{error.attrib.get("type", "")}: {error.attrib.get("message", "")}'
return result

def _parse_junitxml(self):
"""
Parse junit results and yield a hash containing result data for each testcase.
Expand All @@ -78,11 +97,10 @@ def _parse_junitxml(self):
result["name"] = "{}.{}".format(classname, testname)
result["time"] = float(testcase.attrib.get("time", 0))
failure = testcase.find("failure")
if failure is not None:
result["status"] = "failure"
failure_type = failure.attrib.get("type", "")
failure_message = failure.attrib.get("message", "")
result["message"] = f"{failure_type}: {failure_message}"
error = testcase.find("error")
fe_result = self._parse_failure_error(failure, error)
if fe_result:
result.update(fe_result)
else:
result["status"] = "success"
result["message"] = ""
Expand Down

0 comments on commit 7c1876d

Please sign in to comment.