diff --git a/flow/test/test_genReport.py b/flow/test/test_genReport.py index b7707c6c66..d154b55ff9 100644 --- a/flow/test/test_genReport.py +++ b/flow/test/test_genReport.py @@ -156,6 +156,60 @@ def test_dashboard_verdict_reaches_the_summary(self): self.assertIn("limit -8.0", summary) self.assertIn("https://dashboard.example/builds/7", summary) + def test_metrics_generation_errors_fail_a_finished_flow(self): + self.write_file("logs/nangate45/gcd/base/6_report.log", "Finished\n") + self.write_file( + "reports/nangate45/gcd/base/metadata-generate.log", + "[ERROR] Failed to open file: missing.rpt\n", + ) + self.write_file( + "reports/nangate45/gcd/base/metadata-check.log", + "[INFO] QoR check: PASS\n", + ) + + summary = self.summary() + + self.assertIn("Failing designs", summary) + self.assertIn("nangate45 gcd (base)\n Flow reached last stage.", summary) + self.assertIn("Found 1 errors in the metrics logs.", summary) + self.assertIn("[ERROR] Failed to open file: missing.rpt", summary) + self.assertNotIn("Passing designs", summary) + + def test_metrics_generation_warnings_do_not_fail_a_finished_flow(self): + self.write_file("logs/nangate45/gcd/base/6_report.log", "Finished\n") + self.write_file( + "reports/nangate45/gcd/base/metadata-generate.log", + "[WARNING] Optional metric not found. Will use N/A.\n", + ) + self.write_file( + "reports/nangate45/gcd/base/metadata-check.log", + "[INFO] QoR check: PASS\n", + ) + + summary = self.summary() + + self.assertIn("Number of designs: 1", summary) + self.assertNotIn("Failing designs", summary) + + def test_successful_metrics_regeneration_clears_the_failure(self): + self.write_file("logs/nangate45/gcd/base/6_report.log", "Finished\n") + self.write_file( + "reports/nangate45/gcd/base/metadata-generate.log", + "[ERROR] Failed to open file: missing.rpt\n", + ) + self.write_file( + "reports/nangate45/gcd/base/metadata-check.log", + "[INFO] QoR check: PASS\n", + ) + self.assertIn("Failing designs", self.summary()) + + self.write_file("reports/nangate45/gcd/base/metadata-generate.log", "") + summary = self.summary() + + self.assertIn("Number of designs: 1", summary) + self.assertNotIn("Failing designs", summary) + self.assertNotIn("errors in the metrics logs", summary) + class TestGenReport(unittest.TestCase): def test_incomplete_flow_reports_that_it_did_not_reach_last_stage(self): diff --git a/flow/util/genReport.py b/flow/util/genReport.py index 52ec6115dd..f85d5b18f6 100755 --- a/flow/util/genReport.py +++ b/flow/util/genReport.py @@ -343,7 +343,12 @@ def write_summary(): if d["finished"]: print(f"Failed to open {DRC_FILENAME}.") - if d["log_errors"] or d["metrics_errors"] or d["calibre_errors"]: + if ( + d["log_errors"] + or d["metrics_logs_errors"] + or d["metrics_errors"] + or d["calibre_errors"] + ): d["status"] = STATUS_RED else: if not d["finished"]: