471 def run(self, test: WorkflowTest) -> bool:
472 self.logger.info("-----------------------------------------------------")
473 self.logger.info(f"Running {test.ID} {self.name} Check")
474
475 result = True
476 for step in test.steps:
477 log_name = f"log.{step}"
478 reference_log = test.reference_path / log_name
479 validation_log = test.validation_path / log_name
480
481 reference_value = 0
482 with reference_log.open() as file:
483 found = False
484 for line in file:
485 if self.quantity in line:
486 reference_value = float(line.split()[self.field])
487 found = True
488 break
489 if not found:
490 self.logger.
error(f
"No data available in {reference_log}. Job failed.")
491 return False
492
493 validation_value = 0
494 with validation_log.open() as file:
495 found = False
496 for line in file:
497 if self.quantity in line:
498 validation_value = float(line.split()[self.field])
499 found = True
500 break
501 if not found:
502 self.logger.
error(f
"No data available in {validation_log}. Job failed.")
503 return False
504
505 if reference_value != 0:
506 factor = validation_value / reference_value
507
508
509
510 if factor > 1. + self.threshold:
511 self.logger.
error(f
"{self.quantity} in the {step} step with(out) your change is {validation_value} ({reference_value}) {self.unit}")
512 self.logger.
error(f
"Your change changes {self.quantity} by a factor {factor}")
513 self.logger.
error(
"Is this an expected outcome of your change(s)?")
514 result = False
515 self.logger.
error(f
"{step}: {self.name}")
516 self.logger.
error(f
"ref {reference_value} {self.unit}")
517 self.logger.
error(f
"val {validation_value} {self.unit}")
518 if factor < 1. - self.threshold:
519 self.logger.warning(f"{self.quantity} in the {step} step with(out) your change is {validation_value} ({reference_value}) {self.unit}")
520 self.logger.warning(f"Your change changes {self.quantity} by a factor {factor}")
521 self.logger.warning("Is this an expected outcome of your change(s)?")
522 result = True
523 self.logger.warning(f"{step}: {self.name}")
524 self.logger.warning(f"ref {reference_value} {self.unit}")
525 self.logger.warning(f"val {validation_value} {self.unit}")
526
527 if result:
528 self.logger.info("Passed!\n")
529 else :
530 self.logger.
error(
"Failed!\n")
531
532 return result
533
534
int run(int argc, char *argv[])