pass force_permissive to slave for a master or to master for a slave
This commit is contained in:
parent
4310d59991
commit
f730050f7c
|
@ -4,6 +4,7 @@ Sun Oct 26 08:50:38 2014 +0200 Emmanuel Garette <egarette@cadoles.com>
|
||||||
* bad characters in DomainnameOption could be in warning level
|
* bad characters in DomainnameOption could be in warning level
|
||||||
* frozen with force_default_on_freeze can change owner
|
* frozen with force_default_on_freeze can change owner
|
||||||
* add force_permissive to config __iter__
|
* add force_permissive to config __iter__
|
||||||
|
* pass force_permissive to slave for a master or to master for a slave
|
||||||
|
|
||||||
Sat Oct 25 22:48:08 2014 +0200 Emmanuel Garette <egarette@cadoles.com>
|
Sat Oct 25 22:48:08 2014 +0200 Emmanuel Garette <egarette@cadoles.com>
|
||||||
* cannot add unvalaible consistency for an option
|
* cannot add unvalaible consistency for an option
|
||||||
|
|
|
@ -4,7 +4,7 @@ from tiramisu.setting import groups, owners
|
||||||
from tiramisu.config import Config
|
from tiramisu.config import Config
|
||||||
from tiramisu.option import ChoiceOption, BoolOption, IntOption, \
|
from tiramisu.option import ChoiceOption, BoolOption, IntOption, \
|
||||||
StrOption, OptionDescription
|
StrOption, OptionDescription
|
||||||
from tiramisu.error import SlaveError
|
from tiramisu.error import SlaveError, PropertiesOptionError
|
||||||
|
|
||||||
from py.test import raises
|
from py.test import raises
|
||||||
|
|
||||||
|
@ -25,8 +25,8 @@ def make_description():
|
||||||
time_zone = ChoiceOption('time_zone', 'fuseau horaire du serveur',
|
time_zone = ChoiceOption('time_zone', 'fuseau horaire du serveur',
|
||||||
('Paris', 'Londres'), 'Paris')
|
('Paris', 'Londres'), 'Paris')
|
||||||
|
|
||||||
ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", properties=('test_perm',))
|
ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé")
|
||||||
netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", properties=('test_perm',))
|
netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau")
|
||||||
|
|
||||||
master = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
|
master = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
|
||||||
interface1 = OptionDescription('interface1', '', [master])
|
interface1 = OptionDescription('interface1', '', [master])
|
||||||
|
@ -176,6 +176,50 @@ def test_groups_with_master_in_config():
|
||||||
assert interface1.impl_get_group_type() == groups.master
|
assert interface1.impl_get_group_type() == groups.master
|
||||||
|
|
||||||
|
|
||||||
|
def test_groups_with_master_hidden_in_config():
|
||||||
|
ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True, properties=('hidden',))
|
||||||
|
netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True, properties=('hidden',))
|
||||||
|
interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
|
||||||
|
interface1.impl_set_group_type(groups.master)
|
||||||
|
cfg = Config(interface1)
|
||||||
|
cfg.read_write()
|
||||||
|
cfg.cfgimpl_get_settings().setpermissive(('hidden',))
|
||||||
|
cfg.getattr('ip_admin_eth0', force_permissive=True)
|
||||||
|
cfg.getattr('netmask_admin_eth0', force_permissive=True)
|
||||||
|
raises(PropertiesOptionError, "cfg.getattr('ip_admin_eth0')")
|
||||||
|
raises(PropertiesOptionError, "cfg.getattr('netmask_admin_eth0')")
|
||||||
|
|
||||||
|
|
||||||
|
def test_groups_with_master_hidden_in_config2():
|
||||||
|
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=('hidden',))
|
||||||
|
interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
|
||||||
|
interface1.impl_set_group_type(groups.master)
|
||||||
|
cfg = Config(interface1)
|
||||||
|
cfg.read_write()
|
||||||
|
cfg.cfgimpl_get_settings().setpermissive(('hidden',))
|
||||||
|
cfg.getattr('ip_admin_eth0', force_permissive=True)
|
||||||
|
cfg.getattr('netmask_admin_eth0', force_permissive=True)
|
||||||
|
cfg.getattr('ip_admin_eth0')
|
||||||
|
raises(PropertiesOptionError, "cfg.getattr('netmask_admin_eth0')")
|
||||||
|
|
||||||
|
|
||||||
|
def test_groups_with_master_hidden_in_config3():
|
||||||
|
#if master is hidden, slave are hidden too
|
||||||
|
ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True, properties=('hidden',))
|
||||||
|
netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
|
||||||
|
interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
|
||||||
|
interface1.impl_set_group_type(groups.master)
|
||||||
|
cfg = Config(interface1)
|
||||||
|
cfg.read_write()
|
||||||
|
cfg.cfgimpl_get_settings().setpermissive(('hidden',))
|
||||||
|
cfg.getattr('ip_admin_eth0', force_permissive=True)
|
||||||
|
cfg.getattr('netmask_admin_eth0', force_permissive=True)
|
||||||
|
raises(PropertiesOptionError, "cfg.getattr('ip_admin_eth0')")
|
||||||
|
raises(PropertiesOptionError, "cfg.getattr('netmask_admin_eth0')")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test_allowed_groups():
|
def test_allowed_groups():
|
||||||
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)
|
||||||
netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
|
netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
|
||||||
|
@ -183,6 +227,23 @@ def test_allowed_groups():
|
||||||
raises(ValueError, "interface1.impl_set_group_type('toto')")
|
raises(ValueError, "interface1.impl_set_group_type('toto')")
|
||||||
|
|
||||||
|
|
||||||
|
def test_values_with_master_disabled_master():
|
||||||
|
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)
|
||||||
|
interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
|
||||||
|
interface1.impl_set_group_type(groups.master)
|
||||||
|
maconfig = OptionDescription('toto', '', [interface1])
|
||||||
|
cfg = Config(maconfig)
|
||||||
|
cfg.read_write()
|
||||||
|
cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
|
||||||
|
cfg.ip_admin_eth0.ip_admin_eth0.pop(0)
|
||||||
|
cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
|
||||||
|
cfg.ip_admin_eth0.netmask_admin_eth0 = ["192.168.230.145"]
|
||||||
|
del(cfg.ip_admin_eth0.netmask_admin_eth0)
|
||||||
|
cfg.cfgimpl_get_settings()[ip_admin_eth0].append('disabled')
|
||||||
|
raises(PropertiesOptionError, "cfg.ip_admin_eth0.netmask_admin_eth0[0] = '192.168.230.145'")
|
||||||
|
|
||||||
|
|
||||||
def test_master_not_valid_name():
|
def test_master_not_valid_name():
|
||||||
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)
|
||||||
netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
|
netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
|
||||||
|
|
|
@ -162,7 +162,8 @@ class MasterSlaves(object):
|
||||||
force_properties,
|
force_properties,
|
||||||
validate_properties,
|
validate_properties,
|
||||||
None) # not undefined
|
None) # not undefined
|
||||||
return self.get_slave_value(values, opt, value, validate, validate_properties)
|
return self.get_slave_value(values, opt, value, validate,
|
||||||
|
validate_properties, force_permissive)
|
||||||
|
|
||||||
def setitem(self, values, opt, value, path):
|
def setitem(self, values, opt, value, path):
|
||||||
if self.is_master(opt):
|
if self.is_master(opt):
|
||||||
|
@ -183,13 +184,14 @@ class MasterSlaves(object):
|
||||||
opt.impl_getname(), opt, setitem=True)
|
opt.impl_getname(), opt, setitem=True)
|
||||||
|
|
||||||
def get_length(self, values, opt, validate=True, slave_path=undefined,
|
def get_length(self, values, opt, validate=True, slave_path=undefined,
|
||||||
slave_value=undefined):
|
slave_value=undefined, force_permissive=False):
|
||||||
"""get master len with slave option"""
|
"""get master len with slave option"""
|
||||||
masterp = self.getmaster(opt).impl_getpath(values._getcontext())
|
masterp = self.getmaster(opt).impl_getpath(values._getcontext())
|
||||||
if slave_value is undefined:
|
if slave_value is undefined:
|
||||||
slave_path = undefined
|
slave_path = undefined
|
||||||
return len(self.getitem(values, self.getmaster(opt), masterp, validate, False,
|
return len(self.getitem(values, self.getmaster(opt), masterp, validate,
|
||||||
None, True, slave_path, slave_value))
|
force_permissive, None, True, slave_path,
|
||||||
|
slave_value))
|
||||||
|
|
||||||
def validate_slave_length(self, masterlen, valuelen, name, opt, setitem=False):
|
def validate_slave_length(self, masterlen, valuelen, name, opt, setitem=False):
|
||||||
if valuelen > masterlen or (valuelen < masterlen and setitem): # pragma: optional cover
|
if valuelen > masterlen or (valuelen < masterlen and setitem): # pragma: optional cover
|
||||||
|
@ -200,7 +202,7 @@ class MasterSlaves(object):
|
||||||
name, self.getmaster(opt).impl_getname()))
|
name, self.getmaster(opt).impl_getname()))
|
||||||
|
|
||||||
def get_slave_value(self, values, opt, value, validate=True,
|
def get_slave_value(self, values, opt, value, validate=True,
|
||||||
validate_properties=True):
|
validate_properties=True, force_permissive=False):
|
||||||
"""
|
"""
|
||||||
if master has length 0:
|
if master has length 0:
|
||||||
return []
|
return []
|
||||||
|
@ -224,7 +226,8 @@ class MasterSlaves(object):
|
||||||
"""
|
"""
|
||||||
#if slave, had values until master's one
|
#if slave, had values until master's one
|
||||||
path = opt.impl_getpath(values._getcontext())
|
path = opt.impl_getpath(values._getcontext())
|
||||||
masterlen = self.get_length(values, opt, validate, path, value)
|
masterlen = self.get_length(values, opt, validate, path, value,
|
||||||
|
force_permissive)
|
||||||
valuelen = len(value)
|
valuelen = len(value)
|
||||||
if validate:
|
if validate:
|
||||||
self.validate_slave_length(masterlen, valuelen, opt.impl_getname(), opt)
|
self.validate_slave_length(masterlen, valuelen, opt.impl_getname(), opt)
|
||||||
|
|
Loading…
Reference in New Issue