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