Config could have multiple parents
This commit is contained in:
@ -293,8 +293,8 @@ def test_meta_add_config_readd():
|
||||
config = Config(od, session_id='new')
|
||||
#
|
||||
meta.config.add(config)
|
||||
#
|
||||
raises(ConflictError, "meta2.config.add(config)")
|
||||
meta2.config.add(config)
|
||||
assert len(list(config.config.parents())) == 2
|
||||
|
||||
|
||||
def test_meta_new_config_wrong_name():
|
||||
@ -429,7 +429,11 @@ def test_meta_unconsistent():
|
||||
meta.owner.set(owners.meta1)
|
||||
raises(TypeError, 'MetaConfig("string")')
|
||||
#same descr but conf1 already in meta
|
||||
raises(ValueError, "MetaConfig([conf1, conf3])")
|
||||
assert len(list(conf1.config.parents())) == 1
|
||||
assert len(list(conf3.config.parents())) == 0
|
||||
new_meta = MetaConfig([conf1, conf3])
|
||||
assert len(list(conf1.config.parents())) == 2
|
||||
assert len(list(conf3.config.parents())) == 1
|
||||
#not same descr
|
||||
raises(ValueError, "MetaConfig([conf3, conf4])")
|
||||
|
||||
@ -786,39 +790,54 @@ def test_meta_callback_follower():
|
||||
interface1 = Leadership('val1', '', [val1, val3, val4])
|
||||
od = OptionDescription('root', '', [interface1])
|
||||
maconfig = OptionDescription('rootconfig', '', [val, interface1])
|
||||
cfg = Config(maconfig, session_id='cfg1')
|
||||
meta = MetaConfig([cfg])
|
||||
cfg1 = Config(maconfig, session_id='cfg1')
|
||||
meta = MetaConfig([cfg1])
|
||||
meta.property.read_write()
|
||||
assert meta.config('cfg1').value.dict() == {'val1.val2': ['val'], 'val1.val1': ['val'], 'val1.val3': ['val'], 'val': 'val'}
|
||||
meta.config('cfg1').option('val').value.set('val1')
|
||||
assert meta.config('cfg1').value.dict() == {'val1.val2': ['val1'], 'val1.val1': ['val1'], 'val1.val3': ['val1'], 'val': 'val1'}
|
||||
meta.config('cfg1').option('val').value.reset()
|
||||
assert cfg1.value.dict() == {'val1.val2': ['val'], 'val1.val1': ['val'], 'val1.val3': ['val'], 'val': 'val'}
|
||||
#
|
||||
cfg1.option('val').value.set('val1')
|
||||
assert cfg1.value.dict() == {'val1.val2': ['val1'], 'val1.val1': ['val1'], 'val1.val3': ['val1'], 'val': 'val1'}
|
||||
#
|
||||
cfg1.option('val').value.reset()
|
||||
meta.option('val').value.set('val1')
|
||||
assert meta.config('cfg1').value.dict() == {'val1.val2': ['val1'], 'val1.val1': ['val1'], 'val1.val3': ['val1'], 'val': 'val1'}
|
||||
assert cfg1.value.dict() == {'val1.val2': ['val1'], 'val1.val1': ['val1'], 'val1.val3': ['val1'], 'val': 'val1'}
|
||||
#
|
||||
meta.option('val').value.reset()
|
||||
meta.config('cfg1').option('val1.val2', 0).value.set('val2')
|
||||
assert meta.config('cfg1').value.dict() == {'val1.val2': ['val2'], 'val1.val1': ['val'], 'val1.val3': ['val'], 'val': 'val'}
|
||||
meta.config('cfg1').option('val1.val2', 0).value.reset()
|
||||
assert meta.config('cfg1').value.dict() == {'val1.val2': ['val'], 'val1.val1': ['val'], 'val1.val3': ['val'], 'val': 'val'}
|
||||
cfg1.option('val1.val2', 0).value.set('val2')
|
||||
assert cfg1.value.dict() == {'val1.val2': ['val2'], 'val1.val1': ['val'], 'val1.val3': ['val'], 'val': 'val'}
|
||||
#
|
||||
cfg1.option('val1.val2', 0).value.reset()
|
||||
assert cfg1.value.dict() == {'val1.val2': ['val'], 'val1.val1': ['val'], 'val1.val3': ['val'], 'val': 'val'}
|
||||
#
|
||||
meta.option('val1.val2', 0).value.set('val2')
|
||||
assert meta.config('cfg1').value.dict() == {'val1.val2': ['val2'], 'val1.val1': ['val'], 'val1.val3': ['val'], 'val': 'val'}
|
||||
meta.config('cfg1').option('val1.val3', 0).value.set('val6')
|
||||
assert meta.config('cfg1').value.dict() == {'val1.val2': ['val2'], 'val1.val1': ['val'], 'val1.val3': ['val6'], 'val': 'val'}
|
||||
assert cfg1.value.dict() == {'val1.val2': ['val'], 'val1.val1': ['val'], 'val1.val3': ['val'], 'val': 'val'}
|
||||
#
|
||||
meta.option('val1.val1').value.set(['val'])
|
||||
assert cfg1.value.dict() == {'val1.val2': ['val2'], 'val1.val1': ['val'], 'val1.val3': ['val'], 'val': 'val'}
|
||||
#
|
||||
cfg1.option('val1.val3', 0).value.set('val6')
|
||||
assert cfg1.value.dict() == {'val1.val2': ['val2'], 'val1.val1': ['val'], 'val1.val3': ['val6'], 'val': 'val'}
|
||||
#
|
||||
meta.option('val1.val2', 0).value.reset()
|
||||
meta.config('cfg1').option('val1.val3', 0).value.reset()
|
||||
meta.config('cfg1').option('val1.val1').value.set(['val3'])
|
||||
assert meta.config('cfg1').value.dict() == {'val1.val2': ['val3'], 'val1.val1': ['val3'], 'val1.val3': ['val3'], 'val': 'val'}
|
||||
meta.config('cfg1').option('val1.val1').value.reset()
|
||||
assert meta.config('cfg1').value.dict() == {'val1.val2': ['val'], 'val1.val1': ['val'], 'val1.val3': ['val'], 'val': 'val'}
|
||||
cfg1.option('val1.val3', 0).value.reset()
|
||||
cfg1.option('val1.val1').value.set(['val3'])
|
||||
assert cfg1.value.dict() == {'val1.val2': ['val3'], 'val1.val1': ['val3'], 'val1.val3': ['val3'], 'val': 'val'}
|
||||
#
|
||||
cfg1.option('val1.val1').value.reset()
|
||||
assert cfg1.value.dict() == {'val1.val2': ['val'], 'val1.val1': ['val'], 'val1.val3': ['val'], 'val': 'val'}
|
||||
#
|
||||
meta.option('val1.val1').value.set(['val3'])
|
||||
assert meta.config('cfg1').value.dict() == {'val1.val2': ['val3'], 'val1.val1': ['val3'], 'val1.val3': ['val3'], 'val': 'val'}
|
||||
meta.config('cfg1').option('val1.val2', 0).value.set('val2')
|
||||
assert meta.config('cfg1').value.dict() == {'val1.val2': ['val2'], 'val1.val1': ['val3'], 'val1.val3': ['val3'], 'val': 'val'}
|
||||
assert cfg1.value.dict() == {'val1.val2': ['val3'], 'val1.val1': ['val3'], 'val1.val3': ['val3'], 'val': 'val'}
|
||||
#
|
||||
cfg1.option('val1.val2', 0).value.set('val2')
|
||||
assert cfg1.value.dict() == {'val1.val2': ['val2'], 'val1.val1': ['val3'], 'val1.val3': ['val3'], 'val': 'val'}
|
||||
#
|
||||
meta.option('val1.val1').value.set(['val3', 'rah'])
|
||||
assert meta.config('cfg1').value.dict() == {'val1.val2': ['val2', 'rah'], 'val1.val1': ['val3', 'rah'], 'val1.val3': ['val3', 'rah'], 'val': 'val'}
|
||||
assert cfg1.value.dict() == {'val1.val2': ['val2', 'rah'], 'val1.val1': ['val3', 'rah'], 'val1.val3': ['val3', 'rah'], 'val': 'val'}
|
||||
#
|
||||
meta.option('val1.val1').value.pop(1)
|
||||
meta.option('val1.val1').value.set(['val4'])
|
||||
assert meta.config('cfg1').value.dict() == {'val1.val2': ['val2'], 'val1.val1': ['val4'], 'val1.val3': ['val4'], 'val': 'val'}
|
||||
assert cfg1.value.dict() == {'val1.val2': ['val2'], 'val1.val1': ['val4'], 'val1.val3': ['val4'], 'val': 'val'}
|
||||
|
||||
|
||||
def test_meta_reset():
|
||||
@ -861,8 +880,13 @@ def test_meta_properties_meta_copy():
|
||||
meta.property.read_write()
|
||||
|
||||
conf3 = meta.config('conf1').config.copy(session_id='conf3')
|
||||
# old fashion
|
||||
meta2 = conf3.config.metaconfig()
|
||||
assert meta.config.name() == meta2.config.name()
|
||||
# new method
|
||||
meta2 = list(conf3.config.parents())
|
||||
assert len(meta2) == 1
|
||||
assert meta.config.name() == meta2[0].config.name()
|
||||
|
||||
assert meta.config('conf1').value.dict() == {'ip_admin_eth0': ['192.168.1.1']}
|
||||
assert meta.config('conf2').value.dict() == {'ip_admin_eth0': ['192.168.1.1']}
|
||||
|
@ -306,7 +306,11 @@ def test_mix_unconsistent():
|
||||
mix.owner.set(owners.mix1)
|
||||
raises(TypeError, 'MixConfig(od2, "string")')
|
||||
# same descr but conf1 already in mix
|
||||
raises(ValueError, "MixConfig(od2, [conf1, conf3])")
|
||||
assert len(list(conf1.config.parents())) == 1
|
||||
assert len(list(conf3.config.parents())) == 0
|
||||
new_mix = MixConfig(od2, [conf1, conf3])
|
||||
assert len(list(conf1.config.parents())) == 2
|
||||
assert len(list(conf3.config.parents())) == 1
|
||||
# not same descr
|
||||
MixConfig(od2, [conf3, conf4])
|
||||
|
||||
@ -647,32 +651,47 @@ def test_mix_callback_follower():
|
||||
mix = MixConfig(maconfig, [cfg])
|
||||
mix.property.read_write()
|
||||
assert mix.config('cfg1').value.dict() == {'val1.val2': ['val'], 'val1.val1': ['val'], 'val1.val3': ['val'], 'val': 'val'}
|
||||
#
|
||||
mix.config('cfg1').option('val').value.set('val1')
|
||||
assert mix.config('cfg1').value.dict() == {'val1.val2': ['val1'], 'val1.val1': ['val1'], 'val1.val3': ['val1'], 'val': 'val1'}
|
||||
#
|
||||
mix.config('cfg1').option('val').value.reset()
|
||||
mix.option('val').value.set('val1')
|
||||
assert mix.config('cfg1').value.dict() == {'val1.val2': ['val1'], 'val1.val1': ['val1'], 'val1.val3': ['val1'], 'val': 'val1'}
|
||||
#
|
||||
mix.option('val').value.reset()
|
||||
mix.config('cfg1').option('val1.val2', 0).value.set('val2')
|
||||
assert mix.config('cfg1').value.dict() == {'val1.val2': ['val2'], 'val1.val1': ['val'], 'val1.val3': ['val'], 'val': 'val'}
|
||||
#
|
||||
mix.config('cfg1').option('val1.val2', 0).value.reset()
|
||||
assert mix.config('cfg1').value.dict() == {'val1.val2': ['val'], 'val1.val1': ['val'], 'val1.val3': ['val'], 'val': 'val'}
|
||||
#
|
||||
mix.option('val1.val2', 0).value.set('val2')
|
||||
assert mix.config('cfg1').value.dict() == {'val1.val2': ['val'], 'val1.val1': ['val'], 'val1.val3': ['val'], 'val': 'val'}
|
||||
#
|
||||
mix.option('val1.val1').value.set(['val'])
|
||||
assert mix.config('cfg1').value.dict() == {'val1.val2': ['val2'], 'val1.val1': ['val'], 'val1.val3': ['val'], 'val': 'val'}
|
||||
#
|
||||
mix.config('cfg1').option('val1.val3', 0).value.set('val6')
|
||||
assert mix.config('cfg1').value.dict() == {'val1.val2': ['val2'], 'val1.val1': ['val'], 'val1.val3': ['val6'], 'val': 'val'}
|
||||
#
|
||||
mix.option('val1.val2', 0).value.reset()
|
||||
mix.config('cfg1').option('val1.val3', 0).value.reset()
|
||||
mix.config('cfg1').option('val1.val1').value.set(['val3'])
|
||||
assert mix.config('cfg1').value.dict() == {'val1.val2': ['val3'], 'val1.val1': ['val3'], 'val1.val3': ['val3'], 'val': 'val'}
|
||||
#
|
||||
mix.config('cfg1').option('val1.val1').value.reset()
|
||||
assert mix.config('cfg1').value.dict() == {'val1.val2': ['val'], 'val1.val1': ['val'], 'val1.val3': ['val'], 'val': 'val'}
|
||||
#
|
||||
mix.option('val1.val1').value.set(['val3'])
|
||||
assert mix.config('cfg1').value.dict() == {'val1.val2': ['val3'], 'val1.val1': ['val3'], 'val1.val3': ['val3'], 'val': 'val'}
|
||||
#
|
||||
mix.config('cfg1').option('val1.val2', 0).value.set('val2')
|
||||
assert mix.config('cfg1').value.dict() == {'val1.val2': ['val2'], 'val1.val1': ['val3'], 'val1.val3': ['val3'], 'val': 'val'}
|
||||
#
|
||||
mix.option('val1.val1').value.set(['val3', 'rah'])
|
||||
assert mix.config('cfg1').value.dict() == {'val1.val2': ['val2', 'rah'], 'val1.val1': ['val3', 'rah'], 'val1.val3': ['val3', 'rah'], 'val': 'val'}
|
||||
#
|
||||
mix.option('val1.val1').value.pop(1)
|
||||
mix.option('val1.val1').value.set(['val4'])
|
||||
assert mix.config('cfg1').value.dict() == {'val1.val2': ['val2'], 'val1.val1': ['val4'], 'val1.val3': ['val4'], 'val': 'val'}
|
||||
@ -732,8 +751,13 @@ def test_mix_properties_mix_copy():
|
||||
mix.property.read_write()
|
||||
|
||||
conf3 = mix.config('conf1').config.copy(session_id='conf3')
|
||||
# old fashion
|
||||
mix2 = conf3.config.metaconfig()
|
||||
assert mix.config.name() == mix2.config.name()
|
||||
# new method
|
||||
mix2 = list(conf3.config.parents())
|
||||
assert len(mix2) == 1
|
||||
assert mix.config.name() == mix2[0].config.name()
|
||||
|
||||
assert mix.config('conf1').value.dict() == {'ip_admin_eth0': ['192.168.1.1']}
|
||||
assert mix.config('conf2').value.dict() == {'ip_admin_eth0': ['192.168.1.1']}
|
||||
@ -1121,7 +1145,8 @@ def test_mix_add_config_readd():
|
||||
#
|
||||
config = Config(od, session_id='new')
|
||||
mix.config.add(config)
|
||||
raises(ConflictError, "mix2.config.add(config)")
|
||||
mix2.config.add(config)
|
||||
assert len(list(config.config.parents())) == 2
|
||||
|
||||
|
||||
def test_meta_new_mixconfig():
|
||||
|
Reference in New Issue
Block a user