3"""Unit tests for the DumpGeo ComponentAccumulator configuration."""
6from types
import SimpleNamespace
7from unittest.mock
import patch
9from AthenaConfiguration.AthConfigFlags
import AthConfigFlags
10from AthenaConfiguration.ComponentAccumulator
import ConfigurationError
12from DumpGeo.DumpGeoConfig
import (
14 configureDumpGeoInputFlags,
16 dumpGeoOutputFileName,
17 logZDCFailureReminder,
18 resolveDumpGeoGeometryTag,
19 validateDumpGeoOutputFile,
21from DumpGeo.DumpGeoConfigFlags
import createDumpGeoConfigFlags
25 """Characterization tests for DumpGeoCfg."""
28 def _flags(*, output_file="", filters=None, force_overwrite=False,
30 atlas_version="ATLAS-UNIT-TEST-00-00-00"):
31 flags = AthConfigFlags()
32 flags.addFlag(
"GeoModel.AtlasVersion", atlas_version)
33 createDumpGeoConfigFlags(flags)
34 flags.GeoModel.DumpGeo.OutputFileName = output_file
35 flags.GeoModel.DumpGeo.FilterDetManagers = filters
or []
36 flags.GeoModel.DumpGeo.ForceOverwrite = force_overwrite
37 flags.GeoModel.DumpGeo.ShowTreetopContent = show_treetops
42 with patch(
"DumpGeo.DumpGeoConfig.os.path.exists", return_value=
False):
43 accumulator = DumpGeoCfg(flags, **kwargs)
44 self.addCleanup(accumulator.wasMerged)
45 return accumulator.getPrimary()
48 flags = AthConfigFlags()
49 createDumpGeoConfigFlags(flags)
52 self.assertEqual(flags.GeoModel.DumpGeo.OutputFileName,
"")
53 self.assertEqual(flags.GeoModel.DumpGeo.FilterDetManagers, [])
54 self.assertFalse(flags.GeoModel.DumpGeo.ForceOverwrite)
55 self.assertFalse(flags.GeoModel.DumpGeo.ShowTreetopContent)
61 patch.object(AthConfigFlags,
"dump")
as dump,
63 "DumpGeo.DumpGeoConfig._logger.isEnabledFor",
67 accumulator = DumpGeoCfg(flags)
69 self.addCleanup(accumulator.wasMerged)
70 dump.assert_not_called()
76 patch.object(AthConfigFlags,
"dump")
as dump,
78 "DumpGeo.DumpGeoConfig._logger.isEnabledFor",
82 accumulator = DumpGeoCfg(flags)
84 self.addCleanup(accumulator.wasMerged)
85 dump.assert_called_once_with(
"GeoModel.DumpGeo")
91 algorithm.OutSQLiteFileName,
92 "geometry-ATLAS-UNIT-TEST-00-00-00.db",
97 self.
_flags(filters=[
"Pixel",
"Tile"])
101 algorithm.OutSQLiteFileName,
102 "geometry-ATLAS-UNIT-TEST-00-00-00-Pixel-Tile.db",
104 self.assertEqual(algorithm.UserFilterDetManager, [
"Pixel",
"Tile"])
108 self.
_flags(output_file=
"custom-geometry.db")
111 self.assertEqual(algorithm.OutSQLiteFileName,
"custom-geometry.db")
116 self.assertTrue(algorithm.ShowTreetopContent)
120 self.
_flags(show_treetops=
True),
121 ShowTreetopContent=
False,
122 OutSQLiteFileName=
"from-kwargs.db",
125 self.assertFalse(algorithm.ShowTreetopContent)
126 self.assertEqual(algorithm.OutSQLiteFileName,
"from-kwargs.db")
129 flags = self.
_flags(output_file=
"from-flags.db")
132 "DumpGeo.DumpGeoConfig.os.path.exists",
133 side_effect=
lambda path: path ==
"from-kwargs.db",
135 with self.assertRaisesRegex(ConfigurationError,
"from-kwargs.db"):
136 DumpGeoCfg(flags, OutSQLiteFileName=
"from-kwargs.db")
140 output_file=
"from-flags.db",
141 force_overwrite=
True,
146 "DumpGeo.DumpGeoConfig.os.path.exists",
147 side_effect=
lambda path: path ==
"from-kwargs.db",
149 patch(
"DumpGeo.DumpGeoConfig.os.remove")
as remove,
151 accumulator = DumpGeoCfg(
153 OutSQLiteFileName=
"from-kwargs.db",
156 self.addCleanup(accumulator.wasMerged)
157 algorithm = accumulator.getPrimary()
158 self.assertEqual(algorithm.OutSQLiteFileName,
"from-kwargs.db")
159 self.assertTrue(algorithm.ForceOverwrite)
160 remove.assert_not_called()
164 output_file=
"existing.db",
165 force_overwrite=
True,
169 patch(
"DumpGeo.DumpGeoConfig.os.path.exists", return_value=
True),
170 patch(
"DumpGeo.DumpGeoConfig.os.remove")
as remove,
172 accumulator = DumpGeoCfg(flags)
174 self.addCleanup(accumulator.wasMerged)
175 self.assertTrue(accumulator.getPrimary().ForceOverwrite)
176 remove.assert_not_called()
180 output_file=
"existing.db",
181 force_overwrite=
False,
185 patch(
"DumpGeo.DumpGeoConfig.os.path.exists", return_value=
True),
186 patch(
"DumpGeo.DumpGeoConfig.os.remove")
as remove,
188 accumulator = DumpGeoCfg(flags, ForceOverwrite=
True)
190 self.addCleanup(accumulator.wasMerged)
191 self.assertTrue(accumulator.getPrimary().ForceOverwrite)
192 remove.assert_not_called()
195 flags = self.
_flags(output_file=
"existing.db")
198 patch(
"DumpGeo.DumpGeoConfig.os.path.exists", return_value=
True),
199 patch(
"DumpGeo.DumpGeoConfig.os.remove")
as remove,
201 with self.assertRaisesRegex(ConfigurationError,
"existing.db"):
204 remove.assert_not_called()
208 patch(
"DumpGeo.DumpGeoConfig.os.path.exists", return_value=
True),
209 patch(
"DumpGeo.DumpGeoConfig.os.remove")
as remove,
211 validateDumpGeoOutputFile(
"existing.db", force_overwrite=
True)
213 remove.assert_not_called()
216 flags = self.
_flags(filters=[
"Pixel",
"Tile"])
219 dumpGeoOutputFileName(flags),
220 "geometry-ATLAS-UNIT-TEST-00-00-00-Pixel-Tile.db",
225 resolveDumpGeoGeometryTag(
235 resolveDumpGeoGeometryTag(
245 resolveDumpGeoGeometryTag(
None,
None,
"FALLBACK-TAG"),
250 """Only actual filenames enable input metadata configuration."""
251 self.assertFalse(dumpGeoHasInputFiles([]))
253 dumpGeoHasInputFiles([
"_ATHENA_GENERIC_INPUTFILE_NAME_"])
255 self.assertTrue(dumpGeoHasInputFiles([
"events.pool.root"]))
258 flags = SimpleNamespace(
259 Input=SimpleNamespace(
260 Files=[
"_ATHENA_GENERIC_INPUTFILE_NAME_"]
262 IOVDb=SimpleNamespace(),
265 self.assertTrue(configureDumpGeoInputFlags(flags))
266 self.assertEqual(flags.Input.Files, [])
267 self.assertEqual(flags.Input.RunNumbers, [330000])
268 self.assertEqual(flags.Input.TimeStamps, [1])
269 self.assertEqual(flags.Input.TypedCollections, [])
270 self.assertTrue(flags.Input.isMC)
273 flags = SimpleNamespace(
274 Input=SimpleNamespace(Files=[
"events.pool.root"]),
275 IOVDb=SimpleNamespace(),
278 self.assertFalse(configureDumpGeoInputFlags(flags))
279 self.assertEqual(flags.Input.Files, [
"events.pool.root"])
282 geometry_tag = resolveDumpGeoGeometryTag(
287 flags = self.
_flags(atlas_version=geometry_tag)
290 dumpGeoOutputFileName(flags),
291 "geometry-METADATA-TAG.db",
295 with patch(
"DumpGeo.DumpGeoConfig._logger.error")
as logger_error:
296 logZDCFailureReminder(zdc_enabled=
True, run_succeeded=
False)
298 logger_error.assert_called_once()
299 self.assertIn(
"ZDC geometry was enabled", logger_error.call_args[0][0])
302 with patch(
"DumpGeo.DumpGeoConfig._logger.error")
as logger_error:
303 logZDCFailureReminder(zdc_enabled=
False, run_succeeded=
False)
304 logZDCFailureReminder(zdc_enabled=
True, run_succeeded=
True)
306 logger_error.assert_not_called()
309 """A custom filename must not disable DetectorManager filtering."""
312 output_file=
"filtered.db",
313 filters=[
"Pixel",
"Tile"],
317 self.assertEqual(algorithm.UserFilterDetManager, [
"Pixel",
"Tile"])
320 """DumpGeoCfg passes its name argument to the algorithm."""
323 self.assertEqual(algorithm.name,
"RequestedDumpGeo")
326if __name__ ==
"__main__":
test_configuration_dumps_flags_at_debug_level(self)
test_force_overwrite_does_not_delete_during_configuration(self)
test_real_input_files_are_preserved(self)
test_automatic_filename_and_filter(self)
test_output_filename_helper(self)
test_geometry_fallback_is_used_when_no_tag_is_available(self)
test_custom_filename_and_filter(self)
test_geometry_tag_is_preserved_without_detdescr(self)
_algorithm(self, flags, **kwargs)
test_algorithm_name(self)
test_explicit_properties_override_flags(self)
test_zdc_failure_reminder_is_suppressed_when_not_applicable(self)
test_custom_output_filename(self)
test_detdescr_overrides_generic_geometry_flag(self)
test_show_treetop_content(self)
test_explicit_force_overwrite_property_is_authoritative(self)
test_existing_file_without_force_raises(self)
test_inputless_flags_are_initialized_without_an_event_file(self)
test_explicit_output_filename_is_validated(self)
test_configuration_does_not_dump_flags_at_info_level(self)
test_automatic_output_filename(self)
test_force_overwrite_configures_explicit_output_filename(self)
test_input_file_detection(self)
test_force_overwrite_preflight_does_not_remove_existing_file(self)
test_resolved_geometry_tag_is_used_in_output_filename(self)
_flags(*, output_file="", filters=None, force_overwrite=False, show_treetops=False, atlas_version="ATLAS-UNIT-TEST-00-00-00")
test_zdc_failure_reminder_is_logged(self)