1 # -*- coding: utf-8 -*-
3 # Copyright (C) 2013 LEAP
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation, either version 3 of the License, or
8 # (at your option) any later version.
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
24 from leap.common.config.baseconfig import BaseConfig, LocalizedKey
25 from leap.common.testing.basetest import BaseLeapTest
29 # reduced eipconfig sample config
35 "transport": ["openvpn"],
38 "host": "host.dev.example.org",
42 "transport": ["openvpn"],
45 "host": "host2.dev.example.org",
48 "default_language": "en",
54 "en": "Baseconfig testing environment",
55 "es": "Entorno de pruebas de Baseconfig"
61 # reduced eipconfig.spec version
63 'description': 'sample eip service config',
86 'format': 'translatable',
87 'default': {u'en': u'Test Provider'}
94 "transport": ["openvpn"],
96 "host": "location.example.org",
103 class TestConfig(BaseConfig):
105 BaseConfig implementation for testing purposes only.
107 def get_gateways(self):
108 return self._safe_get_value("gateways")
110 def get_serial(self):
111 return self._safe_get_value("serial")
113 def get_version(self):
114 return self._safe_get_value("version")
116 def _get_schema(self):
120 return self._get_schema()
122 def get_default_language(self):
123 return self._safe_get_value("default_language")
127 return self._safe_get_value("name")
130 class BaseConfigTest(BaseLeapTest):
138 def _write_config(self, data):
140 Helper to write some data to a temp config file.
142 :param data: data to be used to save in the config file.
143 :data type: dict (valid json)
145 self.config_file = self.get_tempfile("config.json")
146 conf = open(self.config_file, "w")
147 conf.write(json.dumps(data))
150 def _get_config(self, fromfile=False, data=sample_config):
152 Helper that returns a TestConfig object using the data parameter
155 :param fromfile: sets if we should use a file or a string
157 :param data: sets the data to be used to load in the TestConfig object
158 :data type: dict (valid json)
161 config = TestConfig()
165 self._write_config(data)
166 loaded = config.load(self.config_file, relative=False)
168 json_string = json.dumps(data)
169 loaded = config.load(data=json_string)
176 def test_loads_from_file(self):
177 config = self._get_config(fromfile=True)
178 self.assertIsNotNone(config)
180 def test_loads_from_data(self):
181 config = self._get_config()
182 self.assertIsNotNone(config)
184 def test_load_valid_config_from_file(self):
185 config = self._get_config(fromfile=True)
186 self.assertIsNotNone(config)
188 self.assertEqual(config.get_version(), sample_config["version"])
189 self.assertEqual(config.get_serial(), sample_config["serial"])
190 self.assertEqual(config.get_gateways(), sample_config["gateways"])
192 def test_load_valid_config_from_data(self):
193 config = self._get_config()
194 self.assertIsNotNone(config)
196 self.assertEqual(config.get_version(), sample_config["version"])
197 self.assertEqual(config.get_serial(), sample_config["serial"])
198 self.assertEqual(config.get_gateways(), sample_config["gateways"])
200 def test_safe_get_value_no_config(self):
201 config = TestConfig()
203 with self.assertRaises(AssertionError):
206 def test_safe_get_value_non_existent_value(self):
207 config = self._get_config()
209 self.assertIsNone(config._safe_get_value('non-existent-value'))
211 def test_loaded(self):
212 config = self._get_config()
213 self.assertTrue(config.loaded())
215 def test_not_loaded(self):
216 config = TestConfig()
217 self.assertFalse(config.loaded())
219 def test_save_and_load(self):
220 config = self._get_config()
221 config.get_path_prefix = Mock(return_value=self.tempdir)
222 config_file = 'test_config.json'
223 self.assertTrue(config.save([config_file]))
225 config_saved = TestConfig()
226 config_file_path = self.get_tempfile(config_file)
227 self.assertTrue(config_saved.load(config_file_path, relative=False))
229 self.assertEqual(config.get_version(), config_saved.get_version())
230 self.assertEqual(config.get_serial(), config_saved.get_serial())
231 self.assertEqual(config.get_gateways(), config_saved.get_gateways())
233 def test_localizations(self):
234 conf = self._get_config()
236 self.assertEqual(conf.get_name(lang='en'), sample_config['name']['en'])
237 self.assertEqual(conf.get_name(lang='es'), sample_config['name']['es'])
239 def _localized_config(self, lang):
241 Helper to change default language of the provider config.
243 conf = copy.deepcopy(sample_config)
244 conf['default_language'] = lang
245 json_string = json.dumps(conf)
246 config = TestConfig()
247 config.load(data=json_string)
251 def test_default_localization1(self):
252 default_language = sample_config['languages'][0]
253 config = self._localized_config(default_language)
255 default_name = sample_config['name'][default_language]
257 self.assertEqual(config.get_name(lang='xx'), default_name)
258 self.assertEqual(config.get_name(), default_name)
260 def test_default_localization2(self):
261 default_language = sample_config['languages'][1]
262 config = self._localized_config(default_language)
264 default_name = sample_config['name'][default_language]
266 self.assertEqual(config.get_name(lang='xx'), default_name)
267 self.assertEqual(config.get_name(), default_name)
270 if __name__ == "__main__":
271 unittest.main(verbosity=2)