Skip to content

Commit

Permalink
run.py: Introduce metadata files for results
Browse files Browse the repository at this point in the history
This commit introduces results metadata files for collecting by argus
scripts within scylla-pkg.

Task: scylladb/argus#289
  • Loading branch information
k0machi committed Sep 13, 2024
1 parent d0c3280 commit 695aef3
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 9 deletions.
16 changes: 9 additions & 7 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,21 @@ def main(cpp_driver_dir: str, scylla_install_dir: str, driver_type: str, version

for version in versions:
logging.info(f'=== {driver_type.upper()} CPP DRIVER VERSION {version} ===')
test_run = run.Run(cpp_driver_git=cpp_driver_dir,
scylla_install_dir=scylla_install_dir,
driver_type=driver_type,
driver_version=version,
scylla_version=scylla_version,
cql_cassandra_version=cql_cassandra_version)
try:
test_run = run.Run(cpp_driver_git=cpp_driver_dir,
scylla_install_dir=scylla_install_dir,
driver_type=driver_type,
driver_version=version,
scylla_version=scylla_version,
cql_cassandra_version=cql_cassandra_version)
results[version] = test_run.run()
except Exception:
logging.exception(f"{version} failed")
status = 1
exc_type, exc_value, exc_traceback = sys.exc_info()
results[version] = dict(exception=traceback.format_exception(exc_type, exc_value, exc_traceback))
failure_reason = traceback.format_exception(exc_type, exc_value, exc_traceback)
results[version] = dict(exception=failure_reason)
test_run.create_metadata_for_failure(reason="\n".join(failure_reason))

logging.info(f'=== {driver_type.upper()} CPP DRIVER MATRIX RESULTS ===')
for version, result in results.items():
Expand Down
26 changes: 24 additions & 2 deletions run.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import json
import re
import os
import yaml
Expand Down Expand Up @@ -41,6 +42,10 @@ def version_folder(self):
self._version_folder = Path(self.__version_folder(self.driver_type, self._driver_version))
return self._version_folder

@property
def metadata_file_name(self) -> str:
return f'metadata_{self.driver_type}-{self._driver_version}.json'

@staticmethod
def __version_folder(cpp_driver_type, target_tag):
target_version_folder = os.path.join(os.path.dirname(__file__), 'versions', cpp_driver_type)
Expand Down Expand Up @@ -129,6 +134,18 @@ def _publish_fake_result(self):
return TestResults(running_tests=0, ran_tests=0, failed=0, passed=0, returncode=0, error='error',
failed_tests=[])

def create_metadata_for_failure(self, reason: str) -> None:
log_path = Path(f"{self._cpp_driver_git}/log")
metadata_file = log_path / self.metadata_file_name
if not log_path.exists():
log_path.mkdir(exist_ok=True)
metadata = {
"driver_name": f"TEST-{self.driver_type}-{self._driver_version}",
"driver_type": "cpp",
"failure_reason": reason,
}
metadata_file.write_text(json.dumps(metadata))

def run(self) -> TestResults:
if not self._checkout_tag():
return self._publish_fake_result()
Expand All @@ -138,7 +155,12 @@ def run(self) -> TestResults:

if self.run_compile_after_patch:
self.compile_tests()

metadata_file = Path(f"{self._cpp_driver_git}/log") / self.metadata_file_name
metadata = {
"driver_name": f"TEST-{self.driver_type}-{self._driver_version}",
"driver_type": "cpp",
"junit_result": f"./TEST-{self.driver_type}-{self._driver_version}.xml",
}
# To filter out the test add "minus" before the list of ignored tests
# gtest_filter = "BasicsTests*"
gtest_filter = f"-{':'.join(self._testsList())}" if self._testsList() else '*'
Expand All @@ -164,7 +186,7 @@ def run(self) -> TestResults:
for line in process.stderr:
print(line, end='')
stderr += line

metadata_file.write_text(json.dumps(metadata))
return self.analyze_results(stdout, stderr, process.returncode)

def analyze_results(self, stdout: str, stderr: str, returncode: int) -> TestResults:
Expand Down

0 comments on commit 695aef3

Please sign in to comment.