valid child type for Mix|MetaConfig

This commit is contained in:
Emmanuel Garette 2018-10-31 18:38:44 +01:00
parent f83937a143
commit c1eed3ad0a
3 changed files with 14 additions and 59 deletions

View file

@ -1,8 +1,7 @@
from py.test import raises
from .autopath import do_autopath from .autopath import do_autopath
do_autopath() do_autopath()
from py.test import raises
from tiramisu.setting import groups, owners from tiramisu.setting import groups, owners
from tiramisu import IntOption, StrOption, NetworkOption, NetmaskOption, \ from tiramisu import IntOption, StrOption, NetworkOption, NetmaskOption, \
OptionDescription, MasterSlaves, Config, GroupConfig, MetaConfig, \ OptionDescription, MasterSlaves, Config, GroupConfig, MetaConfig, \

View file

@ -90,6 +90,15 @@ def make_mixconfig(double=False):
return mix return mix
def test_mix_not_group():
i1 = IntOption('i1', '')
od1 = OptionDescription('od1', '', [i1])
od2 = OptionDescription('od2', '', [od1])
conf1 = Config(od2, session_id='conf1')
grp = GroupConfig([conf1])
raises(TypeError, "MixConfig(od2, [grp])")
def test_unknown_config(): def test_unknown_config():
mix = make_mixconfig() mix = make_mixconfig()
raises(ConfigError, "mix.config('unknown')") raises(ConfigError, "mix.config('unknown')")
@ -271,63 +280,6 @@ def test_mix_mix_set():
raises(ValueError, "mix.value.set('od1.i6', 7, only_config=True, force_dont_change_value=True)") raises(ValueError, "mix.value.set('od1.i6', 7, only_config=True, force_dont_change_value=True)")
def test_not_mix():
i1 = IntOption('i1', '')
od1 = OptionDescription('od1', '', [i1])
od2 = OptionDescription('od2', '', [od1])
conf1 = Config(od2, session_id='conf1')
conf2 = Config(od2, session_id='conf2')
conf3 = Config(od2)
conf4 = Config(od2, session_id='conf4')
raises(TypeError, "GroupConfig(conf1)")
#same name
#raises(ConflictError, "GroupConfig([conf2, conf4], session_id='conf2')")
raises(ConflictError, "GroupConfig([conf2, conf2], session_id='conf8')")
grp = GroupConfig([conf1, conf2])
raises(APIError, "grp.option('od1.i1').value.get()")
conf1, conf2 = grp.config.list()
errors = grp.value.set('od1.i1', 7)
assert len(errors) == 0
assert grp.config('conf1').option('od1.i1').value.get() == grp.config('conf2').option('od1.i1').value.get() == 7
assert grp.config('conf1').option('od1.i1').owner.get() is grp.config('conf2').option('od1.i1').owner.get() is owners.user
grp.option('od1.i1').value.reset()
assert grp.config('conf1').option('od1.i1').owner.get() is grp.config('conf2').option('od1.i1').owner.get() is owners.default
def test_group_find_firsts():
i1 = IntOption('i1', '')
od1 = OptionDescription('od1', '', [i1])
od2 = OptionDescription('od2', '', [od1])
conf1 = Config(od2, session_id='conf1')
conf2 = Config(od2, session_id='conf2')
grp = GroupConfig([conf1, conf2])
itr = grp.config.find('i1').config.list()
conf1._config_bag.context == next(itr)._config_bag.context
conf2._config_bag.context == next(itr)._config_bag.context
try:
next(itr)
except StopIteration:
pass
except:
raise Exception('no')
else:
raise Exception('no')
def test_group_group():
i1 = IntOption('i1', '')
od1 = OptionDescription('od1', '', [i1])
od2 = OptionDescription('od2', '', [od1])
conf1 = Config(od2, session_id='conf9')
conf2 = Config(od2, session_id='conf10')
grp = GroupConfig([conf1, conf2], 'grp')
grp2 = GroupConfig([grp])
errors = grp2.value.set('od1.i1', 2)
assert len(errors) == 0
assert grp2.config('grp.conf9').option('od1.i1').value.get() == 2
assert grp2.config('grp.conf9').option('od1.i1').owner.get() is owners.user
def test_mix_unconsistent(): def test_mix_unconsistent():
i1 = IntOption('i1', '') i1 = IntOption('i1', '')
i2 = IntOption('i2', '', default=1) i2 = IntOption('i2', '', default=1)

View file

@ -980,6 +980,8 @@ class KernelMixConfig(KernelGroupConfig):
"should be config, not {}" "should be config, not {}"
).format(self.impl_type, ).format(self.impl_type,
type(child))) type(child)))
if not isinstance(child, (KernelConfig, KernelMixConfig)):
raise TypeError(_("child must be a Config, MixConfig or MetaConfig"))
if child.cfgimpl_get_meta() is not None: if child.cfgimpl_get_meta() is not None:
raise ValueError(_("child has already a {}config's").format(self.impl_type)) raise ValueError(_("child has already a {}config's").format(self.impl_type))
child._impl_meta = weakref.ref(self) child._impl_meta = weakref.ref(self)
@ -1193,6 +1195,8 @@ class KernelMetaConfig(KernelMixConfig):
"should be config, not {}" "should be config, not {}"
).format(self.impl_type, ).format(self.impl_type,
type(child))) type(child)))
if not isinstance(child, (KernelConfig, KernelMetaConfig)):
raise TypeError(_("child must be a Config or MetaConfig"))
if descr is None: if descr is None:
descr = child.cfgimpl_get_description() descr = child.cfgimpl_get_description()
elif descr is not child.cfgimpl_get_description(): elif descr is not child.cfgimpl_get_description():