do not remove notempty and notunique properties
This commit is contained in:
parent
e1fef11465
commit
da87f40f12
|
@ -735,6 +735,19 @@ async def test_values_with_leader_and_followers_leader_pop():
|
||||||
assert not await list_sessions()
|
assert not await list_sessions()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_follower_unique():
|
||||||
|
ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
|
||||||
|
netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True, properties=('unique',))
|
||||||
|
interface1 = Leadership('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
|
||||||
|
maconfig = OptionDescription('toto', '', [interface1])
|
||||||
|
async with await Config(maconfig) as cfg:
|
||||||
|
await cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(["192.168.230.145", "192.168.230.146"])
|
||||||
|
# unique property is removed for a follower
|
||||||
|
assert not await cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).property.get()
|
||||||
|
assert not await list_sessions()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_values_with_leader_owner(config_type):
|
async def test_values_with_leader_owner(config_type):
|
||||||
ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
|
ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
|
||||||
|
@ -976,3 +989,28 @@ async def test_follower_force_store_value_reset():
|
||||||
await cfg.option('od.interface0.ip_admin_eth0').value.reset()
|
await cfg.option('od.interface0.ip_admin_eth0').value.reset()
|
||||||
assert not await cfg.option('od.interface0.netmask_admin_eth0', 0).owner.isdefault()
|
assert not await cfg.option('od.interface0.netmask_admin_eth0', 0).owner.isdefault()
|
||||||
assert not await list_sessions()
|
assert not await list_sessions()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_follower_properties():
|
||||||
|
ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
|
||||||
|
netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True, properties=('aproperty',))
|
||||||
|
interface1 = Leadership('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
|
||||||
|
maconfig = OptionDescription('toto', '', [interface1])
|
||||||
|
async with await Config(maconfig) as cfg:
|
||||||
|
await cfg.property.read_write()
|
||||||
|
await cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['1.1.1.1', '192.168.0.0'])
|
||||||
|
await cfg.option('ip_admin_eth0.netmask_admin_eth0').property.get() == ('aproperty',)
|
||||||
|
await cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).property.get() == ('aproperty',)
|
||||||
|
await cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).property.get() == ('aproperty',)
|
||||||
|
#
|
||||||
|
await cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).property.add('newproperty')
|
||||||
|
await cfg.option('ip_admin_eth0.netmask_admin_eth0').property.get() == ('aproperty',)
|
||||||
|
await cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).property.get() == ('aproperty', 'newproperty')
|
||||||
|
await cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).property.get() == ('aproperty',)
|
||||||
|
#
|
||||||
|
await cfg.option('ip_admin_eth0.netmask_admin_eth0').property.add('newproperty1')
|
||||||
|
await cfg.option('ip_admin_eth0.netmask_admin_eth0').property.get() == ('aproperty', 'newproperty1')
|
||||||
|
await cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).property.get() == ('aproperty', 'newproperty', 'newproperty1')
|
||||||
|
await cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).property.get() == ('aproperty', 'newproperty1')
|
||||||
|
assert not await list_sessions()
|
||||||
|
|
|
@ -191,9 +191,9 @@ async def test_property_get_unique_empty():
|
||||||
async with await Config(descr) as cfg:
|
async with await Config(descr) as cfg:
|
||||||
await cfg.property.read_write()
|
await cfg.property.read_write()
|
||||||
assert await cfg.option('string').property.get() == {'empty', 'unique'}
|
assert await cfg.option('string').property.get() == {'empty', 'unique'}
|
||||||
assert await cfg.option('string2').property.get() == {'empty'}
|
assert await cfg.option('string2').property.get() == {'empty', 'notunique'}
|
||||||
assert await cfg.option('string3').property.get() == {'unique'}
|
assert await cfg.option('string3').property.get() == {'unique', 'notempty'}
|
||||||
assert await cfg.option('string4').property.get() == set()
|
assert await cfg.option('string4').property.get() == {'notunique', 'notempty'}
|
||||||
assert not await list_sessions()
|
assert not await list_sessions()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -72,13 +72,9 @@ class Base:
|
||||||
if is_multi:
|
if is_multi:
|
||||||
# if option is a multi, it cannot be 'empty' (None not allowed in the list) and cannot have multiple time the same value
|
# if option is a multi, it cannot be 'empty' (None not allowed in the list) and cannot have multiple time the same value
|
||||||
# 'empty' and 'unique' are removed for follower's option
|
# 'empty' and 'unique' are removed for follower's option
|
||||||
if 'notunique' in properties:
|
if 'notunique' not in properties:
|
||||||
properties = properties - {'notunique'}
|
|
||||||
else:
|
|
||||||
properties = properties | {'unique'}
|
properties = properties | {'unique'}
|
||||||
if 'notempty' in properties:
|
if 'notempty' not in properties:
|
||||||
properties = properties - {'notempty'}
|
|
||||||
else:
|
|
||||||
properties = properties | {'empty'}
|
properties = properties | {'empty'}
|
||||||
assert isinstance(properties, frozenset), _('invalid properties type {0} for {1},'
|
assert isinstance(properties, frozenset), _('invalid properties type {0} for {1},'
|
||||||
' must be a frozenset').format(type(properties),
|
' must be a frozenset').format(type(properties),
|
||||||
|
|
|
@ -117,6 +117,7 @@ FORBIDDEN_SET_PERMISSIVES = frozenset(['force_default_on_freeze',
|
||||||
'force_metaconfig_on_freeze',
|
'force_metaconfig_on_freeze',
|
||||||
'force_store_value'])
|
'force_store_value'])
|
||||||
ALLOWED_LEADER_PROPERTIES = frozenset(['empty',
|
ALLOWED_LEADER_PROPERTIES = frozenset(['empty',
|
||||||
|
'notunique',
|
||||||
'unique',
|
'unique',
|
||||||
'force_store_value',
|
'force_store_value',
|
||||||
'mandatory',
|
'mandatory',
|
||||||
|
|
Loading…
Reference in New Issue