Coverage for tests/test_configApdbLoader.py: 21%

Shortcuts on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

132 statements  

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/>. 

21 

22import unittest 

23 

24import lsst.utils.tests 

25from lsst.pex.config import Config, Field, ConfigField, ConfigChoiceField, \ 

26 RegistryField, Registry, ConfigurableField, ConfigurableInstance, \ 

27 ConfigDictField 

28from lsst.dax.apdb import Apdb, ApdbConfig 

29 

30from lsst.verify.tasks import ConfigApdbLoader 

31 

32 

33class ConfigApdbLoaderTestSuite(lsst.utils.tests.TestCase): 

34 

35 @staticmethod 

36 def _dummyRegistry(): 

37 class DummyConfigurable: 

38 ConfigClass = Config 

39 registry = Registry() 

40 registry.register("foo", DummyConfigurable) 

41 registry.register("bar", Apdb, ConfigClass=ApdbConfig) 

42 return registry 

43 

44 @staticmethod 

45 def _dummyApdbConfig(): 

46 config = ApdbConfig() 

47 config.db_url = "sqlite://" # in-memory DB 

48 config.isolation_level = "READ_UNCOMMITTED" 

49 return config 

50 

51 def setUp(self): 

52 self.task = ConfigApdbLoader() 

53 

54 def testNoConfig(self): 

55 result = self.task.run(None) 

56 self.assertIsNone(result.apdb) 

57 

58 def testEmptyConfig(self): 

59 result = self.task.run(Config()) 

60 self.assertIsNone(result.apdb) 

61 

62 def testSelfConfig(self): 

63 result = self.task.run(self._dummyApdbConfig()) 

64 self.assertIsInstance(result.apdb, Apdb) 

65 

66 def testConfigChoiceFieldUnSelected(self): 

67 typemap = {"foo": Config, "bar": ApdbConfig} 

68 

69 class TestConfig(Config): 

70 field = ConfigChoiceField(typemap=typemap, doc="") 

71 

72 config = TestConfig() 

73 config.field = "foo" 

74 result = self.task.run(config) 

75 self.assertIsNone(result.apdb) 

76 

77 def testConfigChoiceFieldSelected(self): 

78 typemap = {"foo": Config, "bar": ApdbConfig} 

79 

80 class TestConfig(Config): 

81 field = ConfigChoiceField(typemap=typemap, doc="") 

82 

83 config = TestConfig() 

84 config.field = "bar" 

85 config.field["bar"] = self._dummyApdbConfig() 

86 result = self.task.run(config) 

87 self.assertIsInstance(result.apdb, Apdb) 

88 

89 def testConfigChoiceFieldMulti(self): 

90 typemap = {"foo": Config, "bar": ApdbConfig} 

91 

92 class TestConfig(Config): 

93 field = ConfigChoiceField(typemap=typemap, doc="", multi=True) 

94 

95 config = TestConfig() 

96 config.field = {"bar", "foo"} 

97 config.field["bar"] = self._dummyApdbConfig() 

98 result = self.task.run(config) 

99 self.assertIsInstance(result.apdb, Apdb) 

100 

101 def testRegistryFieldUnSelected(self): 

102 registry = self._dummyRegistry() 

103 

104 class TestConfig(Config): 

105 field = RegistryField(registry=registry, doc="") 

106 

107 config = TestConfig() 

108 config.field = "foo" 

109 result = self.task.run(config) 

110 self.assertIsNone(result.apdb) 

111 

112 def testRegistryFieldSelected(self): 

113 registry = self._dummyRegistry() 

114 

115 class TestConfig(Config): 

116 field = RegistryField(registry=registry, doc="") 

117 

118 config = TestConfig() 

119 config.field = "bar" 

120 config.field["bar"] = self._dummyApdbConfig() 

121 result = self.task.run(config) 

122 self.assertIsInstance(result.apdb, Apdb) 

123 

124 def testRegistryFieldMulti(self): 

125 registry = self._dummyRegistry() 

126 

127 class TestConfig(Config): 

128 field = RegistryField(registry=registry, doc="", multi=True) 

129 

130 config = TestConfig() 

131 config.field = {"bar", "foo"} 

132 config.field["bar"] = self._dummyApdbConfig() 

133 result = self.task.run(config) 

134 self.assertIsInstance(result.apdb, Apdb) 

135 

136 def testConfigField(self): 

137 class TestConfig(Config): 

138 field = ConfigField(dtype=ApdbConfig, 

139 default=self._dummyApdbConfig(), doc="") 

140 

141 result = self.task.run(TestConfig()) 

142 self.assertIsInstance(result.apdb, Apdb) 

143 

144 def testConfigurableField(self): 

145 class TestConfig(Config): 

146 field = ConfigurableField(target=Apdb, ConfigClass=ApdbConfig, 

147 doc="") 

148 

149 config = TestConfig() 

150 config.field = self._dummyApdbConfig() 

151 self.assertIsInstance(config.field, ConfigurableInstance) 

152 result = self.task.run(config) 

153 self.assertIsInstance(result.apdb, Apdb) 

154 

155 def testConfigDictFieldUnSelected(self): 

156 class TestConfig(Config): 

157 field = ConfigDictField(keytype=int, itemtype=ApdbConfig, doc="") 

158 

159 result = self.task.run(TestConfig()) 

160 self.assertIsNone(result.apdb) 

161 

162 def testConfigDictFieldSelected(self): 

163 class TestConfig(Config): 

164 field = ConfigDictField(keytype=int, itemtype=ApdbConfig, doc="") 

165 

166 config = TestConfig() 

167 config.field = {42: self._dummyApdbConfig()} 

168 result = self.task.run(config) 

169 self.assertIsInstance(result.apdb, Apdb) 

170 

171 def testSiblingConfigs(self): 

172 class TestConfig(Config): 

173 field1 = Field(dtype=int, doc="") 

174 field2 = ConfigField(dtype=ApdbConfig, 

175 default=self._dummyApdbConfig(), doc="") 

176 field3 = Field(dtype=str, doc="") 

177 

178 result = self.task.run(TestConfig()) 

179 self.assertIsInstance(result.apdb, Apdb) 

180 

181 def testNestedConfigs(self): 

182 class InnerConfig(Config): 

183 field = ConfigurableField(target=Apdb, 

184 ConfigClass=ApdbConfig, doc="") 

185 

186 class TestConfig(Config): 

187 field = ConfigField(dtype=InnerConfig, doc="") 

188 

189 config = TestConfig() 

190 config.field.field = self._dummyApdbConfig() 

191 self.assertIsInstance(config.field.field, ConfigurableInstance) 

192 result = self.task.run(config) 

193 self.assertIsInstance(result.apdb, Apdb) 

194 

195 

196class MemoryTester(lsst.utils.tests.MemoryTestCase): 

197 pass 

198 

199 

200def setup_module(module): 

201 lsst.utils.tests.init() 

202 

203 

204if __name__ == "__main__": 204 ↛ 205line 204 didn't jump to line 205, because the condition on line 204 was never true

205 lsst.utils.tests.init() 

206 unittest.main()