Coverage for venv1 / lib / python3.10 / site-packages / combinatrix / test / unit / test_load_parameter_sets.py: 0%
85 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-04 09:41 +0100
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-04 09:41 +0100
1import unittest, os
2from parameterized import parameterized
3from combinatrix.testintegration import load_parameter_sets, rel2abs
4from combinatrix.core import CombinatrixException
5from combinatrix.test.fixtures.settings_bundle import SettingsBundleFactory
7EXCEPTIONS = {
8 "CombinatrixException": CombinatrixException
9}
11BUNDLE_PATHS = {
12 "none": None,
13 "not_exists": rel2abs(__file__, "path", "does", "not", "exist"),
14 "exists": rel2abs(__file__, "..", "resources", "fixtures", "test_bundle")
15}
17BUNDLE_NAMES = {
18 "none": None,
19 "not_exists": "not_exists",
20 "exists": "test_bundle"
21}
23NAME_FIELDS = {
24 "none": None,
25 "not_exists": "not_exists",
26 "exists": "test_id"
27}
29FILTERS = {
30 "none": None,
31 "single_filter": {"test_id": ["1"]},
32 "double_filter": {"test_id": ["1", "2", "3"], "field3": ["1"]}
33}
36def load_cases():
37 return load_parameter_sets(rel2abs(__file__, "..", "resources", "bundles", "load_parameter_sets"),
38 "load_parameter_sets", "test_id", {"test_id": []})
41class TestLoadParameterSets(unittest.TestCase):
43 def setUp(self):
44 super(TestLoadParameterSets, self).setUp()
46 def tearDown(self):
47 SettingsBundleFactory.tear_down_bundle()
48 super(TestLoadParameterSets, self).tearDown()
50 @parameterized.expand(load_cases)
51 def test_load_parameter_sets(self, name, kwargs):
52 bundle_path_arg = kwargs.get("bundle_path")
53 bundle_name_arg = kwargs.get("bundle_name")
54 name_field_arg = kwargs.get("name_field")
55 filters_arg = kwargs.get("filters")
56 settings_csv_arg = kwargs.get("settings_csv")
57 settings_json_arg = kwargs.get("settings_json")
58 matrix_arg = kwargs.get("matrix")
59 settings_csv_age_arg = kwargs.get("settings_csv_age")
60 settings_json_age_arg = kwargs.get("settings_json_age")
61 matrix_age_arg = kwargs.get("matrix_age")
62 raises_arg = kwargs.get("raises")
64 raises = EXCEPTIONS.get(raises_arg)
65 bundle_path = BUNDLE_PATHS[bundle_path_arg]
66 bundle_name = BUNDLE_NAMES[bundle_name_arg]
67 name_field = NAME_FIELDS[name_field_arg]
68 filters = FILTERS[filters_arg]
70 modified_order = {}
71 if settings_csv_age_arg not in ["-"]:
72 modified_order[int(settings_csv_age_arg)] = "settings_csv"
73 if settings_json_age_arg not in ["-"]:
74 modified_order[int(settings_json_age_arg)] = "settings_json"
75 if matrix_age_arg not in ["-"]:
76 modified_order[int(matrix_age_arg)] = "matrix"
77 order_spec = list(modified_order.keys())
78 order_spec.sort()
79 order = []
80 for o in order_spec:
81 order.append(modified_order[o])
83 bundle_info = SettingsBundleFactory.make_bundle(settings_csv_arg, settings_json_arg, matrix_arg, order)
85 if raises is not None:
86 with self.assertRaises(raises):
87 load_parameter_sets(bundle_path, bundle_name, name_field, filters)
88 else:
89 combinations = load_parameter_sets(bundle_path, bundle_name, name_field, filters)
91 # categorise the files into the three types:
92 # 1. forward files - they should exist and have new modified dates
93 # 2. current - it should exist and have an unmodified date
94 # 3. past - may exist or not, and if exists should have an unmodified date
95 forward = []
96 current = None
97 past = []
99 # seek through the ordered items, looking for the item that we would expect to be
100 # the one the run picks up on as the primary artefact. This will be the earliest present
101 # file
102 seek = ["settings_csv", "settings_json", "matrix"]
103 for o in seek:
104 if bundle_info[o]["status"] == "present":
105 current = o
106 break
108 # sort the list of possible files into past and forward
109 mode = "past"
110 for stage in seek:
111 if stage == current:
112 mode = "forward"
113 continue
114 if mode == "past":
115 past.append(stage)
116 elif mode == "forward":
117 forward.append(stage)
119 # now run the checks on each of these bins
120 for p in past:
121 assert not os.path.exists(bundle_info[p]["path"])
123 assert os.path.exists(bundle_info[current]["path"])
124 mtime = os.path.getmtime(bundle_info[current]["path"])
125 assert mtime == bundle_info[current]["mtime"]
127 for f in forward:
128 assert os.path.exists(bundle_info[f]["path"])
129 mtime = os.path.getmtime(bundle_info[f]["path"])
130 assert mtime > bundle_info[f]["mtime"]
132 if filters_arg == "none":
133 assert len(combinations) == 8
134 elif filters_arg == "single_filter":
135 assert len(combinations) == 1
136 elif filters_arg == "double_filter":
137 assert len(combinations) == 2