From df77bc8738695730d1882dd6ab48d61ae0adc033 Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Sat, 22 Sep 2018 17:45:52 +0200 Subject: [PATCH] test coverage --- test/auto/test_auto.py | 7 ++-- test/test_config.py | 3 ++ test/test_masterslaves.py | 4 +++ test/test_metaconfig.py | 16 +++++++++ test/test_option.py | 10 ++++++ test/test_requires.py | 2 ++ test/test_submulti.py | 2 ++ tiramisu/api.py | 71 +++++++++++++++++++-------------------- 8 files changed, 74 insertions(+), 41 deletions(-) diff --git a/test/auto/test_auto.py b/test/auto/test_auto.py index 860ab53..ebe8bd4 100644 --- a/test/auto/test_auto.py +++ b/test/auto/test_auto.py @@ -919,9 +919,8 @@ def autocheck_set_owner(cfg, mcfg, pathread, pathwrite, confread, confwrite, **k if not isslave: if not kwargs.get('permissive', False) and not kwargs.get('propertyerror', False): cfg.config(confwrite).option(pathwrite).owner.set('new_user') - raises(ConfigError, "cfg.config(confwrite).option(pathwrite).owner.set('default')") - raises(ConfigError, "cfg.config(confwrite).option(pathwrite).owner.set('forced')") - raises(ConfigError, "cfg.config(confwrite).option(pathwrite).owner.set('meta')") + raises(ValueError, "cfg.config(confwrite).option(pathwrite).owner.set('default')") + raises(ValueError, "cfg.config(confwrite).option(pathwrite).owner.set('forced')") #FIXME else: # raises(PropertiesOptionError, "cfg.config(confwrite).option(pathwrite).owner.set('new_user')") else: @@ -1081,7 +1080,7 @@ def autocheck_find(cfg, mcfg, pathread, pathwrite, confread, confwrite, **kwargs def _getoption(opt): opt = opt.option.get() if opt.impl_is_dynsymlinkoption(): - opt = opt.impl_getopt() + opt = opt._opt return opt def _getoptions(opts): diff --git a/test/test_config.py b/test/test_config.py index ce02e84..b9117df 100644 --- a/test/test_config.py +++ b/test/test_config.py @@ -191,12 +191,15 @@ def test_get_modified_values(): root = OptionDescription('root', '', [d1]) config = Config(root) assert to_tuple(config.value.exportation()) == ((), (), (), ()) + assert not config.option('od.g5').option.ismulti() + assert not config.option('od.g5').option.issubmulti() config.option('od.g5').value.set('yes') assert to_tuple(config.value.exportation()) == (('od.g5',), (None,), ('yes',), ('user',)) config.option('od.g4').value.set(True) assert to_tuple(config.value.exportation()) == (('od.g5', 'od.g4'), (None, None), ('yes', True), ('user', 'user')) config.option('od.g4').value.reset() assert to_tuple(config.value.exportation()) == (('od.g5',), (None,), ('yes',), ('user',)) + assert config.option('od.g6').option.ismulti() config.option('od.g6').value.set([undefined]) assert to_tuple(config.value.exportation()) == (('od.g5', 'od.g6'), (None, None), ('yes', (None,)), ('user', 'user')) config.option('od.g6').value.set([]) diff --git a/test/test_masterslaves.py b/test/test_masterslaves.py index 1b9b591..213c4f2 100644 --- a/test/test_masterslaves.py +++ b/test/test_masterslaves.py @@ -205,6 +205,10 @@ def test_groups_is_master(): assert api.option('ip_admin_eth0').option.ismasterslaves() assert not api.option('od2.var').option.ismaster() assert not api.option('od2.var').option.isslave() + assert api.option('ip_admin_eth0.ip_admin_eth0').option.ismulti() + assert api.option('ip_admin_eth0.netmask_admin_eth0').option.ismulti() + assert not api.option('ip_admin_eth0.ip_admin_eth0').option.issubmulti() + assert not api.option('ip_admin_eth0.netmask_admin_eth0').option.issubmulti() assert api.option('ip_admin_eth0.ip_admin_eth0').option.ismaster() assert not api.option('ip_admin_eth0.ip_admin_eth0').option.isslave() assert not api.option('ip_admin_eth0.netmask_admin_eth0').option.ismaster() diff --git a/test/test_metaconfig.py b/test/test_metaconfig.py index 320ce86..f8554a3 100644 --- a/test/test_metaconfig.py +++ b/test/test_metaconfig.py @@ -83,6 +83,22 @@ def test_none(): meta.config('conf1').option('od1.i3').value.reset() assert meta.option('od1.i3').value.get() is meta.config('conf1').option('od1.i3').value.get() is meta.config('conf2').option('od1.i3').value.get() is None assert meta.option('od1.i3').owner.get() is meta.config('conf1').option('od1.i3').owner.get() is meta.config('conf2').option('od1.i3').owner.get() is owners.default + # + assert meta.config(None).config.name() == meta.config.name() + + +def test_reset(): + meta = make_metaconfig() + assert meta.option('od1.i2').value.get() == 1 + meta.option('od1.i2').value.set(2) + meta.config('conf1').option('od1.i2').value.set(3) + assert meta.option('od1.i2').value.get() == 2 + assert meta.config('conf1').option('od1.i2').value.get() == 3 + assert meta.config('conf2').option('od1.i2').value.get() == 2 + meta.config.reset() + assert meta.option('od1.i2').value.get() == 1 + assert meta.config('conf1').option('od1.i2').value.get() == 3 + assert meta.config('conf2').option('od1.i2').value.get() == 1 def test_default(): diff --git a/test/test_option.py b/test/test_option.py index 1f4a340..da3643f 100644 --- a/test/test_option.py +++ b/test/test_option.py @@ -87,6 +87,15 @@ def test_optiondescription_get_information(): assert o.impl_getdoc() == description +def test_option_isoptiondescription(): + i = IntOption('test', '') + od = OptionDescription('od', '', [i]) + od = OptionDescription('od', '', [od]) + cfg = Config(od) + assert cfg.option('od').option.isoptiondescription() + assert not cfg.option('od.test').option.isoptiondescription() + + def test_option_multi(): IntOption('test', '', multi=True) IntOption('test', '', multi=True, default_multi=1) @@ -127,6 +136,7 @@ def test_optiondescription_group(): assert len(list(api.option.list('optiondescription'))) == 2 assert len(list(api.option.list('optiondescription', group_type=groups.family))) == 1 assert len(list(api.option.list('optiondescription', group_type=groups.notfamily))) == 1 + raises(APIError, "list(api.option.list('unknown'))") def test_optiondescription_group_redefined(): diff --git a/test/test_requires.py b/test/test_requires.py index f892d4a..711afa1 100644 --- a/test/test_requires.py +++ b/test/test_requires.py @@ -46,6 +46,8 @@ def test_requires(): od = OptionDescription('service', '', [a, b]) api = Config(od) api.property.read_write() + assert not api.option('activate_service').option.requires() + assert api.option('ip_address_service').option.requires() api.option('ip_address_service').value.get() api.option('activate_service').value.set(False) props = [] diff --git a/test/test_submulti.py b/test/test_submulti.py index 823a1ec..935bf04 100644 --- a/test/test_submulti.py +++ b/test/test_submulti.py @@ -41,6 +41,8 @@ def test_submulti(): multi3 = StrOption('multi3', '', default=[['yes']], multi=submulti) od = OptionDescription('od', '', [multi, multi2, multi3]) api = Config(od) + assert api.option('multi').option.ismulti() + assert api.option('multi').option.issubmulti() assert api.option('multi').owner.get() == owners.default assert api.option('multi').value.get() == [] assert api.option('multi').owner.get() == owners.default diff --git a/tiramisu/api.py b/tiramisu/api.py index fc61fd8..de1e0ac 100644 --- a/tiramisu/api.py +++ b/tiramisu/api.py @@ -156,9 +156,9 @@ class CommonTiramisuOption(CommonTiramisu): if self.option_bag.index is None and option.impl_is_master_slaves('slave'): raise APIError(_('index must be set with the slave option "{}"').format(self.option_bag.path)) elif self.option_bag.index is not None and not option.impl_is_master_slaves('slave'): - raise APIError(_('index must be set only with a slave option, not for "{}"').format(self.option_bag.path)) + raise APIError(_('index must be set only with a slave option, not for "{}"').format(self.option_bag.path)) # pragma: no cover - def __getattr__(self, name): + def __getattr__(self, name): # pragma: no cover if not hasattr(CommonTiramisuOption, name): raise APIError(_('unknown method {}').format(name)) else: @@ -246,7 +246,7 @@ class TiramisuOptionOption(CommonTiramisuOption): option = self.option_bag.option if not option.impl_is_optiondescription() and not name.startswith('_'): return getattr(self, '_' + name) - raise APIError(_('{} is unknown').format(name)) + raise APIError(_('{} is unknown').format(name)) # pragma: no cover def isoptiondescription(self): """test if option is an optiondescription""" @@ -560,13 +560,10 @@ class TiramisuOption(CommonTiramisu): self._path = path self.index = index self.config_bag = config_bag - if option_bag: - self.option_bag = option_bag - else: - self.option_bag = OptionBag() - self.option_bag.path = self._path - self.option_bag.index = self.index - self.option_bag.config_bag = self.config_bag + self.option_bag = OptionBag() + self.option_bag.path = self._path + self.option_bag.index = self.index + self.option_bag.config_bag = self.config_bag if not self.registers: registers(self.registers, self.__class__.__name__) @@ -577,7 +574,7 @@ class TiramisuOption(CommonTiramisu): self.option_bag) elif self._get_option().impl_is_optiondescription() and not subfunc.startswith('_'): return getattr(self, '_' + subfunc) - raise APIError(_('please specify a valid sub function ({})').format(subfunc)) + raise APIError(_('please specify a valid sub function ({})').format(subfunc)) # pragma: no cover def _find(self, name: str, @@ -613,29 +610,29 @@ class TiramisuOption(CommonTiramisu): return t_option ret.append(t_option) return ret - - def _get(self, name): - self._get_option() - current_option = self.option_bag.option.impl_getchild(name, - self.config_bag, - self.subconfig.cfgimpl_get_path) - path = self.option_bag.path + '.' + name - option_bag= OptionBag() - option_bag.set_option(current_option, - path, - None, - self.config_bag) - if current_option.impl_is_optiondescription(): - subconfig = self.subconfig.getattr(name, - option_bag) - else: - subconfig = self.subconfig - return TiramisuOption(name, - path, - None, - subconfig, - self.config_bag, - option_bag) +# +# def _get(self, name): +# self._get_option() +# current_option = self.option_bag.option.impl_getchild(name, +# self.config_bag, +# self.subconfig.cfgimpl_get_path) +# path = self.option_bag.path + '.' + name +# option_bag= OptionBag() +# option_bag.set_option(current_option, +# path, +# None, +# self.config_bag) +# if current_option.impl_is_optiondescription(): +# subconfig = self.subconfig.getattr(name, +# option_bag) +# else: +# subconfig = self.subconfig +# return TiramisuOption(name, +# path, +# None, +# subconfig, +# self.config_bag, +# option_bag) def _group_type(self): """get type for an optiondescription (only for optiondescription)""" @@ -992,7 +989,7 @@ class TiramisuContextConfig(TiramisuContext): return Config(self.config_bag.context.find_firsts(byname=name, byvalue=value, config_bag=self.config_bag)) - else: + else: # pragma: no cover raise APIError('not implemented yet') def name(self): @@ -1064,9 +1061,9 @@ class TiramisuContextConfig(TiramisuContext): return getattr(self, '_g_' + name) elif isinstance(self.config_bag.context, KernelConfig): return getattr(self, '_c_' + name) - except APIError: + except APIError: # pragma: no cover raise APIError(_('{} is unknown').format(name)) - raise APIError(_('{} is unknown').format(name)) + raise APIError(_('{} is unknown').format(name)) # pragma: no cover class TiramisuDispatcher: