Coverage for tests/test_configApdbLoader.py: 24%
140 statements
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-10 03:37 -0700
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-10 03:37 -0700
1# This file is part of verify.
2#
3# Developed for the LSST Data Management System.
4# This product includes software developed by the LSST Project
5# (https://www.lsst.org).
6# See the COPYRIGHT file at the top-level directory of this distribution
7# for details of code ownership.
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program. If not, see <https://www.gnu.org/licenses/>.
22import shutil
23import tempfile
24import unittest
26import lsst.utils.tests
27from lsst.pex.config import Config, Field, ConfigField, ConfigChoiceField, \
28 RegistryField, Registry, ConfigurableField, ConfigurableInstance, \
29 ConfigDictField
30from lsst.dax.apdb import Apdb, ApdbConfig, ApdbSql, ApdbSqlConfig
32from lsst.verify.tasks import ConfigApdbLoader
35class ConfigApdbLoaderTestSuite(lsst.utils.tests.TestCase):
37 @staticmethod
38 def _dummyRegistry():
39 class DummyConfigurable:
40 ConfigClass = Config
41 registry = Registry()
42 registry.register("foo", DummyConfigurable)
43 registry.register("bar", ApdbSql, ConfigClass=ApdbSqlConfig)
44 return registry
46 def _dummyApdbConfig(self):
47 return ApdbSql.init_database(db_url=self.db_url)
49 def setUp(self):
50 self.tempdir = tempfile.mkdtemp()
51 self.db_url = f"sqlite:///{self.tempdir}/apdb.sqlite3"
52 self.task = ConfigApdbLoader()
54 def tearDown(self):
55 shutil.rmtree(self.tempdir, ignore_errors=True)
57 def testEmptyConfig(self):
58 result = self.task.run(Config())
59 self.assertIsNone(result.apdb)
61 def testSelfConfig(self):
62 result = self.task.run(self._dummyApdbConfig())
63 self.assertIsInstance(result.apdb, Apdb)
65 def testConfigChoiceFieldUnSelected(self):
66 typemap = {"foo": Config, "bar": ApdbConfig}
68 class TestConfig(Config):
69 field = ConfigChoiceField(typemap=typemap, doc="test")
71 config = TestConfig()
72 config.field = "foo"
73 result = self.task.run(config)
74 self.assertIsNone(result.apdb)
76 def testConfigChoiceFieldSelected(self):
77 # Note: ConfigChoiceField does not support polymorphic types and it is
78 # not very useful for ApdbConfig and subclasses.
79 typemap = {"foo": Config, "bar": ApdbSqlConfig}
81 class TestConfig(Config):
82 field = ConfigChoiceField(typemap=typemap, doc="test")
84 config = TestConfig()
85 config.field = "bar"
86 config.field["bar"] = self._dummyApdbConfig()
87 result = self.task.run(config)
88 self.assertIsInstance(result.apdb, Apdb)
90 def testConfigChoiceFieldMulti(self):
91 # Note: ConfigChoiceField does not support polymorphic types and it is
92 # not very useful for ApdbConfig and subclasses.
93 typemap = {"foo": Config, "bar": ApdbSqlConfig}
95 class TestConfig(Config):
96 field = ConfigChoiceField(typemap=typemap, doc="test", multi=True)
98 config = TestConfig()
99 config.field = {"bar", "foo"}
100 config.field["bar"] = self._dummyApdbConfig()
101 result = self.task.run(config)
102 self.assertIsInstance(result.apdb, Apdb)
104 def testRegistryFieldUnSelected(self):
105 registry = self._dummyRegistry()
107 class TestConfig(Config):
108 field = RegistryField(registry=registry, doc="test")
110 config = TestConfig()
111 config.field = "foo"
112 result = self.task.run(config)
113 self.assertIsNone(result.apdb)
115 def testRegistryFieldSelected(self):
116 registry = self._dummyRegistry()
118 class TestConfig(Config):
119 field = RegistryField(registry=registry, doc="test")
121 config = TestConfig()
122 config.field = "bar"
123 config.field["bar"] = self._dummyApdbConfig()
124 result = self.task.run(config)
125 self.assertIsInstance(result.apdb, Apdb)
127 def testRegistryFieldMulti(self):
128 registry = self._dummyRegistry()
130 class TestConfig(Config):
131 field = RegistryField(registry=registry, doc="test", multi=True)
133 config = TestConfig()
134 config.field = {"bar", "foo"}
135 config.field["bar"] = self._dummyApdbConfig()
136 result = self.task.run(config)
137 self.assertIsInstance(result.apdb, Apdb)
139 def testConfigField(self):
140 # Note: ConfigField does not support polymorphic types and it is not
141 # very useful for ApdbConfig and subclasses.
142 class TestConfig(Config):
143 field = ConfigField(dtype=ApdbSqlConfig,
144 default=self._dummyApdbConfig(), doc="test")
146 result = self.task.run(TestConfig())
147 self.assertIsInstance(result.apdb, Apdb)
149 def testConfigurableField(self):
150 class TestConfig(Config):
151 field = ConfigurableField(target=ApdbSql, doc="test")
153 config = TestConfig()
154 config.field = self._dummyApdbConfig()
155 self.assertIsInstance(config.field, ConfigurableInstance)
156 result = self.task.run(config)
157 self.assertIsInstance(result.apdb, Apdb)
159 def testConfigurableFieldRetarget(self):
160 # Initally set to abstract target, has to be re-targeted before use.
161 class TestConfig(Config):
162 field = ConfigurableField(target=Apdb, doc="test")
164 config = TestConfig()
165 config.field.retarget(ApdbSql)
166 config.field = self._dummyApdbConfig()
167 self.assertIsInstance(config.field, ConfigurableInstance)
168 result = self.task.run(config)
169 self.assertIsInstance(result.apdb, Apdb)
171 def testConfigDictFieldUnSelected(self):
172 class TestConfig(Config):
173 field = ConfigDictField(keytype=int, itemtype=ApdbConfig, doc="test")
175 result = self.task.run(TestConfig())
176 self.assertIsNone(result.apdb)
178 def testConfigDictFieldSelected(self):
179 # Note: ConfigDictField does not support polymorphic types and it is
180 # not very useful for ApdbConfig and subclasses.
181 class TestConfig(Config):
182 field = ConfigDictField(keytype=int, itemtype=ApdbSqlConfig,
183 doc="test")
185 config = TestConfig()
186 config.field = {42: self._dummyApdbConfig()}
187 result = self.task.run(config)
188 self.assertIsInstance(result.apdb, Apdb)
190 def testSiblingConfigs(self):
191 # Note: ConfigField does not support polymorphic types and it is not
192 # very useful for ApdbConfig and subclasses.
193 class TestConfig(Config):
194 field1 = Field(dtype=int, doc="test")
195 field2 = ConfigField(dtype=ApdbSqlConfig,
196 default=self._dummyApdbConfig(), doc="test")
197 field3 = Field(dtype=str, doc="test")
199 result = self.task.run(TestConfig())
200 self.assertIsInstance(result.apdb, Apdb)
202 def testNestedConfigs(self):
203 class InnerConfig(Config):
204 field = ConfigurableField(target=ApdbSql, doc="test")
206 class TestConfig(Config):
207 field = ConfigField(dtype=InnerConfig, doc="test")
209 config = TestConfig()
210 config.field.field = self._dummyApdbConfig()
211 self.assertIsInstance(config.field.field, ConfigurableInstance)
212 result = self.task.run(config)
213 self.assertIsInstance(result.apdb, Apdb)
216class MemoryTester(lsst.utils.tests.MemoryTestCase):
217 pass
220def setup_module(module):
221 lsst.utils.tests.init()
224if __name__ == "__main__": 224 ↛ 225line 224 didn't jump to line 225, because the condition on line 224 was never true
225 lsst.utils.tests.init()
226 unittest.main()