383 def run(self, test: WorkflowTest) -> bool:
384 self.logger.
info(
"---------------------------------------------------------------------------------------")
385 self.logger.
info(f
"Running {test.ID} AOD digest")
387 file_name =
"myAOD.pool.root"
388 output_name = f
"{test.ID}_AOD_digest.txt"
390 validation_file = test.validation_path / file_name
391 validation_output = test.validation_path / output_name
392 validation_log_file = test.validation_path / f
"AODdigest-{test.ID}.log"
393 validation_command = f
"xAODDigest.py {validation_file} {validation_output} > {validation_log_file} 2>&1"
395 output_val, error_val = subprocess.Popen([
"/bin/bash",
"-c", validation_command], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
396 output_val, error_val = output_val.decode(
"utf-8"), error_val.decode(
"utf-8")
398 self.logger.
error(f
"Something went wrong with the digest calculation for test {test.ID}:")
399 self.logger.
error(error_val)
402 if self.setup.validation_only:
404 reference_path = test.validation_path
405 reference_output_name = f
"{test.ID}_AOD_digest.ref"
406 reference_output = reference_path / reference_output_name
407 subprocess.Popen([
"/bin/bash",
"-c", f
"cd {reference_path}; get_files -remove -data {reference_output_name}"], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
408 if not reference_output.exists():
409 self.logger.
info(f
"No reference file '{reference_output_name}' to compare the digest with. Printing the full digest:")
410 with validation_output.open()
as f:
412 self.logger.
print(f
" {line.strip()}")
415 reference_path = test.reference_path
416 reference_output = reference_path / output_name
417 reference_file = reference_path / file_name
418 reference_log_file = test.reference_path / f
"AODdigest-{test.ID}.log"
420 reference_command = f
"xAODDigest.py {reference_file} {reference_output} > {reference_log_file} 2>&1"
421 subprocess.Popen([
"/bin/bash",
"-c", reference_command], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
424 diff_output, diff_error = subprocess.Popen([
"/bin/bash",
"-c", f
"diff {reference_output} {validation_output}"], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
425 diff_output, diff_error = diff_output.decode(
"utf-8"), diff_error.decode(
"utf-8")
428 if not diff_output
and not diff_error:
429 self.logger.
info(
"Passed!\n")
433 if self.setup.disable_release_setup:
434 self.logger.
print(f
"ATLAS-CI-ADD-LABEL: {test.run.value}-{test.type.value}-output-changed")
435 self.logger.
print(
"")
437 self.logger.
error(f
"Your change breaks the digest in test {test.ID}.")
438 self.logger.
error(
"Please make sure this has been discussed in the correct meeting (RIG or Simulation) meeting and approved by the relevant experts.")
439 if self.setup.validation_only:
440 self.logger.
error(f
"The output '{output_name}' (>) differs from the reference '{reference_output_name}' (<):")
442 self.logger.
error(f
"The output '{validation_output}' (>) differs from the reference '{reference_output}' (<):")
444 with reference_output.open()
as file:
445 self.logger.
print(file.readline())
446 self.logger.
print(diff_output)
448 self.logger.
print(diff_error)
449 self.logger.
info(
"-----------------------------------------------------\n")