Belle II Software  light-2303-iriomote
tutorials_B2A9XX.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 
11 
12 import os
13 import sys
14 import subprocess
15 import unittest
16 import glob
17 from basf2 import find_file
18 from b2test_utils import clean_working_directory, configure_logging_for_tests
19 from b2test_utils_analysis import scanTTree
20 
21 
22 class TutorialsTest(unittest.TestCase):
23  """Test to run all B2A9XX tutorials. Will fail if no tutorial directory is found."""
24 
25 
26  broken_tutorials = []
27 
28  do_not_overwrite = ['B2A911-CreateTrainData.py']
29 
30  @unittest.skipIf(not os.getenv('BELLE2_EXAMPLES_DATA_DIR'),
31  "$BELLE2_EXAMPLES_DATA_DIR not found.")
32  @unittest.skipIf(not os.getenv('BELLE2_VALIDATION_DATA_DIR'),
33  "$BELLE2_VALIDATION_DATA_DIR not found.")
34  def test_tutorials(self):
35  """
36  Test supported tutorials.
37  """
38  configure_logging_for_tests()
39  all_tutorials = sorted(glob.glob(find_file('analysis/examples/tutorials/') + "/B2A9*.py"))
40  for tutorial in all_tutorials:
41  filename = os.path.basename(tutorial)
42  if filename not in self.broken_tutorialsbroken_tutorials:
43  with self.subTest(msg=filename):
44  outputfilename = filename.replace('.py', '.root')
45  if filename not in self.do_not_overwritedo_not_overwrite:
46  result = subprocess.run(['basf2', '-n100', tutorial, '-o', outputfilename],
47  stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
48  else:
49  result = subprocess.run(['basf2', '-n100', tutorial],
50  stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
51 
52  if result.returncode != 0:
53  # failure running tutorial so let's print the output
54  # on stderr so it's not split from output of unittest
55  # done like this since we don't want to decode/encode utf8
56  sys.stdout.buffer.write(result.stdout)
57  self.assertEqual(result.returncode, 0)
58 
59  if os.path.exists(outputfilename):
60  scanTTree(outputfilename)
61 
62 
63 if __name__ == '__main__':
64  with clean_working_directory():
65  unittest.main()
list do_not_overwrite
list of the tutorials whose output file name cannot be overwritten
list broken_tutorials
list of the broken tutorials (to be removed when they are individually fixed)