Belle II Software release-09-00-00
test_framework.py
1# disable doxygen check for this file
2# @cond
3
4
11import basf2 as b2
12import os
13import shutil
14import glob
15
16from ROOT.Belle2 import TestCalibrationAlgorithm as TestAlgo
17
18from caf.framework import Calibration, CAF
19
20import unittest
21from unittest import TestCase
22from pathlib import Path
23
24# show only Errors as we'll be setting off a lot of ugly deliberate warnings
25b2.set_log_level(b2.LogLevel.ERROR)
26
27
28class TestCalibrationClass_Configure(TestCase):
29 """
30 UnitTest for configuration of Calibration class
31 """
32
33 def setUp(self):
34 """
35 Create useful objects for each test
36 """
37
38 self.alg1 = TestAlgo()
39
40 self.alg2 = TestAlgo()
41
42 self.col1 = b2.register_module('CaTest')
43
44 self.example_file1 = Path("example1.root")
45 self.example_file2 = Path("example2.root")
46 self.example_file1.touch()
47 self.example_file2.touch()
48
49 def test_1(self):
50 """
51 Test whether or not calibration is valid with incorrect setup.
52 """
53 cal = Calibration('TestCalibrationClass_Configure_test1')
54 self.assertFalse(cal.is_valid())
55
56 def test_2(self):
57 """
58 Test whether or not calibration is valid with incorrect setup.
59 """
60 cal = Calibration('TestCalibrationClass_Configure_test2')
61 cal.collector = 'CaTest'
62 self.assertFalse(cal.is_valid())
63
64 def test_3(self):
65 """
66 Test whether or not calibration is valid with incorrect setup.
67 """
68 cal = Calibration('TestCalibrationClass_Configure_test3')
69 cal.collector = self.col1
70 self.assertFalse(cal.is_valid())
71
72 def test_4(self):
73 """
74 Test whether or not calibration is valid with incorrect setup.
75 """
76 cal = Calibration('TestCalibrationClass_Configure_test4')
77 cal.collector = self.col1
78 cal.algorithms = [self.alg1, self.alg2]
79 self.assertFalse(cal.is_valid())
80
81 def test_5(self):
82 """
83 Test whether or not calibration is valid with correct setup.
84 """
85 cal = Calibration('TestCalibrationClass_Configure_test5')
86 cal.collector = self.col1
87 cal.algorithms = [self.alg1, self.alg2]
88 cal.input_files = self.example_file1.as_posix()
89 self.assertTrue(cal.is_valid())
90
91 def test_6(self):
92 """
93 Test whether or not calibration is valid with alternative correct setup.
94 """
95 cal = Calibration('TestCalibrationClass_Configure_test6')
96 cal.collector = self.col1
97 cal.algorithms = [self.alg1, self.alg2]
98 cal.input_files = [self.example_file1.as_posix(), self.example_file2.as_posix()]
99 self.assertTrue(cal.is_valid())
100
101 def tearDown(self):
102 self.example_file1.unlink()
103 self.example_file2.unlink()
104
105
106class TestCalibrationClass_Args(TestCase):
107 """
108 UnitTest for validity of Calibration class when given arguments of different types """
109
110 def setUp(self):
111 """
112 Create useful objects for each test
113 """
114
115 self.alg1 = TestAlgo()
116
117 self.alg2 = TestAlgo()
118
119 self.col1 = b2.register_module('CaTest')
120
121 self.name = 'TestCalibration'
122
123 self.example_file1 = Path("example1.root")
124 self.example_file2 = Path("example2.root")
125 self.example_file1.touch()
126 self.example_file2.touch()
127
128 def test_1(self):
129 """
130 Test whether or not calibration is valid with correct setup and if name is stored correctly
131 """
132 cal = Calibration(
133 self.name,
134 collector=self.col1,
135 algorithms=[
136 self.alg1,
137 self.alg2],
138 input_files=self.example_file2.as_posix())
139 self.assertTrue(cal.is_valid() and cal.name == self.name)
140
141 def test_2(self):
142 """
143 Test whether or not calibration is valid with alternative correct setup and if name is stored correctly
144 """
145 cal = Calibration(self.name, 'CaTest', self.alg1, input_files=self.example_file1.as_posix())
146 self.assertTrue(cal.is_valid() and cal.name == self.name)
147
148 def test_3(self):
149 """
150 Test that the default options are correctly applied to a calibration
151 """
152 defaults = {"max_iterations": 4}
153 cal1 = Calibration(self.name, collector=self.col1, algorithms=[self.alg1], input_files=self.example_file1.as_posix())
154 cal1._apply_calibration_defaults(defaults)
155 cal2 = Calibration(self.name, collector=self.col1, algorithms=[self.alg1], input_files=self.example_file2.as_posix())
156 self.assertTrue(cal1.max_iterations == 4 and not cal2.max_iterations)
157
158 def tearDown(self):
159 self.example_file1.unlink()
160 self.example_file2.unlink()
161
162
163class TestCAF(TestCase):
164 """
165 UnitTest for configuration and simple running of CAF
166 """
167
168 def setUp(self):
169 """
170 Create useful objects for each test and the teardown
171 """
172
173 self.name1 = 'TestCalibration1'
174
175 self.name2 = 'TestCalibration2'
176
177 self.name3 = 'TestCalibration3'
178 alg = TestAlgo()
179 col = b2.register_module('CaTest')
180
181 self.example_file1 = Path("example1.root")
182 self.example_file1.touch()
183
184 self.cal1 = Calibration(self.name1, col, alg, self.example_file1.as_posix())
185
186 self.cal2 = Calibration(self.name2, col, alg, self.example_file1.as_posix())
187
188 self.cal3 = Calibration(self.name3, col, alg, self.example_file1.as_posix())
189
190 def test_add_calibration(self):
191 """
192 Test that add_calibration function results in correct output
193 """
194 fw = CAF()
195 fw.add_calibration(self.cal1)
196 fw.add_calibration(self.cal2)
197 self.assertTrue(fw.calibrations[self.name1].name == self.name1 and fw.calibrations[self.name2].name == self.name2)
198
199 def test_add_dependency_on_itself(self):
200 """
201 Test that add_dependency function cannot add itself
202 """
203 self.cal1.depends_on(self.cal1)
204 self.assertFalse(self.cal1.dependencies)
205
206 def test_make_output_dir(self):
207 """
208 Test that output_dir directory is created correctly
209 """
210 fw = CAF()
211 fw.output_dir = 'testCAF_outputdir'
212 fw._make_output_dir()
213 self.assertTrue(os.path.isdir('testCAF_outputdir'))
214
215 def test_config_output_dir(self):
216 """
217 Test that config is correctly setting the default output path.
218 """
219 fw = CAF()
220 self.assertTrue(fw.output_dir == 'calibration_results')
221
222 def tearDown(self):
223 """
224 Removes files that were created during these tests
225 """
226 self.example_file1.unlink()
227 dirs = glob.glob('*testCAF_outputdir')
228 for directory in dirs:
229 shutil.rmtree(directory)
230
231
232def main():
233 unittest.main()
234
235
236if __name__ == '__main__':
237 main()
238
239# @endcond
240
Definition: main.py:1