306 def run(self, test: WorkflowTest) -> bool:
307 self.logger.
info(
"---------------------------------------------------------------------------------------")
308 self.logger.
info(f
"Running {test.ID} AOD content check")
310 file_name =
"myAOD.pool.root"
311 output_name = f
"{test.ID}_AOD_content.txt"
313 validation_file = test.validation_path / file_name
314 validation_output = test.validation_path / output_name
315 validation_command = f
"acmd.py chk-file {validation_file} | awk '/---/{{flag=1;next}}/===/{{flag=0}}flag' | awk '{{print $10}}' | LC_ALL=C sort | uniq > {validation_output}"
317 output_val, error_val = subprocess.Popen([
"/bin/bash",
"-c", validation_command], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
318 output_val, error_val = output_val.decode(
"utf-8"), error_val.decode(
"utf-8")
320 self.logger.
error(f
"Something went wrong with retrieving the content for test {test.ID}:")
321 self.logger.
error(error_val)
324 if self.setup.validation_only:
326 reference_path = test.validation_path
327 reference_output_name = f
"{test.ID}_AOD_content.ref"
328 reference_output = reference_path / reference_output_name
329 subprocess.Popen([
"/bin/bash",
"-c", f
"cd {reference_path}; get_files -remove -data {reference_output_name}"], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
330 if not reference_output.exists():
331 self.logger.
info(f
"No reference file '{reference_output_name}' to compare the content with.")
334 reference_path = test.reference_path
335 reference_output = reference_path / output_name
336 reference_file = reference_path / file_name
338 reference_command = f
"acmd.py chk-file {reference_file} | awk '/---/{{flag=1;next}}/===/{{flag=0}}flag' | awk '{{print $10}}' | LC_ALL=C sort | uniq > {reference_output}"
339 subprocess.Popen([
"/bin/bash",
"-c", reference_command], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
343 if test.type == WorkflowType.MCReco
or test.type == WorkflowType.MCPileUpReco:
344 extra_diff_args =
"-I '^HLT' -I '^LVL1' -I '^L1'"
347 diff_output, diff_error = subprocess.Popen([
"/bin/bash",
"-c", f
"diff {extra_diff_args} {reference_output} {validation_output}"], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
348 diff_output, diff_error = diff_output.decode(
"utf-8"), diff_error.decode(
"utf-8")
351 if not diff_output
and not diff_error:
352 self.logger.
info(
"Passed!\n")
356 if self.setup.disable_release_setup:
357 self.logger.
print(f
"ATLAS-CI-ADD-LABEL: {test.run.value}-{test.type.value}-output-changed")
358 self.logger.
print(
"")
360 self.logger.
error(f
"Your change modifies the output in test {test.ID}.")
361 self.logger.
error(
"Please make sure this has been discussed in the correct meeting (RIG or Simulation) meeting and approved by the relevant experts.")
362 if self.setup.validation_only:
363 self.logger.
error(f
"The output '{output_name}' (>) differs from the reference '{reference_output_name}' (<):")
365 self.logger.
error(f
"The output '{validation_output}' (>) differs from the reference '{reference_output}' (<):")
367 self.logger.
print(
"")
368 self.logger.
print(diff_output)
370 self.logger.
print(diff_error)
371 self.logger.
info(
"-----------------------------------------------------\n")