3290 lines
164 KiB
Python
3290 lines
164 KiB
Python
# coding: utf-8
|
|
from .autopath import do_autopath
|
|
do_autopath()
|
|
from .config import config_type, get_config
|
|
|
|
from copy import copy
|
|
from tiramisu.i18n import _
|
|
from tiramisu.setting import groups
|
|
from tiramisu import setting
|
|
setting.expires_time = 1
|
|
from tiramisu import IPOption, OptionDescription, BoolOption, IntOption, StrOption, \
|
|
Leadership, Config, calc_value, Params, ParamOption, Calculation, ParamValue, ParamSelfOption, ParamIndex, \
|
|
calc_value_property_help
|
|
from tiramisu.error import PropertiesOptionError, RequirementError, ConfigError, display_list
|
|
from py.test import raises
|
|
from tiramisu.storage import list_sessions, delete_session
|
|
|
|
|
|
def teardown_function(function):
|
|
assert list_sessions() == [], 'session list is not empty when leaving "{}"'.format(function.__name__)
|
|
|
|
|
|
def test_properties(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
b = IPOption('ip_address_service', '', properties=('disabled',))
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg_ori = Config(od)
|
|
cfg_ori.property.read_write()
|
|
cfg = get_config(cfg_ori, config_type)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
if config_type == 'tiramisu-api':
|
|
cfg.send()
|
|
cfg_ori.unrestraint.option('ip_address_service').property.pop('disabled')
|
|
cfg = get_config(cfg_ori, config_type)
|
|
cfg.option('ip_address_service').value.get()
|
|
if config_type == 'tiramisu-api':
|
|
cfg.send()
|
|
cfg_ori.unrestraint.option('ip_address_service').property.add('disabled')
|
|
cfg = get_config(cfg_ori, config_type)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
# pop twice
|
|
if config_type == 'tiramisu-api':
|
|
cfg.send()
|
|
cfg_ori.unrestraint.option('ip_address_service').property.pop('disabled')
|
|
cfg_ori.unrestraint.option('ip_address_service').property.pop('disabled')
|
|
|
|
|
|
def test_requires_legacy(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
b = IPOption('ip_address_service', '',
|
|
requires=[{'option': a, 'expected': False, 'action': 'disabled'}])
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
assert not cfg.option('activate_service').option.requires()
|
|
assert cfg.option('ip_address_service').option.requires()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('ip_address_service').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
cfg.option('activate_service').value.set(True)
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
|
|
def test_requires(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(a, todict=True),
|
|
'expected': ParamValue(False)}))
|
|
b = IPOption('ip_address_service', '',
|
|
properties=(disabled_property,))
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
assert not cfg.option('activate_service').option.requires()
|
|
assert not cfg.option('ip_address_service').option.requires()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('ip_address_service').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
cfg.option('activate_service').value.set(True)
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
|
|
def test_requires_callback_legacy(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
b = IPOption('ip_address_service', '',
|
|
requires=[{'callback': calc_value, 'callback_params': Params(ParamOption(a)), 'expected': False, 'action': 'disabled'}])
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
assert not cfg.option('activate_service').option.requires()
|
|
assert cfg.option('ip_address_service').option.requires()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('ip_address_service').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
cfg.option('activate_service').value.set(True)
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
|
|
def test_requires_inverse_legacy(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
b = IPOption('ip_address_service', '',
|
|
requires=[{'option': a, 'expected': False, 'action': 'disabled', 'inverse': True}])
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
cfg.option('activate_service').value.set(False)
|
|
cfg.option('ip_address_service').value.get()
|
|
cfg.option('activate_service').value.set(True)
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_inverse(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(a, todict=True),
|
|
'expected': ParamValue(False),
|
|
'inverse_condition': ParamValue(True)}))
|
|
b = IPOption('ip_address_service', '', properties=(disabled_property,))
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
cfg.option('activate_service').value.set(False)
|
|
cfg.option('ip_address_service').value.get()
|
|
cfg.option('activate_service').value.set(True)
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_self_legacy(config_type):
|
|
a = StrOption('ip_address_service', '',
|
|
requires=[{'option': 'self', 'expected': 'b', 'action': 'disabled'}])
|
|
od = OptionDescription('service', '', [a])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
assert cfg.option('ip_address_service').value.get() == None
|
|
cfg.option('ip_address_service').value.set('a')
|
|
assert cfg.option('ip_address_service').value.get() == 'a'
|
|
cfg.option('ip_address_service').value.set('b')
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_self(config_type):
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamSelfOption(),
|
|
'expected': ParamValue('b')}))
|
|
a = StrOption('ip_address_service', '', properties=(disabled_property,))
|
|
od = OptionDescription('service', '', [a])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
assert cfg.option('ip_address_service').value.get() == None
|
|
cfg.option('ip_address_service').value.set('a')
|
|
assert cfg.option('ip_address_service').value.get() == 'a'
|
|
cfg.option('ip_address_service').value.set('b')
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_with_requires_legacy(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
b = IPOption('ip_address_service', '',
|
|
requires=[{'option': a, 'expected': False, 'action': 'disabled'}])
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg.option('ip_address_service').property.add('test')
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('ip_address_service').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
cfg.option('activate_service').value.set(True)
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
|
|
def test_requires_with_requires(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(a),
|
|
'expected': ParamValue(False)}))
|
|
b = IPOption('ip_address_service', '', properties=(disabled_property,))
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg.option('ip_address_service').property.add('test')
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('ip_address_service').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
cfg.option('activate_service').value.set(True)
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
|
|
def test_requires_invalid_legacy():
|
|
a = BoolOption('activate_service', '', True)
|
|
a
|
|
raises(ValueError, "IPOption('ip_address_service', '', requires='string')")
|
|
raises(ValueError, "IPOption('ip_address_service', '', requires=[{'option': a, 'expected': False, 'action': 'disabled', 'unknown': True}])")
|
|
raises(ValueError, "IPOption('ip_address_service', '', requires=[{'option': a, 'expected': False}])")
|
|
raises(ValueError, "IPOption('ip_address_service', '', requires=[{'option': a, 'action': 'disabled'}])")
|
|
raises(ValueError, "IPOption('ip_address_service', '', requires=[{'expected': False, 'action': 'disabled'}])")
|
|
raises(ValueError, "IPOption('ip_address_service', '', requires=[{'option': a, 'expected': False, 'action': 'disabled', 'inverse': 'string'}])")
|
|
raises(ValueError, "IPOption('ip_address_service', '', requires=[{'option': a, 'expected': False, 'action': 'disabled', 'transitive': 'string'}])")
|
|
raises(ValueError, "IPOption('ip_address_service', '', requires=[{'option': a, 'expected': False, 'action': 'disabled', 'same_action': 'string'}])")
|
|
raises(ValueError, "IPOption('ip_address_service', '', requires=[{'option': 'string', 'expected': False, 'action': 'disabled'}])")
|
|
raises(ValueError, "IPOption('ip_address_service', '', requires=[{'option': a, 'expected': 'string', 'action': 'disabled'}])")
|
|
|
|
|
|
def test_requires_same_action_legacy(config_type):
|
|
activate_service = BoolOption('activate_service', '', True)
|
|
activate_service_web = BoolOption('activate_service_web', '', True,
|
|
requires=[{'option': activate_service, 'expected': False,
|
|
'action': 'new'}])
|
|
|
|
ip_address_service_web = IPOption('ip_address_service_web', '',
|
|
requires=[{'option': activate_service_web, 'expected': False,
|
|
'action': 'disabled', 'inverse': False,
|
|
'transitive': True, 'same_action': False}])
|
|
od1 = OptionDescription('service', '', [activate_service, activate_service_web, ip_address_service_web])
|
|
cfg = Config(od1)
|
|
cfg.property.read_write()
|
|
cfg.property.add('new')
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('activate_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
if config_type == 'tiramisu':
|
|
assert frozenset(props) == frozenset(['new'])
|
|
else:
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
submsg = '"disabled" (' + _('the value of "{0}" is {1}').format('activate_service', '"False"') + ')'
|
|
if config_type == 'tiramisu':
|
|
assert str(err) == str(_('cannot access to {0} "{1}" because has {2} {3}').format('option', 'ip_address_service_web', _('property'), submsg))
|
|
#access to cache
|
|
assert str(err) == str(_('cannot access to {0} "{1}" because has {2} {3}').format('option', 'ip_address_service_web', _('property'), submsg))
|
|
else:
|
|
# FIXME
|
|
assert str(err) == 'error'
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_same_action(config_type):
|
|
activate_service = BoolOption('activate_service', '', True)
|
|
new_property = Calculation(calc_value,
|
|
Params(ParamValue('new'),
|
|
kwargs={'condition': ParamOption(activate_service, todict=True),
|
|
'expected': ParamValue(False)}),
|
|
calc_value_property_help)
|
|
activate_service_web = BoolOption('activate_service_web', '', True, properties=(new_property,))
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(activate_service_web, notraisepropertyerror=True, todict=True),
|
|
'expected': ParamValue(False)}),
|
|
calc_value_property_help)
|
|
ip_address_service_web = IPOption('ip_address_service_web', '', properties=(disabled_property,))
|
|
od1 = OptionDescription('service', '', [activate_service, activate_service_web, ip_address_service_web])
|
|
cfg = Config(od1)
|
|
cfg.property.read_write()
|
|
cfg.property.add('new')
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('activate_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
if config_type == 'tiramisu':
|
|
assert frozenset(props) == frozenset(['new'])
|
|
else:
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
submsg = '"disabled" (' + _('the value of "{0}" is {1}').format('activate_service', '"False"') + ')'
|
|
if config_type == 'tiramisu':
|
|
submsg = '"new" (' + _('the value of "{0}" is {1}').format('activate_service', '"False"') + ')'
|
|
submsg = '"disabled" (' + str(_('cannot access to {0} "{1}" because has {2} {3}').format('option', 'activate_service_web', _('property'), submsg)) + ')'
|
|
assert str(err) == str(_('cannot access to {0} "{1}" because has {2} {3}').format('option', 'ip_address_service_web', _('property'), submsg))
|
|
#access to cache
|
|
assert str(err) == str(_('cannot access to {0} "{1}" because has {2} {3}').format('option', 'ip_address_service_web', _('property'), submsg))
|
|
else:
|
|
# FIXME
|
|
assert str(err) == 'error'
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_same_action_callback_legacy(config_type):
|
|
activate_service = BoolOption('activate_service', '', True)
|
|
activate_service_web = BoolOption('activate_service_web', '', True,
|
|
requires=[{'callback': calc_value, 'callback_params': Params(ParamOption(activate_service)), 'expected': False,
|
|
'action': 'new'}])
|
|
|
|
ip_address_service_web = IPOption('ip_address_service_web', '',
|
|
requires=[{'option': activate_service_web, 'expected': False,
|
|
'action': 'disabled', 'inverse': False,
|
|
'transitive': True, 'same_action': False}])
|
|
od1 = OptionDescription('service', '', [activate_service, activate_service_web, ip_address_service_web])
|
|
cfg = Config(od1)
|
|
cfg.property.read_write()
|
|
cfg.property.add('new')
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('activate_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
if config_type == 'tiramisu':
|
|
assert frozenset(props) == frozenset(['new'])
|
|
else:
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
submsg = '"disabled" (' + _('the calculated value is {0}').format('"False"') + ')'
|
|
if config_type == 'tiramisu':
|
|
assert str(err) == str(_('cannot access to {0} "{1}" because has {2} {3}').format('option', 'ip_address_service_web', _('property'), submsg))
|
|
#access to cache
|
|
assert str(err) == str(_('cannot access to {0} "{1}" because has {2} {3}').format('option', 'ip_address_service_web', _('property'), submsg))
|
|
else:
|
|
# FIXME
|
|
assert str(err) == 'error'
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_multiple_requires_legacy(config_type):
|
|
a = StrOption('activate_service', '')
|
|
b = IPOption('ip_address_service', '',
|
|
requires=[{'option': a, 'expected': 'yes', 'action': 'disabled'},
|
|
{'option': a, 'expected': 'ok', 'action': 'disabled'}])
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('ip_address_service').value.get()
|
|
cfg.option('activate_service').value.set('yes')
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set('ok')
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set('no')
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
|
|
def test_multiple_requires(config_type):
|
|
a = StrOption('activate_service', '')
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(a),
|
|
'expected_0': ParamValue('yes'),
|
|
'expected_1': ParamValue('ok')}))
|
|
b = IPOption('ip_address_service', '', properties=(disabled_property,))
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('ip_address_service').value.get()
|
|
cfg.option('activate_service').value.set('yes')
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set('ok')
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set('no')
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
|
|
def test_multiple_requires_cumulative_legacy(config_type):
|
|
a = StrOption('activate_service', '')
|
|
b = IPOption('ip_address_service', '',
|
|
requires=[{'option': a, 'expected': 'yes', 'action': 'disabled'},
|
|
{'option': a, 'expected': 'yes', 'action': 'hidden'}])
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('ip_address_service').value.get()
|
|
cfg.option('activate_service').value.set('yes')
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
if config_type == 'tiramisu':
|
|
assert set(props) == {'hidden', 'disabled'}
|
|
else:
|
|
assert set(props) == {'disabled'}
|
|
|
|
cfg.option('activate_service').value.set('ok')
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
cfg.option('activate_service').value.set('no')
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
|
|
def test_multiple_requires_cumulative(config_type):
|
|
a = StrOption('activate_service', '')
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(a),
|
|
'expected': ParamValue('yes')}))
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(a),
|
|
'expected': ParamValue('yes')}))
|
|
b = IPOption('ip_address_service', '', properties=(disabled_property, hidden_property))
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('ip_address_service').value.get()
|
|
cfg.option('activate_service').value.set('yes')
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
if config_type == 'tiramisu':
|
|
assert set(props) == {'hidden', 'disabled'}
|
|
else:
|
|
assert set(props) == {'disabled'}
|
|
|
|
cfg.option('activate_service').value.set('ok')
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
cfg.option('activate_service').value.set('no')
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
|
|
def test_multiple_requires_cumulative_inverse_legacy(config_type):
|
|
a = StrOption('activate_service', '')
|
|
b = IPOption('ip_address_service', '',
|
|
requires=[{'option': a, 'expected': 'yes', 'action': 'disabled', 'inverse': True},
|
|
{'option': a, 'expected': 'yes', 'action': 'hidden', 'inverse': True}])
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
if config_type == 'tiramisu':
|
|
assert set(props) == {'hidden', 'disabled'}
|
|
else:
|
|
assert set(props) == {'disabled'}
|
|
cfg.option('activate_service').value.set('yes')
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
cfg.option('activate_service').value.set('ok')
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
if config_type == 'tiramisu':
|
|
assert set(props) == {'hidden', 'disabled'}
|
|
else:
|
|
assert set(props) == {'disabled'}
|
|
|
|
cfg.option('activate_service').value.set('no')
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
if config_type == 'tiramisu':
|
|
assert set(props) == {'hidden', 'disabled'}
|
|
else:
|
|
assert set(props) == {'disabled'}
|
|
|
|
|
|
def test_multiple_requires_cumulative_inverse(config_type):
|
|
a = StrOption('activate_service', '')
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(a),
|
|
'expected': ParamValue('yes'),
|
|
'inverse_condition': ParamValue(True)}))
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(a),
|
|
'expected': ParamValue('yes'),
|
|
'inverse_condition': ParamValue(True)}))
|
|
b = IPOption('ip_address_service', '', properties=(disabled_property, hidden_property))
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
if config_type == 'tiramisu':
|
|
assert set(props) == {'hidden', 'disabled'}
|
|
else:
|
|
assert set(props) == {'disabled'}
|
|
cfg.option('activate_service').value.set('yes')
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
cfg.option('activate_service').value.set('ok')
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
if config_type == 'tiramisu':
|
|
assert set(props) == {'hidden', 'disabled'}
|
|
else:
|
|
assert set(props) == {'disabled'}
|
|
|
|
cfg.option('activate_service').value.set('no')
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
if config_type == 'tiramisu':
|
|
assert set(props) == {'hidden', 'disabled'}
|
|
else:
|
|
assert set(props) == {'disabled'}
|
|
|
|
|
|
def test_multiple_requires_inverse_legacy(config_type):
|
|
a = StrOption('activate_service', '')
|
|
b = IPOption('ip_address_service', '',
|
|
requires=[{'option': a, 'expected': 'yes', 'action': 'disabled', 'inverse': True},
|
|
{'option': a, 'expected': 'ok', 'action': 'disabled', 'inverse': True}])
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set('yes')
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
cfg.option('activate_service').value.set('ok')
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
cfg.option('activate_service').value.set('no')
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_multiple_requires_inverse(config_type):
|
|
a = StrOption('activate_service', '')
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(a),
|
|
'expected_0': ParamValue('yes'),
|
|
'expected_1': ParamValue('ok'),
|
|
'inverse_condition': ParamValue(True)}))
|
|
b = IPOption('ip_address_service', '', properties=(disabled_property,))
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set('yes')
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
cfg.option('activate_service').value.set('ok')
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
cfg.option('activate_service').value.set('no')
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_transitive_legacy(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
b = BoolOption('activate_service_web', '', True,
|
|
requires=[{'option': a, 'expected': False, 'action': 'disabled'}])
|
|
|
|
d = IPOption('ip_address_service_web', '',
|
|
requires=[{'option': b, 'expected': False, 'action': 'disabled'}])
|
|
od = OptionDescription('service', '', [a, b, d])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('activate_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_transitive(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(a, notraisepropertyerror=True),
|
|
'expected': ParamValue(False)}))
|
|
b = BoolOption('activate_service_web', '', True, properties=(disabled_property,))
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(b, raisepropertyerror=True),
|
|
'expected': ParamValue(False)}))
|
|
|
|
d = IPOption('ip_address_service_web', '', properties=(disabled_property,))
|
|
od = OptionDescription('service', '', [a, b, d])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('activate_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_transitive_callback_legacy(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
b = BoolOption('activate_service_web', '', True,
|
|
requires=[{'callback': calc_value, 'callback_params': Params(ParamOption(a)), 'expected': False, 'action': 'disabled'}])
|
|
|
|
d = IPOption('ip_address_service_web', '',
|
|
requires=[{'callback': calc_value, 'callback_params': Params(ParamOption(b)), 'expected': False, 'action': 'disabled'}])
|
|
od = OptionDescription('service', '', [a, b, d])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('activate_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_transitive_unrestraint_legacy(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
b = BoolOption('activate_service_web', '', True,
|
|
requires=[{'option': a, 'expected': False, 'action': 'disabled'}])
|
|
|
|
d = IPOption('ip_address_service_web', '',
|
|
requires=[{'option': b, 'expected': False, 'action': 'disabled'}])
|
|
od = OptionDescription('service', '', [a, b, d])
|
|
cfg_ori = Config(od)
|
|
cfg_ori.property.read_write()
|
|
cfg = get_config(cfg_ori, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
if config_type == 'tiramisu-api':
|
|
cfg.send()
|
|
assert cfg_ori.unrestraint.option('activate_service_web').property.get() == {'disabled'}
|
|
assert cfg_ori.unrestraint.option('ip_address_service_web').property.get() == {'disabled'}
|
|
|
|
|
|
def test_requires_transitive_unrestraint(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(a, notraisepropertyerror=True),
|
|
'expected': ParamValue(False)}))
|
|
b = BoolOption('activate_service_web', '', True, properties=(disabled_property,))
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(b, notraisepropertyerror=True),
|
|
'expected': ParamValue(False)}))
|
|
d = IPOption('ip_address_service_web', '', properties=(disabled_property,))
|
|
od = OptionDescription('service', '', [a, b, d])
|
|
cfg_ori = Config(od)
|
|
cfg_ori.property.read_write()
|
|
cfg = get_config(cfg_ori, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
if config_type == 'tiramisu-api':
|
|
cfg.send()
|
|
assert cfg_ori.unrestraint.option('activate_service_web').property.get() == {'disabled'}
|
|
assert cfg_ori.unrestraint.option('ip_address_service_web').property.get() == {'disabled'}
|
|
|
|
|
|
def test_requires_transitive_owner_legacy(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
b = BoolOption('activate_service_web', '', True,
|
|
requires=[{'option': a, 'expected': False, 'action': 'disabled'}])
|
|
|
|
d = IPOption('ip_address_service_web', '',
|
|
requires=[{'option': b, 'expected': False, 'action': 'disabled'}])
|
|
od = OptionDescription('service', '', [a, b, d])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
#no more default value
|
|
cfg.option('ip_address_service_web').value.set('1.1.1.1')
|
|
cfg.option('activate_service').value.set(False)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_transitive_owner(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(a, notraisepropertyerror=True),
|
|
'expected': ParamValue(False)}))
|
|
b = BoolOption('activate_service_web', '', True, properties=(disabled_property,))
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(b, notraisepropertyerror=True),
|
|
'expected': ParamValue(False)}))
|
|
|
|
d = IPOption('ip_address_service_web', '', properties=(disabled_property,))
|
|
od = OptionDescription('service', '', [a, b, d])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
#no more default value
|
|
cfg.option('ip_address_service_web').value.set('1.1.1.1')
|
|
cfg.option('activate_service').value.set(False)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_transitive_bis_legacy(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
abis = BoolOption('activate_service_bis', '', True)
|
|
b = BoolOption('activate_service_web', '', True,
|
|
requires=[{'option': a, 'expected': True, 'action': 'disabled', 'inverse': True}])
|
|
|
|
d = IPOption('ip_address_service_web', '',
|
|
requires=[{'option': b, 'expected': True, 'action': 'disabled', 'inverse': True}])
|
|
od = OptionDescription('service', '', [a, abis, b, d])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
#
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('activate_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_transitive_bis(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
abis = BoolOption('activate_service_bis', '', True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(a, notraisepropertyerror=True),
|
|
'expected': ParamValue(True),
|
|
'inverse_condition': ParamValue(True)}))
|
|
b = BoolOption('activate_service_web', '', True, properties=(disabled_property,))
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(b, notraisepropertyerror=True),
|
|
'expected': ParamValue(True),
|
|
'inverse_condition': ParamValue(True)}))
|
|
d = IPOption('ip_address_service_web', '', properties=(disabled_property,))
|
|
od = OptionDescription('service', '', [a, abis, b, d])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
#
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('activate_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_transitive_hidden_permissive_legacy():
|
|
a = BoolOption('activate_service', '', True)
|
|
b = BoolOption('activate_service_web', '', True,
|
|
requires=[{'option': a, 'expected': False, 'action': 'hidden'}])
|
|
d = IPOption('ip_address_service_web', '',
|
|
requires=[{'option': b, 'expected': False, 'action': 'disabled'}])
|
|
od = OptionDescription('service', '', [a, b, d])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
# FIXME permissive cfg = get_config(cfg, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
cfg.option('ip_address_service_web').value.get()
|
|
|
|
|
|
def test_requires_transitive_hidden_permissive():
|
|
a = BoolOption('activate_service', '', True)
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(a, notraisepropertyerror=True),
|
|
'expected': ParamValue(False)}))
|
|
b = BoolOption('activate_service_web', '', True, properties=(hidden_property,))
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(b, notraisepropertyerror=True),
|
|
'expected': ParamValue(False)}))
|
|
d = IPOption('ip_address_service_web', '', properties=(disabled_property,))
|
|
od = OptionDescription('service', '', [a, b, d])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
# FIXME permissive cfg = get_config(cfg, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
cfg.option('ip_address_service_web').value.get()
|
|
|
|
|
|
def test_requires_transitive_hidden_disabled_legacy(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
b = BoolOption('activate_service_web', '', True,
|
|
requires=[{'option': a, 'expected': False, 'action': 'hidden'}])
|
|
d = IPOption('ip_address_service_web', '',
|
|
requires=[{'option': b, 'expected': False, 'action': 'disabled'}])
|
|
od = OptionDescription('service', '', [a, b, d])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('activate_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
if config_type == 'tiramisu-api':
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
else:
|
|
assert frozenset(props) == frozenset(['hidden'])
|
|
cfg.option('ip_address_service_web').value.get()
|
|
|
|
|
|
def test_requires_transitive_hidden_disabled(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(a, notraisepropertyerror=True),
|
|
'expected': ParamValue(False)}))
|
|
b = BoolOption('activate_service_web', '', True, properties=(hidden_property,))
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(b, notraisepropertyerror=True),
|
|
'expected': ParamValue(False)}))
|
|
d = IPOption('ip_address_service_web', '', properties=(disabled_property,))
|
|
od = OptionDescription('service', '', [a, b, d])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('activate_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
if config_type == 'tiramisu-api':
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
else:
|
|
assert frozenset(props) == frozenset(['hidden'])
|
|
cfg.option('ip_address_service_web').value.get()
|
|
|
|
|
|
def test_requires_transitive_hidden_disabled_multiple_legacy(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
b = BoolOption('activate_service_web', '', True,
|
|
requires=[{'option': a, 'expected': False, 'action': 'hidden'},
|
|
{'option': a, 'expected': False, 'action': 'disabled'}])
|
|
d = IPOption('ip_address_service_web', '',
|
|
requires=[{'option': b, 'expected': False, 'action': 'mandatory'}])
|
|
od = OptionDescription('service', '', [a, b, d])
|
|
cfg_ori = Config(od)
|
|
cfg_ori.property.read_write()
|
|
cfg = get_config(cfg_ori, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
req = None
|
|
if config_type == 'tiramisu-api':
|
|
try:
|
|
cfg.option('activate_service').value.set(False)
|
|
except ConfigError as err:
|
|
req = err
|
|
error_msg = str(_('unable to transform tiramisu object to dict: {}').format(_('cannot access to option "{0}" because required option "{1}" has {2} {3}').format('ip_address_service_web', 'activate_service_web', _('property'), '"disabled"')))
|
|
else:
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('activate_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
if config_type == 'tiramisu-api':
|
|
assert set(props) == {'disabled',}
|
|
else:
|
|
assert set(props) == {'disabled', 'hidden'}
|
|
del props
|
|
#
|
|
try:
|
|
cfg.option('ip_address_service_web').value.get()
|
|
except RequirementError as err:
|
|
req = err
|
|
error_msg = str(_('cannot access to option "{0}" because required option "{1}" has {2} {3}').format('ip_address_service_web', 'activate_service_web', _('property'), '"disabled"'))
|
|
assert req, "ip_address_service_web should raise RequirementError"
|
|
assert str(req) == error_msg
|
|
del req
|
|
#
|
|
cfg_ori.permissive.set(frozenset())
|
|
if config_type == 'tiramisu-api':
|
|
try:
|
|
cfg = get_config(cfg_ori, config_type)
|
|
except ConfigError as err:
|
|
req = err
|
|
error_msg = str(_('unable to transform tiramisu object to dict: {}').format(_('cannot access to option "{0}" because required option "{1}" has {2} {3}').format('ip_address_service_web', 'activate_service_web', _('properties'), '"disabled" {} "hidden"'.format(_('and')))))
|
|
else:
|
|
cfg = get_config(cfg_ori, config_type)
|
|
try:
|
|
cfg.option('ip_address_service_web').value.get()
|
|
except RequirementError as err:
|
|
req = err
|
|
error_msg = str(_('cannot access to option "{0}" because required option "{1}" has {2} {3}').format('ip_address_service_web', 'activate_service_web', _('properties'), '"disabled" {} "hidden"'.format(_('and'))))
|
|
assert req, "ip_address_service_web should raise RequirementError"
|
|
assert str(req) == error_msg
|
|
del req
|
|
|
|
|
|
def test_requires_transitive_hidden_disabled_multiple(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(a, notraisepropertyerror=True),
|
|
'expected': ParamValue(False)}))
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(a, notraisepropertyerror=True),
|
|
'expected': ParamValue(False)}))
|
|
b = BoolOption('activate_service_web', '', True, properties=(hidden_property, disabled_property))
|
|
mandatory_property = Calculation(calc_value,
|
|
Params(ParamValue('mandatory'),
|
|
kwargs={'condition': ParamOption(b),
|
|
'expected': ParamValue(False)}))
|
|
d = IPOption('ip_address_service_web', '', properties=(mandatory_property,))
|
|
od = OptionDescription('service', '', [a, b, d])
|
|
cfg_ori = Config(od)
|
|
cfg_ori.property.read_write()
|
|
cfg = get_config(cfg_ori, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
req = None
|
|
if config_type == 'tiramisu-api':
|
|
try:
|
|
cfg.option('activate_service').value.set(False)
|
|
except ConfigError as err:
|
|
req = err
|
|
error_msg = str(_('unable to transform tiramisu object to dict: {}').format(_('cannot access to option "{0}" because required option "{1}" has {2} {3}').format('ip_address_service_web', 'activate_service_web', _('property'), '"disabled"')))
|
|
else:
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('activate_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
if config_type == 'tiramisu-api':
|
|
assert set(props) == {'disabled',}
|
|
else:
|
|
assert set(props) == {'disabled', 'hidden'}
|
|
del props
|
|
#
|
|
try:
|
|
cfg.option('ip_address_service_web').value.get()
|
|
except ConfigError as err:
|
|
req = err
|
|
error_msg = str(_('unable to carry out a calculation for "{0}", cannot access to option "{1}" because has {2} {3}').format('ip_address_service_web', 'activate_service_web', _('properties'), display_list(['hidden', 'disabled'], add_quote=True)))
|
|
assert req, "ip_address_service_web should raise ConfigError"
|
|
assert str(req) == error_msg
|
|
del req
|
|
#
|
|
cfg_ori.permissive.set(frozenset())
|
|
if config_type == 'tiramisu-api':
|
|
try:
|
|
cfg = get_config(cfg_ori, config_type)
|
|
except ConfigError as err:
|
|
req = err
|
|
error_msg = str(_('unable to transform tiramisu object to dict: {}').format(_('cannot access to option "{0}" because required option "{1}" has {2} {3}').format('ip_address_service_web', 'activate_service_web', _('properties'), '"disabled" {} "hidden"'.format(_('and')))))
|
|
else:
|
|
cfg = get_config(cfg_ori, config_type)
|
|
try:
|
|
cfg.option('ip_address_service_web').value.get()
|
|
except ConfigError as err:
|
|
req = err
|
|
error_msg = str(_('unable to carry out a calculation for "{0}", cannot access to option "{1}" because has {2} {3}').format('ip_address_service_web', 'activate_service_web', _('properties'), display_list(['hidden', 'disabled'], add_quote=True)))
|
|
assert req, "ip_address_service_web should raise RequirementError"
|
|
assert str(req) == error_msg
|
|
del req
|
|
|
|
|
|
def test_requires_not_transitive_legacy(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
b = BoolOption('activate_service_web', '', True,
|
|
requires=[{'option': a, 'expected': False, 'action': 'disabled'}])
|
|
d = IPOption('ip_address_service_web', '',
|
|
requires=[{'option': b, 'expected': False,
|
|
'action': 'disabled', 'transitive': False}])
|
|
od = OptionDescription('service', '', [a, b, d])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('activate_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
#
|
|
cfg.option('ip_address_service_web').value.get()
|
|
|
|
|
|
def test_requires_not_transitive(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(a, notraisepropertyerror=True),
|
|
'expected': ParamValue(False)}))
|
|
b = BoolOption('activate_service_web', '', True, properties=(disabled_property,))
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(b, notraisepropertyerror=True),
|
|
'no_condition_is_invalid': ParamValue(True),
|
|
'expected': ParamValue(False)}))
|
|
d = IPOption('ip_address_service_web', '', properties=(disabled_property,))
|
|
od = OptionDescription('service', '', [a, b, d])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('activate_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
#
|
|
cfg.option('ip_address_service_web').value.get()
|
|
|
|
|
|
def test_requires_not_transitive_not_same_action_legacy(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
b = BoolOption('activate_service_web', '', True,
|
|
requires=[{'option': a, 'expected': False, 'action': 'disabled'}])
|
|
d = IPOption('ip_address_service_web', '',
|
|
requires=[{'option': b, 'expected': False,
|
|
'action': 'hidden', 'transitive': False}])
|
|
od = OptionDescription('service', '', [a, b, d])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
if config_type == 'tiramisu-api':
|
|
raises(ConfigError, "cfg.option('activate_service').value.set(False)")
|
|
else:
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('activate_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
#
|
|
raises(RequirementError, "cfg.option('ip_address_service_web').value.get()")
|
|
|
|
|
|
def test_requires_not_transitive_not_same_action(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(a, notraisepropertyerror=True),
|
|
'expected': ParamValue(False)}))
|
|
b = BoolOption('activate_service_web', '', True, properties=(disabled_property,))
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(b),
|
|
'expected': ParamValue(False)}))
|
|
d = IPOption('ip_address_service_web', '', properties=(hidden_property,))
|
|
od = OptionDescription('service', '', [a, b, d])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('activate_service').value.get()
|
|
cfg.option('activate_service_web').value.get()
|
|
cfg.option('ip_address_service_web').value.get()
|
|
if config_type == 'tiramisu-api':
|
|
raises(ConfigError, "cfg.option('activate_service').value.set(False)")
|
|
else:
|
|
cfg.option('activate_service').value.set(False)
|
|
#
|
|
props = []
|
|
try:
|
|
cfg.option('activate_service_web').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
#
|
|
raises(ConfigError, "cfg.option('ip_address_service_web').value.get()")
|
|
|
|
|
|
def test_requires_none_legacy(config_type):
|
|
a = BoolOption('activate_service', '')
|
|
b = IPOption('ip_address_service', '',
|
|
requires=[{'option': a, 'expected': None, 'action': 'disabled'}])
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
cfg.option('activate_service').value.set(False)
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
|
|
def test_requires_none(config_type):
|
|
a = BoolOption('activate_service', '')
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(a, notraisepropertyerror=True),
|
|
'expected': ParamValue(None)}))
|
|
b = IPOption('ip_address_service', '', properties=(disabled_property,))
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
cfg.option('activate_service').value.set(False)
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
|
|
def test_requires_multi_disabled_legacy(config_type):
|
|
a = BoolOption('activate_service', '')
|
|
b = IntOption('num_service', '')
|
|
c = IPOption('ip_address_service', '',
|
|
requires=[{'option': a, 'expected': True, 'action': 'disabled'},
|
|
{'option': b, 'expected': 1, 'action': 'disabled'}])
|
|
od = OptionDescription('service', '', [a, b, c])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
cfg.option('activate_service').value.set(True)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set(False)
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
cfg.option('num_service').value.set(1)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set(True)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_multi_disabled(config_type):
|
|
a = BoolOption('activate_service', '')
|
|
b = IntOption('num_service', '')
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition_0': ParamOption(a, notraisepropertyerror=True),
|
|
'condition_1': ParamOption(b, notraisepropertyerror=True),
|
|
'expected_0': ParamValue(True),
|
|
'expected_1': ParamValue(1),
|
|
'condition_operator': ParamValue('OR')}))
|
|
c = IPOption('ip_address_service', '', properties=(disabled_property,))
|
|
od = OptionDescription('service', '', [a, b, c])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
cfg.option('activate_service').value.set(True)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set(False)
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
cfg.option('num_service').value.set(1)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set(True)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_multi_disabled_callback_legacy(config_type):
|
|
a = BoolOption('activate_service', '')
|
|
b = IntOption('num_service', '')
|
|
c = IPOption('ip_address_service', '',
|
|
requires=[{'callback': calc_value, 'callback_params': Params(ParamOption(a)), 'expected': True, 'action': 'disabled'},
|
|
{'callback': calc_value, 'callback_params': Params(ParamOption(b)), 'expected': 1, 'action': 'disabled'}])
|
|
od = OptionDescription('service', '', [a, b, c])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
cfg.option('activate_service').value.set(True)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set(False)
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
cfg.option('num_service').value.set(1)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set(True)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_multi_disabled_new_format_legacy(config_type):
|
|
a = BoolOption('activate_service', '')
|
|
b = IntOption('num_service', '')
|
|
c = IPOption('ip_address_service', '',
|
|
requires=[{'expected': [{'option': a, 'value': True}, {'option': b, 'value': 1}], 'action': 'disabled'}])
|
|
od = OptionDescription('service', '', [a, b, c])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
cfg.option('activate_service').value.set(True)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set(False)
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
cfg.option('num_service').value.set(1)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set(True)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_unknown_operator_legacy():
|
|
a = BoolOption('activate_service', '')
|
|
b = IntOption('num_service', '')
|
|
raises(ValueError, """IPOption('ip_address_service', '',
|
|
requires=[{'expected': [{'option': a, 'value': True}, {'option': b, 'value': 1}],
|
|
'action': 'disabled', 'operator': 'unknown'}])""")
|
|
|
|
|
|
def test_requires_keys_legacy():
|
|
a = BoolOption('activate_service', '')
|
|
b = IntOption('num_service', '')
|
|
raises(ValueError, """IPOption('ip_address_service', '',
|
|
requires=[{'expected': [{'option': a, 'value2': True}, {'option': b, 'value': 1}],
|
|
'action': 'disabled', 'operator': 'and'}])""")
|
|
|
|
|
|
def test_requires_unvalid_legacy():
|
|
a = BoolOption('activate_service', '')
|
|
b = IntOption('num_service', '')
|
|
raises(ValueError, """IPOption('ip_address_service', '',
|
|
requires=[{'expected': [{'option': a, 'value': 'unvalid'}, {'option': b, 'value': 1}],
|
|
'action': 'disabled', 'operator': 'and'}])""")
|
|
|
|
|
|
def test_requires_multi_disabled_new_format_and_legacy(config_type):
|
|
a = BoolOption('activate_service', '')
|
|
b = IntOption('num_service', '')
|
|
c = IPOption('ip_address_service', '',
|
|
requires=[{'expected': [{'option': a, 'value': True}, {'option': b, 'value': 1}], 'action': 'disabled', 'operator': 'and'}])
|
|
od = OptionDescription('service', '', [a, b, c])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
cfg.option('activate_service').value.set(True)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert props == []
|
|
|
|
cfg.option('activate_service').value.set(False)
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
cfg.option('num_service').value.set(1)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert props == []
|
|
|
|
cfg.option('activate_service').value.set(True)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_multi_disabled_new_format_and_2_legacy(config_type):
|
|
a = BoolOption('activate_service', '')
|
|
b = IntOption('num_service', '')
|
|
c = IPOption('ip_address_service', '',
|
|
requires=[{'expected': [{'option': a, 'value': True}, {'option': b, 'value': 1}], 'action': 'disabled', 'operator': 'and'},
|
|
{'expected': [{'option': a, 'value': False}, {'option': b, 'value': 1}], 'action': 'expert'}])
|
|
od = OptionDescription('service', '', [a, b, c])
|
|
cfg = Config(od)
|
|
cfg.property.add('expert')
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
cfg.option('activate_service').value.set(True)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert props == []
|
|
|
|
cfg.option('activate_service').value.set(False)
|
|
cfg.option('num_service').value.set(1)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
if config_type == 'tiramisu-api':
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
else:
|
|
assert frozenset(props) == frozenset(['expert'])
|
|
|
|
cfg.option('activate_service').value.set(True)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
if config_type == 'tiramisu-api':
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
else:
|
|
assert frozenset(props) == frozenset(['disabled', 'expert'])
|
|
|
|
|
|
def test_requires_multi_disabled_inverse_legacy(config_type):
|
|
a = BoolOption('activate_service', '')
|
|
b = IntOption('num_service', '')
|
|
c = IPOption('ip_address_service', '',
|
|
requires=[{'option': a, 'expected': True,
|
|
'action': 'disabled', 'inverse': True},
|
|
{'option': b, 'expected': 1,
|
|
'action': 'disabled', 'inverse': True}])
|
|
od = OptionDescription('service', '', [a, b, c])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set(True)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set(False)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('num_service').value.set(1)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set(True)
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
|
|
def test_requires_multi_disabled_inverse(config_type):
|
|
a = BoolOption('activate_service', '')
|
|
b = IntOption('num_service', '')
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition_0': ParamOption(a, notraisepropertyerror=True),
|
|
'condition_1': ParamOption(b, notraisepropertyerror=True),
|
|
'expected_0': ParamValue(True),
|
|
'expected_1': ParamValue(1),
|
|
'condition_operator': ParamValue('OR'),
|
|
'inverse_condition_0': ParamValue(True),
|
|
'inverse_condition_1': ParamValue(True)}))
|
|
c = IPOption('ip_address_service', '', properties=(disabled_property,))
|
|
od = OptionDescription('service', '', [a, b, c])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set(True)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set(False)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('num_service').value.set(1)
|
|
props = []
|
|
try:
|
|
cfg.option('ip_address_service').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
cfg.option('activate_service').value.set(True)
|
|
cfg.option('ip_address_service').value.get()
|
|
|
|
|
|
def test_requires_multi_disabled_2_legacy(config_type):
|
|
a = BoolOption('a', '')
|
|
b = BoolOption('b', '')
|
|
c = BoolOption('c', '')
|
|
d = BoolOption('d', '')
|
|
e = BoolOption('e', '')
|
|
f = BoolOption('f', '')
|
|
g = BoolOption('g', '')
|
|
h = BoolOption('h', '')
|
|
i = BoolOption('i', '')
|
|
j = BoolOption('j', '')
|
|
k = BoolOption('k', '')
|
|
l = BoolOption('l', '')
|
|
m = BoolOption('m', '')
|
|
list_bools = [a, b, c, d, e, f, g, h, i, j, k, l, m]
|
|
requires = []
|
|
for boo in list_bools:
|
|
requires.append({'option': boo, 'expected': True, 'action': 'disabled'})
|
|
z = IPOption('z', '', requires=requires)
|
|
y = copy(list_bools)
|
|
y.append(z)
|
|
od = OptionDescription('service', '', y)
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
|
|
cfg.option('z').value.get()
|
|
for boo in list_bools:
|
|
cfg.option(boo.impl_getname()).value.set(True)
|
|
props = []
|
|
try:
|
|
cfg.option('z').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
for boo in list_bools:
|
|
cfg.option(boo.impl_getname()).value.set(False)
|
|
if boo == m:
|
|
cfg.option('z').value.get()
|
|
else:
|
|
props = []
|
|
try:
|
|
cfg.option('z').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_multi_disabled_2(config_type):
|
|
a = BoolOption('a', '')
|
|
b = BoolOption('b', '')
|
|
c = BoolOption('c', '')
|
|
d = BoolOption('d', '')
|
|
e = BoolOption('e', '')
|
|
f = BoolOption('f', '')
|
|
g = BoolOption('g', '')
|
|
h = BoolOption('h', '')
|
|
i = BoolOption('i', '')
|
|
j = BoolOption('j', '')
|
|
k = BoolOption('k', '')
|
|
l = BoolOption('l', '')
|
|
m = BoolOption('m', '')
|
|
list_bools = [a, b, c, d, e, f, g, h, i, j, k, l, m]
|
|
requires = []
|
|
kwargs={'expected': ParamValue(True),
|
|
'condition_operator': ParamValue('OR')}
|
|
for idx, boo in enumerate(list_bools):
|
|
kwargs['condition_{}'.format(idx)] = ParamOption(boo, notraisepropertyerror=True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs=kwargs))
|
|
z = IPOption('z', '', properties=(disabled_property,))
|
|
y = copy(list_bools)
|
|
y.append(z)
|
|
od = OptionDescription('service', '', y)
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
|
|
cfg.option('z').value.get()
|
|
for boo in list_bools:
|
|
cfg.option(boo.impl_getname()).value.set(True)
|
|
props = []
|
|
try:
|
|
cfg.option('z').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
for boo in list_bools:
|
|
cfg.option(boo.impl_getname()).value.set(False)
|
|
if boo == m:
|
|
cfg.option('z').value.get()
|
|
else:
|
|
props = []
|
|
try:
|
|
cfg.option('z').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_multi_disabled_inverse_2_legacy(config_type):
|
|
a = BoolOption('a', '')
|
|
b = BoolOption('b', '')
|
|
c = BoolOption('c', '')
|
|
d = BoolOption('d', '')
|
|
e = BoolOption('e', '')
|
|
f = BoolOption('f', '')
|
|
g = BoolOption('g', '')
|
|
h = BoolOption('h', '')
|
|
i = BoolOption('i', '')
|
|
j = BoolOption('j', '')
|
|
k = BoolOption('k', '')
|
|
l = BoolOption('l', '')
|
|
m = BoolOption('m', '')
|
|
list_bools = [a, b, c, d, e, f, g, h, i, j, k, l, m]
|
|
requires = []
|
|
for boo in list_bools:
|
|
requires.append({'option': boo, 'expected': True, 'action': 'disabled',
|
|
'inverse': True})
|
|
z = IPOption('z', '', requires=requires)
|
|
y = copy(list_bools)
|
|
y.append(z)
|
|
od = OptionDescription('service', '', y)
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
|
|
props = []
|
|
try:
|
|
cfg.option('z').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
for boo in list_bools:
|
|
cfg.option(boo.impl_getname()).value.set(True)
|
|
if boo == m:
|
|
cfg.option('z').value.get()
|
|
else:
|
|
props = []
|
|
try:
|
|
cfg.option('z').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
for boo in list_bools:
|
|
cfg.option(boo.impl_getname()).value.set(False)
|
|
props = []
|
|
try:
|
|
cfg.option('z').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
|
|
|
|
def test_requires_multi_disabled_inverse_2(config_type):
|
|
a = BoolOption('a', '')
|
|
b = BoolOption('b', '')
|
|
c = BoolOption('c', '')
|
|
d = BoolOption('d', '')
|
|
e = BoolOption('e', '')
|
|
f = BoolOption('f', '')
|
|
g = BoolOption('g', '')
|
|
h = BoolOption('h', '')
|
|
i = BoolOption('i', '')
|
|
j = BoolOption('j', '')
|
|
k = BoolOption('k', '')
|
|
l = BoolOption('l', '')
|
|
m = BoolOption('m', '')
|
|
list_bools = [a, b, c, d, e, f, g, h, i, j, k, l, m]
|
|
requires = []
|
|
kwargs={'expected': ParamValue(True),
|
|
'condition_operator': ParamValue('OR')}
|
|
for idx, boo in enumerate(list_bools):
|
|
kwargs['condition_{}'.format(idx)] = ParamOption(boo, notraisepropertyerror=True)
|
|
kwargs['inverse_condition_{}'.format(idx)] = ParamValue(True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs=kwargs))
|
|
#for boo in list_bools:
|
|
# requires.append({'option': boo, 'expected': True, 'action': 'disabled',
|
|
# 'inverse': True})
|
|
z = IPOption('z', '', properties=(disabled_property,))
|
|
y = copy(list_bools)
|
|
y.append(z)
|
|
od = OptionDescription('service', '', y)
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
|
|
props = []
|
|
try:
|
|
cfg.option('z').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
for boo in list_bools:
|
|
cfg.option(boo.impl_getname()).value.set(True)
|
|
if boo != m:
|
|
# it's disabled until last option is modified
|
|
props = []
|
|
try:
|
|
cfg.option('z').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
cfg.option('z').value.get()
|
|
for boo in list_bools:
|
|
cfg.option(boo.impl_getname()).value.set(False)
|
|
props = []
|
|
try:
|
|
cfg.option('z').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
try:
|
|
cfg.option('z').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
for boo in reversed(list_bools):
|
|
cfg.option(boo.impl_getname()).value.set(True)
|
|
if boo != a:
|
|
# it's disabled until last option is modified
|
|
props = []
|
|
try:
|
|
cfg.option('z').value.get()
|
|
except PropertiesOptionError as err:
|
|
props = err.proptype
|
|
assert frozenset(props) == frozenset(['disabled'])
|
|
cfg.option('z').value.get()
|
|
|
|
|
|
def test_requires_requirement_append_legacy(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
b = IPOption('ip_address_service', '',
|
|
requires=[{'option': a, 'expected': False, 'action': 'disabled'}])
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg_ori = Config(od)
|
|
cfg_ori.property.read_write()
|
|
cfg = get_config(cfg_ori, config_type)
|
|
cfg.property.get()
|
|
cfg.option('ip_address_service').property.get()
|
|
if config_type == 'tiramisu-api':
|
|
cfg.send()
|
|
#raises(ValueError, "cfg_ori.option('ip_address_service').property.add('disabled')")
|
|
cfg = get_config(cfg_ori, config_type)
|
|
cfg.option('activate_service').value.set(False)
|
|
# disabled is now set, test to remove disabled before store in storage
|
|
if config_type == 'tiramisu-api':
|
|
cfg.send()
|
|
cfg_ori.unrestraint.option('ip_address_service').property.add("test")
|
|
|
|
|
|
def test_requires_requirement_append(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(a, notraisepropertyerror=True),
|
|
'expected': ParamValue(False)}))
|
|
b = IPOption('ip_address_service', '', properties=(disabled_property,))
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg_ori = Config(od)
|
|
cfg_ori.property.read_write()
|
|
cfg = get_config(cfg_ori, config_type)
|
|
cfg.property.get()
|
|
cfg.option('ip_address_service').property.get()
|
|
if config_type == 'tiramisu-api':
|
|
cfg.send()
|
|
#raises(ValueError, "cfg_ori.option('ip_address_service').property.add('disabled')")
|
|
cfg = get_config(cfg_ori, config_type)
|
|
cfg.option('activate_service').value.set(False)
|
|
# disabled is now set, test to remove disabled before store in storage
|
|
if config_type == 'tiramisu-api':
|
|
cfg.send()
|
|
cfg_ori.unrestraint.option('ip_address_service').property.add("test")
|
|
|
|
|
|
def test_requires_different_inverse_legacy(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
b = IPOption('ip_address_service', '', requires=[
|
|
{'option': a, 'expected': True, 'action': 'disabled', 'inverse': True},
|
|
{'option': a, 'expected': True, 'action': 'disabled', 'inverse': False}])
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
raises(PropertiesOptionError, "cfg.option('ip_address_service').value.get()")
|
|
cfg.option('activate_service').value.set(False)
|
|
raises(PropertiesOptionError, "cfg.option('ip_address_service').value.get()")
|
|
|
|
|
|
def test_requires_different_inverse(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition_0': ParamOption(a, notraisepropertyerror=True),
|
|
'condition_1': ParamOption(a, notraisepropertyerror=True),
|
|
'expected_0': ParamValue(True),
|
|
'expected_1': ParamValue(True),
|
|
'condition_operator': ParamValue('OR'),
|
|
'inverse_condition_0': ParamValue(True)}))
|
|
b = IPOption('ip_address_service', '', properties=(disabled_property,))
|
|
od = OptionDescription('service', '', [a, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
#raises(PropertiesOptionError, "cfg.option('ip_address_service').value.get()")
|
|
cfg.option('activate_service').value.set(False)
|
|
raises(PropertiesOptionError, "cfg.option('ip_address_service').value.get()")
|
|
|
|
|
|
def test_requires_different_inverse_unicode_legacy(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
d = StrOption('activate_other_service', '', 'val2')
|
|
b = IPOption('ip_address_service', '', requires=[
|
|
{'option': a, 'expected': True, 'action': 'disabled', 'inverse': True},
|
|
{'option': d, 'expected': 'val1', 'action': 'disabled', 'inverse': False}])
|
|
od = OptionDescription('service', '', [a, d, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
assert cfg.option('ip_address_service').value.get() == None
|
|
cfg.option('activate_service').value.set(False)
|
|
raises(PropertiesOptionError, "cfg.option('ip_address_service').value.get()")
|
|
cfg.option('activate_service').value.set(True)
|
|
assert cfg.option('ip_address_service').value.get() == None
|
|
cfg.option('activate_other_service').value.set('val1')
|
|
raises(PropertiesOptionError, "cfg.option('ip_address_service').value.get()")
|
|
cfg.option('activate_service').value.set(False)
|
|
raises(PropertiesOptionError, "cfg.option('ip_address_service').value.get()")
|
|
|
|
|
|
def test_requires_different_inverse_unicode(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
d = StrOption('activate_other_service', '', 'val2')
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition_0': ParamOption(a, notraisepropertyerror=True),
|
|
'condition_1': ParamOption(d, notraisepropertyerror=True),
|
|
'expected_0': ParamValue(True),
|
|
'expected_1': ParamValue('val1'),
|
|
'condition_operator': ParamValue('OR'),
|
|
'inverse_condition_0': ParamValue(True)}))
|
|
b = IPOption('ip_address_service', '', properties=(disabled_property,))
|
|
od = OptionDescription('service', '', [a, d, b])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
assert cfg.option('ip_address_service').value.get() == None
|
|
cfg.option('activate_service').value.set(False)
|
|
raises(PropertiesOptionError, "cfg.option('ip_address_service').value.get()")
|
|
cfg.option('activate_service').value.set(True)
|
|
assert cfg.option('ip_address_service').value.get() == None
|
|
cfg.option('activate_other_service').value.set('val1')
|
|
raises(PropertiesOptionError, "cfg.option('ip_address_service').value.get()")
|
|
cfg.option('activate_service').value.set(False)
|
|
raises(PropertiesOptionError, "cfg.option('ip_address_service').value.get()")
|
|
|
|
|
|
def test_requires_recursive_path_legacy(config_type):
|
|
a = BoolOption('activate_service', '', True)
|
|
b = IPOption('ip_address_service', '',
|
|
requires=[{'option': a, 'expected': False, 'action': 'disabled'}])
|
|
od1 = OptionDescription('service', '', [a, b], requires=[{'option': a, 'expected': False, 'action': 'disabled'}])
|
|
od = OptionDescription('base', '', [od1])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
if config_type == 'tiramisu-api':
|
|
raises(ConfigError, "get_config(cfg, config_type)")
|
|
else:
|
|
cfg = get_config(cfg, config_type)
|
|
raises(RequirementError, "cfg.option('service.a').value.get()")
|
|
|
|
|
|
def test_optiondescription_requires_legacy():
|
|
a = BoolOption('activate_service', '', True)
|
|
b = BoolOption('ip_address_service', '', multi=True)
|
|
OptionDescription('service', '', [b], requires=[{'option': a, 'expected': False, 'action': 'disabled'}])
|
|
|
|
|
|
def test_optiondescription_requires():
|
|
a = BoolOption('activate_service', '', True)
|
|
b = BoolOption('ip_address_service', '', multi=True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(a, notraisepropertyerror=True),
|
|
'expected': ParamValue(False)}))
|
|
OptionDescription('service', '', [b], properties=(disabled_property,))
|
|
|
|
|
|
def test_optiondescription_requires_multi_legacy():
|
|
# FIXME not legacy !!!
|
|
a = BoolOption('activate_service', '', True)
|
|
b = IPOption('ip_address_service', '', multi=True)
|
|
a, b
|
|
raises(ValueError, "OptionDescription('service', '', [a], requires=[{'option': b, 'expected': False, 'action': 'disabled'}])")
|
|
|
|
|
|
def test_properties_conflict_legacy():
|
|
a = BoolOption('activate_service', '', True)
|
|
a
|
|
raises(ValueError, "IPOption('ip_address_service', '', properties=('disabled',), requires=[{'option': a, 'expected': False, 'action': 'disabled'}])")
|
|
raises(ValueError, "od1 = OptionDescription('service', '', [a], properties=('disabled',), requires=[{'option': a, 'expected': False, 'action': 'disabled'}])")
|
|
|
|
|
|
def test_leadership_requires_legacy(config_type):
|
|
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,
|
|
requires=[{'option': ip_admin_eth0, 'expected': '192.168.1.1', 'action': 'disabled'}])
|
|
interface1 = Leadership('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
|
|
od = OptionDescription('toto', '', [interface1])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == []
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.1.2']
|
|
#
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2', '192.168.1.1'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get()")
|
|
#
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2', '192.168.1.2'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get() is None
|
|
cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.set('255.255.255.255')
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get() == '255.255.255.255'
|
|
assert cfg.value.dict() == {'ip_admin_eth0.ip_admin_eth0': ['192.168.1.2', '192.168.1.2'],
|
|
'ip_admin_eth0.netmask_admin_eth0': [None, '255.255.255.255']}
|
|
#
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2', '192.168.1.1'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get()")
|
|
ret = cfg.value.dict()
|
|
assert set(ret.keys()) == set(['ip_admin_eth0.ip_admin_eth0', 'ip_admin_eth0.netmask_admin_eth0'])
|
|
assert ret['ip_admin_eth0.ip_admin_eth0'] == ['192.168.1.2', '192.168.1.1']
|
|
assert len(ret['ip_admin_eth0.netmask_admin_eth0']) == 2
|
|
assert ret['ip_admin_eth0.netmask_admin_eth0'][0] is None
|
|
assert isinstance(ret['ip_admin_eth0.netmask_admin_eth0'][1], PropertiesOptionError)
|
|
del ret['ip_admin_eth0.netmask_admin_eth0'][1]
|
|
del ret['ip_admin_eth0.netmask_admin_eth0'][0]
|
|
del ret['ip_admin_eth0.netmask_admin_eth0']
|
|
#
|
|
cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set('255.255.255.255')
|
|
ret = cfg.value.dict()
|
|
assert set(ret.keys()) == set(['ip_admin_eth0.ip_admin_eth0', 'ip_admin_eth0.netmask_admin_eth0'])
|
|
assert ret['ip_admin_eth0.ip_admin_eth0'] == ['192.168.1.2', '192.168.1.1']
|
|
assert len(ret['ip_admin_eth0.netmask_admin_eth0']) == 2
|
|
assert ret['ip_admin_eth0.netmask_admin_eth0'][0] == '255.255.255.255'
|
|
assert isinstance(ret['ip_admin_eth0.netmask_admin_eth0'][1], PropertiesOptionError)
|
|
del ret['ip_admin_eth0.netmask_admin_eth0'][1]
|
|
del ret['ip_admin_eth0.netmask_admin_eth0'][0]
|
|
del ret['ip_admin_eth0.netmask_admin_eth0']
|
|
|
|
|
|
def test_leadership_requires(config_type):
|
|
ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(ip_admin_eth0, notraisepropertyerror=True),
|
|
'expected': ParamValue('192.168.1.1'),
|
|
'no_condition_is_invalid': ParamValue(True),
|
|
'index': ParamIndex()}))
|
|
netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True, properties=(disabled_property,))
|
|
interface1 = Leadership('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
|
|
od = OptionDescription('toto', '', [interface1])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == []
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.1.2']
|
|
#
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2', '192.168.1.1'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get()")
|
|
#
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2', '192.168.1.2'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get() is None
|
|
cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.set('255.255.255.255')
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get() == '255.255.255.255'
|
|
assert cfg.value.dict() == {'ip_admin_eth0.ip_admin_eth0': ['192.168.1.2', '192.168.1.2'],
|
|
'ip_admin_eth0.netmask_admin_eth0': [None, '255.255.255.255']}
|
|
#
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2', '192.168.1.1'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get()")
|
|
ret = cfg.value.dict()
|
|
assert set(ret.keys()) == set(['ip_admin_eth0.ip_admin_eth0', 'ip_admin_eth0.netmask_admin_eth0'])
|
|
assert ret['ip_admin_eth0.ip_admin_eth0'] == ['192.168.1.2', '192.168.1.1']
|
|
assert len(ret['ip_admin_eth0.netmask_admin_eth0']) == 2
|
|
assert ret['ip_admin_eth0.netmask_admin_eth0'][0] is None
|
|
assert isinstance(ret['ip_admin_eth0.netmask_admin_eth0'][1], PropertiesOptionError)
|
|
del ret['ip_admin_eth0.netmask_admin_eth0'][1]
|
|
del ret['ip_admin_eth0.netmask_admin_eth0'][0]
|
|
del ret['ip_admin_eth0.netmask_admin_eth0']
|
|
#
|
|
cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set('255.255.255.255')
|
|
ret = cfg.value.dict()
|
|
assert set(ret.keys()) == set(['ip_admin_eth0.ip_admin_eth0', 'ip_admin_eth0.netmask_admin_eth0'])
|
|
assert ret['ip_admin_eth0.ip_admin_eth0'] == ['192.168.1.2', '192.168.1.1']
|
|
assert len(ret['ip_admin_eth0.netmask_admin_eth0']) == 2
|
|
assert ret['ip_admin_eth0.netmask_admin_eth0'][0] == '255.255.255.255'
|
|
assert isinstance(ret['ip_admin_eth0.netmask_admin_eth0'][1], PropertiesOptionError)
|
|
del ret['ip_admin_eth0.netmask_admin_eth0'][1]
|
|
del ret['ip_admin_eth0.netmask_admin_eth0'][0]
|
|
del ret['ip_admin_eth0.netmask_admin_eth0']
|
|
|
|
|
|
def test_leadership_requires_callback_legacy(config_type):
|
|
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,
|
|
requires=[{'callback': calc_value, 'callback_params': Params(ParamOption(ip_admin_eth0)), 'expected': '192.168.1.1', 'action': 'disabled'}])
|
|
interface1 = Leadership('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
|
|
od = OptionDescription('toto', '', [interface1])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == []
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.1.2']
|
|
#
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2', '192.168.1.1'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get()")
|
|
#
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2', '192.168.1.2'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get() is None
|
|
cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.set('255.255.255.255')
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get() == '255.255.255.255'
|
|
assert cfg.value.dict() == {'ip_admin_eth0.ip_admin_eth0': ['192.168.1.2', '192.168.1.2'],
|
|
'ip_admin_eth0.netmask_admin_eth0': [None, '255.255.255.255']}
|
|
#
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2', '192.168.1.1'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get()")
|
|
ret = cfg.value.dict()
|
|
assert set(ret.keys()) == set(['ip_admin_eth0.ip_admin_eth0', 'ip_admin_eth0.netmask_admin_eth0'])
|
|
assert ret['ip_admin_eth0.ip_admin_eth0'] == ['192.168.1.2', '192.168.1.1']
|
|
assert len(ret['ip_admin_eth0.netmask_admin_eth0']) == 2
|
|
assert ret['ip_admin_eth0.netmask_admin_eth0'][0] is None
|
|
assert isinstance(ret['ip_admin_eth0.netmask_admin_eth0'][1], PropertiesOptionError)
|
|
del ret['ip_admin_eth0.netmask_admin_eth0'][1]
|
|
del ret['ip_admin_eth0.netmask_admin_eth0'][0]
|
|
del ret['ip_admin_eth0.netmask_admin_eth0']
|
|
#
|
|
cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set('255.255.255.255')
|
|
ret = cfg.value.dict()
|
|
assert set(ret.keys()) == set(['ip_admin_eth0.ip_admin_eth0', 'ip_admin_eth0.netmask_admin_eth0'])
|
|
assert ret['ip_admin_eth0.ip_admin_eth0'] == ['192.168.1.2', '192.168.1.1']
|
|
assert len(ret['ip_admin_eth0.netmask_admin_eth0']) == 2
|
|
assert ret['ip_admin_eth0.netmask_admin_eth0'][0] == '255.255.255.255'
|
|
assert isinstance(ret['ip_admin_eth0.netmask_admin_eth0'][1], PropertiesOptionError)
|
|
del ret['ip_admin_eth0.netmask_admin_eth0'][1]
|
|
del ret['ip_admin_eth0.netmask_admin_eth0'][0]
|
|
del ret['ip_admin_eth0.netmask_admin_eth0']
|
|
|
|
|
|
def test_leadership_requires_both_legacy():
|
|
# FIXME ne devrait pas pouvoir mettre de propriété calculé sur une master ...
|
|
ip_admin = StrOption('ip_admin_eth0', "ip réseau autorisé")
|
|
ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True,
|
|
requires=[{'option': ip_admin, 'expected': '192.168.1.1', 'action': 'disabled'}])
|
|
netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
|
|
raises(RequirementError, "Leadership('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0], requires=[{'option': ip_admin, 'expected': '192.168.1.1', 'action': 'disabled'}])")
|
|
|
|
|
|
def test_leadership_requires_properties_invalid_legacy():
|
|
ip_admin = StrOption('ip_admin', "ip réseau autorisé")
|
|
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,
|
|
requires=[{'option': ip_admin_eth0, 'expected': '192.168.1.1', 'action': 'disabled'}])
|
|
raises(ValueError, "Leadership('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0], properties=('disabled',), requires=[{'option': ip_admin, 'expected': '192.168.1.1', 'action': 'disabled'}])")
|
|
|
|
|
|
def test_leadership_requires_properties_legacy():
|
|
ip_admin = StrOption('ip_admin', "ip réseau autorisé")
|
|
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,
|
|
requires=[{'option': ip_admin_eth0, 'expected': '192.168.1.1', 'action': 'disabled'}])
|
|
Leadership('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0], properties=('hidden',),
|
|
requires=[{'option': ip_admin, 'expected': '192.168.1.1', 'action': 'disabled'}])
|
|
|
|
|
|
def test_leadership_requires_leader_legacy(config_type):
|
|
activate = BoolOption('activate', "Activer l'accès au réseau", True)
|
|
ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True,
|
|
requires=[{'option': activate, 'expected': False, 'action': 'disabled'}])
|
|
netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
|
|
interface1 = Leadership('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
|
|
od = OptionDescription('toto', '', [activate, interface1])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
|
|
#
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == []
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.1.2']
|
|
#
|
|
cfg.option('activate').value.set(False)
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.ip_admin_eth0').value.get()")
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()")
|
|
#
|
|
cfg.option('activate').value.set(True)
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
#
|
|
cfg.option('activate').value.set(False)
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.ip_admin_eth0').value.get()")
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()")
|
|
assert cfg.value.dict() == {'activate': False}
|
|
|
|
|
|
def test_leadership_requires_leader(config_type):
|
|
activate = BoolOption('activate', "Activer l'accès au réseau", True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(activate, notraisepropertyerror=True),
|
|
'expected': ParamValue(False),
|
|
'index': ParamIndex()}))
|
|
ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True, properties=(disabled_property,))
|
|
netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
|
|
interface1 = Leadership('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
|
|
od = OptionDescription('toto', '', [activate, interface1])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
|
|
#
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == []
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.1.2']
|
|
#
|
|
cfg.option('activate').value.set(False)
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.ip_admin_eth0').value.get()")
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()")
|
|
#
|
|
cfg.option('activate').value.set(True)
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
#
|
|
cfg.option('activate').value.set(False)
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.ip_admin_eth0').value.get()")
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()")
|
|
assert cfg.value.dict() == {'activate': False}
|
|
|
|
|
|
def test_leadership_requires_leader_callback_legacy(config_type):
|
|
activate = BoolOption('activate', "Activer l'accès au réseau", True)
|
|
ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True,
|
|
requires=[{'callback': calc_value, 'callback_params': Params(ParamOption(activate)), 'expected': False, 'action': 'disabled'}])
|
|
netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
|
|
interface1 = Leadership('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
|
|
od = OptionDescription('toto', '', [activate, interface1])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
#
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == []
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.1.2']
|
|
#
|
|
cfg.option('activate').value.set(False)
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.ip_admin_eth0').value.get()")
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()")
|
|
#
|
|
cfg.option('activate').value.set(True)
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
#
|
|
cfg.option('activate').value.set(False)
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.ip_admin_eth0').value.get()")
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()")
|
|
assert cfg.value.dict() == {'activate': False}
|
|
|
|
|
|
def test_leadership_requires_leadership_legacy(config_type):
|
|
activate = BoolOption('activate', "Activer l'accès au réseau", 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)
|
|
interface1 = Leadership('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0],
|
|
requires=[{'option': activate, 'expected': False, 'action': 'disabled'}])
|
|
od = OptionDescription('toto', '', [activate, interface1])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
#
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == []
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.1.2']
|
|
#
|
|
cfg.option('activate').value.set(False)
|
|
if config_type != 'tiramisu-api':
|
|
# FIXME
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.ip_admin_eth0').value.get()")
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()")
|
|
#
|
|
cfg.option('activate').value.set(True)
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
#
|
|
cfg.option('activate').value.set(False)
|
|
if config_type != 'tiramisu-api':
|
|
# FIXME
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.ip_admin_eth0').value.get()")
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()")
|
|
assert cfg.value.dict() == {'activate': False}
|
|
|
|
|
|
def test_leadership_requires_leadership(config_type):
|
|
activate = BoolOption('activate', "Activer l'accès au réseau", 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)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(activate, notraisepropertyerror=True),
|
|
'expected': ParamValue(False),
|
|
'index': ParamIndex()}))
|
|
interface1 = Leadership('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0], properties=(disabled_property,))
|
|
od = OptionDescription('toto', '', [activate, interface1])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
#
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == []
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.1.2']
|
|
#
|
|
cfg.option('activate').value.set(False)
|
|
if config_type != 'tiramisu-api':
|
|
# FIXME
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.ip_admin_eth0').value.get()")
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()")
|
|
#
|
|
cfg.option('activate').value.set(True)
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
#
|
|
cfg.option('activate').value.set(False)
|
|
if config_type != 'tiramisu-api':
|
|
# FIXME
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.ip_admin_eth0').value.get()")
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()")
|
|
assert cfg.value.dict() == {'activate': False}
|
|
|
|
|
|
def test_leadership_requires_leadership_callback_legacy(config_type):
|
|
activate = BoolOption('activate', "Activer l'accès au réseau", 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)
|
|
interface1 = Leadership('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0],
|
|
requires=[{'callback': calc_value, 'callback_params': Params(ParamOption(activate)), 'expected': False, 'action': 'disabled'}])
|
|
od = OptionDescription('toto', '', [activate, interface1])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
#
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == []
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.1.2']
|
|
#
|
|
cfg.option('activate').value.set(False)
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.ip_admin_eth0').value.get()")
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()")
|
|
#
|
|
cfg.option('activate').value.set(True)
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
#
|
|
cfg.option('activate').value.set(False)
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.ip_admin_eth0').value.get()")
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()")
|
|
assert cfg.value.dict() == {'activate': False}
|
|
|
|
|
|
def test_leadership_requires_no_leader_legacy(config_type):
|
|
activate = BoolOption('activate', "Activer l'accès au réseau", 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,
|
|
requires=[{'option': activate, 'expected': False, 'action': 'disabled'}])
|
|
interface1 = Leadership('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
|
|
od = OptionDescription('toto', '', [activate, interface1])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == []
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.1.2']
|
|
cfg.option('activate').value.set(False)
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2', '192.168.1.1'])
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.1.2', '192.168.1.1']
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()")
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get()")
|
|
cfg.option('activate').value.set(True)
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get() is None
|
|
cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.set('255.255.255.255')
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get() == '255.255.255.255'
|
|
cfg.option('activate').value.set(False)
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()")
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get()")
|
|
assert cfg.value.dict() == {'ip_admin_eth0.ip_admin_eth0': ['192.168.1.2', '192.168.1.1'], 'activate': False}
|
|
|
|
|
|
def test_leadership_requires_no_leader(config_type):
|
|
activate = BoolOption('activate', "Activer l'accès au réseau", True)
|
|
ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(activate, notraisepropertyerror=True),
|
|
'expected': ParamValue(False),
|
|
'index': ParamIndex()}))
|
|
netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True, properties=(disabled_property,))
|
|
interface1 = Leadership('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
|
|
od = OptionDescription('toto', '', [activate, interface1])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == []
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.1.2']
|
|
cfg.option('activate').value.set(False)
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2', '192.168.1.1'])
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.1.2', '192.168.1.1']
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()")
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get()")
|
|
cfg.option('activate').value.set(True)
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get() is None
|
|
cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.set('255.255.255.255')
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get() == '255.255.255.255'
|
|
cfg.option('activate').value.set(False)
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()")
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get()")
|
|
assert cfg.value.dict() == {'ip_admin_eth0.ip_admin_eth0': ['192.168.1.2', '192.168.1.1'], 'activate': False}
|
|
|
|
|
|
def test_leadership_requires_no_leader_callback_legacy(config_type):
|
|
activate = BoolOption('activate', "Activer l'accès au réseau", 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,
|
|
requires=[{'callback': calc_value, 'callback_params': Params(ParamOption(activate)), 'expected': False, 'action': 'disabled'}])
|
|
interface1 = Leadership('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
|
|
od = OptionDescription('toto', '', [activate, interface1])
|
|
cfg = Config(od)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == []
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2'])
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.1.2']
|
|
cfg.option('activate').value.set(False)
|
|
cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.2', '192.168.1.1'])
|
|
assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.1.2', '192.168.1.1']
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()")
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get()")
|
|
cfg.option('activate').value.set(True)
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get() is None
|
|
cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.set('255.255.255.255')
|
|
assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get() == '255.255.255.255'
|
|
cfg.option('activate').value.set(False)
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()")
|
|
raises(PropertiesOptionError, "cfg.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get()")
|
|
dico = cfg.value.dict()
|
|
assert set(dico.keys()) == {'activate', 'ip_admin_eth0.ip_admin_eth0', 'ip_admin_eth0.netmask_admin_eth0'}
|
|
dico['ip_admin_eth0.ip_admin_eth0'] == ['192.168.1.2', '192.168.1.1']
|
|
dico['activate'] == False
|
|
del dico['ip_admin_eth0.netmask_admin_eth0'][1]
|
|
del dico['ip_admin_eth0.netmask_admin_eth0'][0]
|
|
|
|
|
|
def test_leadership_requires_complet_legacy(config_type):
|
|
optiontoto = StrOption('unicodetoto', "Unicode")
|
|
option = StrOption('unicode', "Unicode leader", multi=True)
|
|
option1 = StrOption('unicode1', "Unicode follower 1", multi=True)
|
|
option2 = StrOption('unicode2', "Values 'test' must show 'Unicode follower 3'", multi=True)
|
|
option3 = StrOption('unicode3', "Unicode follower 3", requires=[{'option': option,
|
|
'expected': u'test',
|
|
'action': 'hidden',
|
|
'inverse': True}],
|
|
multi=True)
|
|
option4 = StrOption('unicode4', "Unicode follower 4", requires=[{'option': option2,
|
|
'expected': u'test',
|
|
'action': 'hidden',
|
|
'inverse': True}],
|
|
multi=True)
|
|
option5 = StrOption('unicode5', "Unicode follower 5", requires=[{'option': optiontoto,
|
|
'expected': u'test',
|
|
'action': 'hidden',
|
|
'inverse': True}],
|
|
multi=True)
|
|
option6 = StrOption('unicode6', "Unicode follower 6", requires=[{'option': optiontoto,
|
|
'expected': u'test',
|
|
'action': 'hidden',
|
|
'inverse': True},
|
|
{'option': option2,
|
|
'expected': u'test',
|
|
'action': 'hidden',
|
|
'inverse': True}],
|
|
multi=True)
|
|
option7 = StrOption('unicode7', "Unicode follower 7", requires=[{'option': option2,
|
|
'expected': u'test',
|
|
'action': 'hidden',
|
|
'inverse': True},
|
|
{'option': optiontoto,
|
|
'expected': u'test',
|
|
'action': 'hidden',
|
|
'inverse': True}],
|
|
multi=True)
|
|
descr1 = Leadership("unicode", "Common configuration 1",
|
|
[option, option1, option2, option3, option4, option5, option6, option7])
|
|
descr = OptionDescription("options", "Common configuration 2", [descr1, optiontoto])
|
|
descr = OptionDescription("unicode1_leadership_requires", "Leader followers with Unicode follower 3 hidden when Unicode follower 2 is test", [descr])
|
|
cfg = Config(descr)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('options.unicode.unicode').value.set(['test', 'trah'])
|
|
cfg.option('options.unicode.unicode2', 0).value.set('test')
|
|
dico = cfg.value.dict()
|
|
assert dico.keys() == set(['options.unicode.unicode', 'options.unicode.unicode1', 'options.unicode.unicode2', 'options.unicode.unicode3', 'options.unicode.unicode4', 'options.unicodetoto'])
|
|
assert dico['options.unicode.unicode'] == ['test', 'trah']
|
|
assert dico['options.unicode.unicode1'] == [None, None]
|
|
assert dico['options.unicode.unicode2'] == ['test', None]
|
|
assert dico['options.unicode.unicode3'][0] is None
|
|
assert isinstance(dico['options.unicode.unicode3'][1], PropertiesOptionError)
|
|
assert dico['options.unicode.unicode4'][0] is None
|
|
assert isinstance(dico['options.unicode.unicode4'][1], PropertiesOptionError)
|
|
assert dico['options.unicodetoto'] is None
|
|
del dico['options.unicode.unicode3'][1]
|
|
del dico['options.unicode.unicode3']
|
|
del dico['options.unicode.unicode4'][1]
|
|
del dico['options.unicode.unicode4']
|
|
#
|
|
cfg.option('options.unicodetoto').value.set('test')
|
|
dico = cfg.value.dict()
|
|
assert dico.keys() == set(['options.unicode.unicode', 'options.unicode.unicode1', 'options.unicode.unicode2', 'options.unicode.unicode3', 'options.unicode.unicode4', 'options.unicode.unicode5', 'options.unicode.unicode6', 'options.unicode.unicode7', 'options.unicodetoto'])
|
|
assert dico['options.unicode.unicode'] == ['test', 'trah']
|
|
assert dico['options.unicode.unicode1'] == [None, None]
|
|
assert dico['options.unicode.unicode2'] == ['test', None]
|
|
assert dico['options.unicode.unicode3'][0] is None
|
|
assert isinstance(dico['options.unicode.unicode3'][1], PropertiesOptionError)
|
|
assert dico['options.unicode.unicode4'][0] is None
|
|
assert isinstance(dico['options.unicode.unicode4'][1], PropertiesOptionError)
|
|
assert dico['options.unicode.unicode5'] == [None, None]
|
|
assert dico['options.unicode.unicode6'][0] is None
|
|
assert isinstance(dico['options.unicode.unicode6'][1], PropertiesOptionError)
|
|
assert dico['options.unicode.unicode7'][0] is None
|
|
assert isinstance(dico['options.unicode.unicode7'][1], PropertiesOptionError)
|
|
assert dico['options.unicodetoto'] == 'test'
|
|
del dico['options.unicode.unicode3'][1]
|
|
del dico['options.unicode.unicode3']
|
|
del dico['options.unicode.unicode4'][1]
|
|
del dico['options.unicode.unicode4']
|
|
del dico['options.unicode.unicode6'][1]
|
|
del dico['options.unicode.unicode6']
|
|
del dico['options.unicode.unicode7'][1]
|
|
del dico['options.unicode.unicode7']
|
|
|
|
|
|
def test_leadership_requires_complet(config_type):
|
|
optiontoto = StrOption('unicodetoto', "Unicode")
|
|
option = StrOption('unicode', "Unicode leader", multi=True)
|
|
option1 = StrOption('unicode1', "Unicode follower 1", multi=True)
|
|
option2 = StrOption('unicode2', "Values 'test' must show 'Unicode follower 3'", multi=True)
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(option, notraisepropertyerror=True),
|
|
'expected': ParamValue('test'),
|
|
'index': ParamIndex(),
|
|
'no_condition_is_invalid': ParamValue(True),
|
|
'inverse_condition': ParamValue(True)}))
|
|
option3 = StrOption('unicode3', "Unicode follower 3", properties=(hidden_property,), multi=True)
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(option2, notraisepropertyerror=True),
|
|
'expected': ParamValue('test'),
|
|
'no_condition_is_invalid': ParamValue(True),
|
|
'index': ParamIndex(),
|
|
'inverse_condition': ParamValue(True)}))
|
|
option4 = StrOption('unicode4', "Unicode follower 4", properties=(hidden_property,), multi=True)
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(optiontoto, notraisepropertyerror=True),
|
|
'expected': ParamValue('test'),
|
|
'no_condition_is_invalid': ParamValue(True),
|
|
'inverse_condition': ParamValue(True)}))
|
|
option5 = StrOption('unicode5', "Unicode follower 5", properties=(hidden_property,), multi=True)
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition_0': ParamOption(optiontoto, notraisepropertyerror=True),
|
|
'expected_0': ParamValue('test'),
|
|
'condition_1': ParamOption(option2, notraisepropertyerror=True),
|
|
'expected_1': ParamValue('test'),
|
|
'no_condition_is_invalid': ParamValue(True),
|
|
'index': ParamIndex(),
|
|
'condition_operator': ParamValue('OR'),
|
|
'inverse_condition_0': ParamValue(True),
|
|
'inverse_condition_1': ParamValue(True)}))
|
|
option6 = StrOption('unicode6', "Unicode follower 6", properties=(hidden_property,), multi=True)
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition_0': ParamOption(option2, notraisepropertyerror=True),
|
|
'expected_0': ParamValue('test'),
|
|
'condition_1': ParamOption(optiontoto, notraisepropertyerror=True),
|
|
'expected_1': ParamValue('test'),
|
|
'no_condition_is_invalid': ParamValue(True),
|
|
'index': ParamIndex(),
|
|
'inverse_condition': ParamValue(True)}))
|
|
option7 = StrOption('unicode7', "Unicode follower 7", properties=(hidden_property,), multi=True)
|
|
descr1 = Leadership("unicode", "Common configuration 1",
|
|
[option, option1, option2, option3, option4, option5, option6, option7])
|
|
descr = OptionDescription("options", "Common configuration 2", [descr1, optiontoto])
|
|
descr = OptionDescription("unicode1_leadership_requires", "Leader followers with Unicode follower 3 hidden when Unicode follower 2 is test", [descr])
|
|
cfg = Config(descr)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('options.unicode.unicode').value.set(['test', 'trah'])
|
|
cfg.option('options.unicode.unicode2', 0).value.set('test')
|
|
dico = cfg.value.dict()
|
|
assert dico.keys() == set(['options.unicode.unicode', 'options.unicode.unicode1', 'options.unicode.unicode2', 'options.unicode.unicode3', 'options.unicode.unicode4', 'options.unicodetoto'])
|
|
assert dico['options.unicode.unicode'] == ['test', 'trah']
|
|
assert dico['options.unicode.unicode1'] == [None, None]
|
|
assert dico['options.unicode.unicode2'] == ['test', None]
|
|
assert dico['options.unicode.unicode3'][0] is None
|
|
assert isinstance(dico['options.unicode.unicode3'][1], PropertiesOptionError)
|
|
assert dico['options.unicode.unicode4'][0] is None
|
|
assert isinstance(dico['options.unicode.unicode4'][1], PropertiesOptionError)
|
|
assert dico['options.unicodetoto'] is None
|
|
del dico['options.unicode.unicode3'][1]
|
|
del dico['options.unicode.unicode3']
|
|
del dico['options.unicode.unicode4'][1]
|
|
del dico['options.unicode.unicode4']
|
|
#
|
|
cfg.option('options.unicodetoto').value.set('test')
|
|
dico = cfg.value.dict()
|
|
assert dico.keys() == set(['options.unicode.unicode', 'options.unicode.unicode1', 'options.unicode.unicode2', 'options.unicode.unicode3', 'options.unicode.unicode4', 'options.unicode.unicode5', 'options.unicode.unicode6', 'options.unicode.unicode7', 'options.unicodetoto'])
|
|
assert dico['options.unicode.unicode'] == ['test', 'trah']
|
|
assert dico['options.unicode.unicode1'] == [None, None]
|
|
assert dico['options.unicode.unicode2'] == ['test', None]
|
|
assert dico['options.unicode.unicode3'][0] is None
|
|
assert isinstance(dico['options.unicode.unicode3'][1], PropertiesOptionError)
|
|
assert dico['options.unicode.unicode4'][0] is None
|
|
assert isinstance(dico['options.unicode.unicode4'][1], PropertiesOptionError)
|
|
assert dico['options.unicode.unicode5'] == [None, None]
|
|
assert dico['options.unicode.unicode6'][0] is None
|
|
assert isinstance(dico['options.unicode.unicode6'][1], PropertiesOptionError)
|
|
assert dico['options.unicode.unicode7'][0] is None
|
|
assert isinstance(dico['options.unicode.unicode7'][1], PropertiesOptionError)
|
|
assert dico['options.unicodetoto'] == 'test'
|
|
del dico['options.unicode.unicode3'][1]
|
|
del dico['options.unicode.unicode3']
|
|
del dico['options.unicode.unicode4'][1]
|
|
del dico['options.unicode.unicode4']
|
|
del dico['options.unicode.unicode6'][1]
|
|
del dico['options.unicode.unicode6']
|
|
del dico['options.unicode.unicode7'][1]
|
|
del dico['options.unicode.unicode7']
|
|
|
|
|
|
def test_leadership_requires_complet_callback_legacy(config_type):
|
|
optiontoto = StrOption('unicodetoto', "Unicode leader")
|
|
option = StrOption('unicode', "Unicode leader", multi=True)
|
|
option1 = StrOption('unicode1', "Unicode follower 1", multi=True)
|
|
option2 = StrOption('unicode2', "Values 'test' must show 'Unicode follower 3'", multi=True)
|
|
option3 = StrOption('unicode3', "Unicode follower 3", requires=[{'callback': calc_value,
|
|
'callback_params': Params(ParamOption(option)),
|
|
'expected': u'test',
|
|
'action': 'hidden',
|
|
'inverse': True}],
|
|
multi=True)
|
|
option4 = StrOption('unicode4', "Unicode follower 4", requires=[{'callback': calc_value,
|
|
'callback_params': Params(ParamOption(option2)),
|
|
'expected': u'test',
|
|
'action': 'hidden',
|
|
'inverse': True}],
|
|
multi=True)
|
|
option5 = StrOption('unicode5', "Unicode follower 5", requires=[{'callback': calc_value,
|
|
'callback_params': Params(ParamOption(optiontoto)),
|
|
'expected': u'test',
|
|
'action': 'hidden',
|
|
'inverse': True}],
|
|
multi=True)
|
|
option6 = StrOption('unicode6', "Unicode follower 6", requires=[{'callback': calc_value,
|
|
'callback_params': Params(ParamOption(optiontoto)),
|
|
'expected': u'test',
|
|
'action': 'hidden',
|
|
'inverse': True},
|
|
{'callback': calc_value,
|
|
'callback_params': Params(ParamOption(option2)),
|
|
'expected': u'test',
|
|
'action': 'hidden',
|
|
'inverse': True}],
|
|
multi=True)
|
|
option7 = StrOption('unicode7', "Unicode follower 7", requires=[{'callback': calc_value,
|
|
'callback_params': Params(ParamOption(option2)),
|
|
'expected': u'test',
|
|
'action': 'hidden',
|
|
'inverse': True},
|
|
{'callback': calc_value,
|
|
'callback_params': Params(ParamOption(optiontoto)),
|
|
'expected': u'test',
|
|
'action': 'hidden',
|
|
'inverse': True}],
|
|
multi=True)
|
|
descr1 = Leadership("unicode", "Common configuration 1",
|
|
[option, option1, option2, option3, option4, option5, option6, option7])
|
|
descr = OptionDescription("options", "Common configuration 2", [descr1, optiontoto])
|
|
descr = OptionDescription("unicode1_leadership_requires", "Leader followers with Unicode follower 3 hidden when Unicode follower 2 is test", [descr])
|
|
cfg = Config(descr)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('options.unicode.unicode').value.set(['test', 'trah'])
|
|
cfg.option('options.unicode.unicode2', 0).value.set('test')
|
|
dico = cfg.value.dict()
|
|
assert dico.keys() == set(['options.unicode.unicode', 'options.unicode.unicode1', 'options.unicode.unicode2', 'options.unicode.unicode3', 'options.unicode.unicode4', 'options.unicode.unicode5', 'options.unicode.unicode6', 'options.unicode.unicode7', 'options.unicodetoto'])
|
|
assert dico['options.unicode.unicode'] == ['test', 'trah']
|
|
assert dico['options.unicode.unicode1'] == [None, None]
|
|
assert dico['options.unicode.unicode2'] == ['test', None]
|
|
assert dico['options.unicode.unicode3'][0] is None
|
|
assert isinstance(dico['options.unicode.unicode3'][1], PropertiesOptionError)
|
|
assert dico['options.unicode.unicode4'][0] is None
|
|
assert isinstance(dico['options.unicode.unicode4'][1], PropertiesOptionError)
|
|
assert dico['options.unicodetoto'] is None
|
|
del dico['options.unicode.unicode3'][1]
|
|
del dico['options.unicode.unicode3']
|
|
del dico['options.unicode.unicode4'][1]
|
|
del dico['options.unicode.unicode4']
|
|
del dico['options.unicode.unicode5'][0]
|
|
del dico['options.unicode.unicode5'][0]
|
|
del dico['options.unicode.unicode6'][0]
|
|
del dico['options.unicode.unicode6'][0]
|
|
del dico['options.unicode.unicode7'][0]
|
|
del dico['options.unicode.unicode7'][0]
|
|
#
|
|
cfg.option('options.unicodetoto').value.set('test')
|
|
dico = cfg.value.dict()
|
|
assert dico.keys() == set(['options.unicode.unicode', 'options.unicode.unicode1', 'options.unicode.unicode2', 'options.unicode.unicode3', 'options.unicode.unicode4', 'options.unicode.unicode5', 'options.unicode.unicode6', 'options.unicode.unicode7', 'options.unicodetoto'])
|
|
assert dico['options.unicode.unicode'] == ['test', 'trah']
|
|
assert dico['options.unicode.unicode1'] == [None, None]
|
|
assert dico['options.unicode.unicode2'] == ['test', None]
|
|
assert dico['options.unicode.unicode3'][0] is None
|
|
assert isinstance(dico['options.unicode.unicode3'][1], PropertiesOptionError)
|
|
assert dico['options.unicode.unicode4'][0] is None
|
|
assert isinstance(dico['options.unicode.unicode4'][1], PropertiesOptionError)
|
|
assert dico['options.unicode.unicode5'] == [None, None]
|
|
assert dico['options.unicode.unicode6'][0] is None
|
|
assert isinstance(dico['options.unicode.unicode6'][1], PropertiesOptionError)
|
|
assert dico['options.unicode.unicode7'][0] is None
|
|
assert isinstance(dico['options.unicode.unicode7'][1], PropertiesOptionError)
|
|
assert dico['options.unicodetoto'] == 'test'
|
|
del dico['options.unicode.unicode3'][1]
|
|
del dico['options.unicode.unicode3']
|
|
del dico['options.unicode.unicode4'][1]
|
|
del dico['options.unicode.unicode4']
|
|
del dico['options.unicode.unicode6'][1]
|
|
del dico['options.unicode.unicode6']
|
|
del dico['options.unicode.unicode7'][1]
|
|
del dico['options.unicode.unicode7']
|
|
|
|
|
|
def test_leadership_requires_transitive1_legacy(config_type):
|
|
optiontoto = StrOption('unicodetoto', "Simple unicode")
|
|
option = StrOption('unicode', "Unicode leader", multi=True)
|
|
option1 = StrOption('unicode1', "Unicode follower 1", multi=True)
|
|
option2 = StrOption('unicode2', "Unicode follower 2", requires=[{'option': optiontoto,
|
|
'expected': u'test',
|
|
'action': 'disabled',
|
|
'transitive': True,
|
|
'inverse': True}],
|
|
multi=True)
|
|
option3 = StrOption('unicode3', "Unicode follower 3", requires=[{'option': option2,
|
|
'expected': u'test',
|
|
'action': 'disabled',
|
|
'transitive': True,
|
|
'inverse': True}],
|
|
multi=True)
|
|
option4 = StrOption('unicode4', "Unicode follower 4", requires=[{'option': option3,
|
|
'expected': u'test',
|
|
'action': 'disabled',
|
|
'transitive': True,
|
|
'inverse': True}],
|
|
multi=True)
|
|
descr1 = Leadership("unicode", "Common configuration 1",
|
|
[option, option1, option2, option3, option4])
|
|
descr = OptionDescription("options", "Common configuration 2", [descr1, optiontoto])
|
|
descr = OptionDescription("unicode1", "", [descr])
|
|
cfg = Config(descr)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
assert cfg.value.dict() == {'options.unicode.unicode': [], 'options.unicode.unicode1': [], 'options.unicode.unicode3': [], 'options.unicode.unicode4': [], 'options.unicodetoto': None}
|
|
#
|
|
cfg.option('options.unicodetoto').value.set('test')
|
|
assert cfg.value.dict() == {'options.unicode.unicode': [], 'options.unicode.unicode1': [], 'options.unicode.unicode2': [], 'options.unicode.unicode3': [], 'options.unicode.unicode4': [], 'options.unicodetoto': 'test'}
|
|
#
|
|
cfg.option('options.unicode.unicode').value.set(['a', 'b', 'c'])
|
|
dico = cfg.value.dict()
|
|
assert list(dico.keys()) == ['options.unicode.unicode', 'options.unicode.unicode1', 'options.unicode.unicode2', 'options.unicode.unicode3', 'options.unicode.unicode4', 'options.unicodetoto']
|
|
assert dico['options.unicodetoto'] == 'test'
|
|
assert dico['options.unicode.unicode'] == ['a', 'b', 'c']
|
|
assert dico['options.unicode.unicode1'] == [None, None, None]
|
|
assert dico['options.unicode.unicode2'] == [None, None, None]
|
|
assert isinstance(dico['options.unicode.unicode3'][0], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode3'][1], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode3'][2], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][0], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][1], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][2], PropertiesOptionError)
|
|
del (dico['options.unicode.unicode3'][2])
|
|
del (dico['options.unicode.unicode3'][1])
|
|
del (dico['options.unicode.unicode3'][0])
|
|
del (dico['options.unicode.unicode4'][2])
|
|
del (dico['options.unicode.unicode4'][1])
|
|
del (dico['options.unicode.unicode4'][0])
|
|
#
|
|
cfg.option('options.unicode.unicode2', 1).value.set('test')
|
|
cfg.option('options.unicode.unicode3', 1).value.set('test')
|
|
dico = cfg.value.dict()
|
|
assert list(dico.keys()) == ['options.unicode.unicode', 'options.unicode.unicode1', 'options.unicode.unicode2', 'options.unicode.unicode3', 'options.unicode.unicode4', 'options.unicodetoto']
|
|
assert dico['options.unicodetoto'] == 'test'
|
|
assert dico['options.unicode.unicode'] == ['a', 'b', 'c']
|
|
assert dico['options.unicode.unicode1'] == [None, None, None]
|
|
assert dico['options.unicode.unicode2'] == [None, 'test', None]
|
|
assert isinstance(dico['options.unicode.unicode3'][0], PropertiesOptionError)
|
|
assert dico['options.unicode.unicode3'][1] == 'test'
|
|
assert isinstance(dico['options.unicode.unicode3'][2], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][0], PropertiesOptionError)
|
|
assert dico['options.unicode.unicode4'][1] == None
|
|
assert isinstance(dico['options.unicode.unicode4'][2], PropertiesOptionError)
|
|
del (dico['options.unicode.unicode3'][2])
|
|
del (dico['options.unicode.unicode3'][1])
|
|
del (dico['options.unicode.unicode3'][0])
|
|
del (dico['options.unicode.unicode4'][2])
|
|
del (dico['options.unicode.unicode4'][1])
|
|
del (dico['options.unicode.unicode4'][0])
|
|
#
|
|
cfg.option('options.unicode.unicode2', 1).value.set('rah')
|
|
dico = cfg.value.dict()
|
|
assert list(dico.keys()) == ['options.unicode.unicode', 'options.unicode.unicode1', 'options.unicode.unicode2', 'options.unicode.unicode3', 'options.unicode.unicode4', 'options.unicodetoto']
|
|
assert dico['options.unicodetoto'] == 'test'
|
|
assert dico['options.unicode.unicode'] == ['a', 'b', 'c']
|
|
assert dico['options.unicode.unicode1'] == [None, None, None]
|
|
assert dico['options.unicode.unicode2'] == [None, 'rah', None]
|
|
assert isinstance(dico['options.unicode.unicode3'][0], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode3'][1], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode3'][2], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][0], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][1], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][2], PropertiesOptionError)
|
|
del (dico['options.unicode.unicode3'][2])
|
|
del (dico['options.unicode.unicode3'][1])
|
|
del (dico['options.unicode.unicode3'][0])
|
|
del (dico['options.unicode.unicode4'][2])
|
|
del (dico['options.unicode.unicode4'][1])
|
|
del (dico['options.unicode.unicode4'][0])
|
|
#
|
|
cfg.option('options.unicode.unicode2', 1).value.set('test')
|
|
cfg.option('options.unicodetoto').value.set('rah')
|
|
dico = cfg.value.dict()
|
|
assert list(dico.keys()) == ['options.unicode.unicode', 'options.unicode.unicode1', 'options.unicode.unicode3', 'options.unicode.unicode4', 'options.unicodetoto']
|
|
assert dico['options.unicodetoto'] == 'rah'
|
|
assert dico['options.unicode.unicode'] == ['a', 'b', 'c']
|
|
assert dico['options.unicode.unicode1'] == [None, None, None]
|
|
assert isinstance(dico['options.unicode.unicode3'][0], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode3'][1], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode3'][2], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][0], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][1], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][2], PropertiesOptionError)
|
|
del (dico['options.unicode.unicode3'][2])
|
|
del (dico['options.unicode.unicode3'][1])
|
|
del (dico['options.unicode.unicode3'][0])
|
|
del (dico['options.unicode.unicode4'][2])
|
|
del (dico['options.unicode.unicode4'][1])
|
|
del (dico['options.unicode.unicode4'][0])
|
|
|
|
|
|
def test_leadership_requires_transitive1(config_type):
|
|
optiontoto = StrOption('unicodetoto', "Simple unicode")
|
|
option = StrOption('unicode', "Unicode leader", multi=True)
|
|
option1 = StrOption('unicode1', "Unicode follower 1", multi=True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(optiontoto, raisepropertyerror=True),
|
|
'expected': ParamValue('test'),
|
|
'index': ParamIndex(),
|
|
'inverse_condition': ParamValue(True)}))
|
|
option2 = StrOption('unicode2', "Unicode follower 2", properties=(disabled_property,), multi=True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(option2, raisepropertyerror=True),
|
|
'expected': ParamValue('test'),
|
|
'index': ParamIndex(),
|
|
'no_condition_is_invalid': ParamValue(True),
|
|
'inverse_condition': ParamValue(True)}))
|
|
option3 = StrOption('unicode3', "Unicode follower 3", properties=(disabled_property,), multi=True)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(option3, raisepropertyerror=True),
|
|
'expected': ParamValue('test'),
|
|
'index': ParamIndex(),
|
|
'no_condition_is_invalid': ParamValue(True),
|
|
'inverse_condition': ParamValue(True)}))
|
|
option4 = StrOption('unicode4', "Unicode follower 4", properties=(disabled_property,), multi=True)
|
|
descr1 = Leadership("unicode", "Common configuration 1",
|
|
[option, option1, option2, option3, option4])
|
|
descr = OptionDescription("options", "Common configuration 2", [descr1, optiontoto])
|
|
descr = OptionDescription("unicode1", "", [descr])
|
|
cfg = Config(descr)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
assert cfg.value.dict() == {'options.unicode.unicode': [], 'options.unicode.unicode1': [], 'options.unicode.unicode3': [], 'options.unicode.unicode4': [], 'options.unicodetoto': None}
|
|
#
|
|
cfg.option('options.unicodetoto').value.set('test')
|
|
assert cfg.value.dict() == {'options.unicode.unicode': [], 'options.unicode.unicode1': [], 'options.unicode.unicode2': [], 'options.unicode.unicode3': [], 'options.unicode.unicode4': [], 'options.unicodetoto': 'test'}
|
|
#
|
|
cfg.option('options.unicode.unicode').value.set(['a', 'b', 'c'])
|
|
dico = cfg.value.dict()
|
|
assert list(dico.keys()) == ['options.unicode.unicode', 'options.unicode.unicode1', 'options.unicode.unicode2', 'options.unicode.unicode3', 'options.unicode.unicode4', 'options.unicodetoto']
|
|
assert dico['options.unicodetoto'] == 'test'
|
|
assert dico['options.unicode.unicode'] == ['a', 'b', 'c']
|
|
assert dico['options.unicode.unicode1'] == [None, None, None]
|
|
assert dico['options.unicode.unicode2'] == [None, None, None]
|
|
assert isinstance(dico['options.unicode.unicode3'][0], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode3'][1], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode3'][2], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][0], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][1], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][2], PropertiesOptionError)
|
|
del (dico['options.unicode.unicode3'][2])
|
|
del (dico['options.unicode.unicode3'][1])
|
|
del (dico['options.unicode.unicode3'][0])
|
|
del (dico['options.unicode.unicode4'][2])
|
|
del (dico['options.unicode.unicode4'][1])
|
|
del (dico['options.unicode.unicode4'][0])
|
|
#
|
|
cfg.option('options.unicode.unicode2', 1).value.set('test')
|
|
cfg.option('options.unicode.unicode3', 1).value.set('test')
|
|
dico = cfg.value.dict()
|
|
assert list(dico.keys()) == ['options.unicode.unicode', 'options.unicode.unicode1', 'options.unicode.unicode2', 'options.unicode.unicode3', 'options.unicode.unicode4', 'options.unicodetoto']
|
|
assert dico['options.unicodetoto'] == 'test'
|
|
assert dico['options.unicode.unicode'] == ['a', 'b', 'c']
|
|
assert dico['options.unicode.unicode1'] == [None, None, None]
|
|
assert dico['options.unicode.unicode2'] == [None, 'test', None]
|
|
assert isinstance(dico['options.unicode.unicode3'][0], PropertiesOptionError)
|
|
assert dico['options.unicode.unicode3'][1] == 'test'
|
|
assert isinstance(dico['options.unicode.unicode3'][2], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][0], PropertiesOptionError)
|
|
assert dico['options.unicode.unicode4'][1] == None
|
|
assert isinstance(dico['options.unicode.unicode4'][2], PropertiesOptionError)
|
|
del (dico['options.unicode.unicode3'][2])
|
|
del (dico['options.unicode.unicode3'][1])
|
|
del (dico['options.unicode.unicode3'][0])
|
|
del (dico['options.unicode.unicode4'][2])
|
|
del (dico['options.unicode.unicode4'][1])
|
|
del (dico['options.unicode.unicode4'][0])
|
|
#
|
|
cfg.option('options.unicode.unicode2', 1).value.set('rah')
|
|
dico = cfg.value.dict()
|
|
assert list(dico.keys()) == ['options.unicode.unicode', 'options.unicode.unicode1', 'options.unicode.unicode2', 'options.unicode.unicode3', 'options.unicode.unicode4', 'options.unicodetoto']
|
|
assert dico['options.unicodetoto'] == 'test'
|
|
assert dico['options.unicode.unicode'] == ['a', 'b', 'c']
|
|
assert dico['options.unicode.unicode1'] == [None, None, None]
|
|
assert dico['options.unicode.unicode2'] == [None, 'rah', None]
|
|
assert isinstance(dico['options.unicode.unicode3'][0], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode3'][1], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode3'][2], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][0], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][1], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][2], PropertiesOptionError)
|
|
del (dico['options.unicode.unicode3'][2])
|
|
del (dico['options.unicode.unicode3'][1])
|
|
del (dico['options.unicode.unicode3'][0])
|
|
del (dico['options.unicode.unicode4'][2])
|
|
del (dico['options.unicode.unicode4'][1])
|
|
del (dico['options.unicode.unicode4'][0])
|
|
#
|
|
cfg.option('options.unicode.unicode2', 1).value.set('test')
|
|
cfg.option('options.unicodetoto').value.set('rah')
|
|
dico = cfg.value.dict()
|
|
assert list(dico.keys()) == ['options.unicode.unicode', 'options.unicode.unicode1', 'options.unicode.unicode3', 'options.unicode.unicode4', 'options.unicodetoto']
|
|
assert dico['options.unicodetoto'] == 'rah'
|
|
assert dico['options.unicode.unicode'] == ['a', 'b', 'c']
|
|
assert dico['options.unicode.unicode1'] == [None, None, None]
|
|
assert isinstance(dico['options.unicode.unicode3'][0], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode3'][1], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode3'][2], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][0], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][1], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][2], PropertiesOptionError)
|
|
del (dico['options.unicode.unicode3'][2])
|
|
del (dico['options.unicode.unicode3'][1])
|
|
del (dico['options.unicode.unicode3'][0])
|
|
del (dico['options.unicode.unicode4'][2])
|
|
del (dico['options.unicode.unicode4'][1])
|
|
del (dico['options.unicode.unicode4'][0])
|
|
|
|
|
|
def test_leadership_requires_transitive_callback_legacy(config_type):
|
|
optiontoto = StrOption('unicodetoto', "Unicode leader")
|
|
option = StrOption('unicode', "Unicode leader", multi=True)
|
|
option1 = StrOption('unicode1', "Unicode follower 1", multi=True)
|
|
option2 = StrOption('unicode2', "Unicode follower 2", requires=[{'callback': calc_value,
|
|
'callback_params': Params(ParamOption(optiontoto)),
|
|
'expected': u'test',
|
|
'action': 'disabled',
|
|
'transitive': True,
|
|
'inverse': True}],
|
|
multi=True)
|
|
option3 = StrOption('unicode3', "Unicode follower 3", requires=[{'callback': calc_value,
|
|
'callback_params': Params(ParamOption(option2)),
|
|
'expected': u'test',
|
|
'action': 'disabled',
|
|
'transitive': True,
|
|
'inverse': True}],
|
|
multi=True)
|
|
option4 = StrOption('unicode4', "Unicode follower 4", requires=[{'callback': calc_value,
|
|
'callback_params': Params(ParamOption(option3)),
|
|
'expected': u'test',
|
|
'action': 'disabled',
|
|
'transitive': True,
|
|
'inverse': True}],
|
|
multi=True)
|
|
descr1 = Leadership("unicode", "Common configuration 1",
|
|
[option, option1, option2, option3, option4])
|
|
descr = OptionDescription("options", "Common configuration 2", [descr1, optiontoto])
|
|
descr = OptionDescription("unicode1", "", [descr])
|
|
cfg = Config(descr)
|
|
cfg.property.read_write()
|
|
cfg = get_config(cfg, config_type)
|
|
assert cfg.value.dict() == {'options.unicode.unicode': [], 'options.unicode.unicode1': [], 'options.unicode.unicode2': [], 'options.unicode.unicode3': [], 'options.unicode.unicode4': [], 'options.unicodetoto': None}
|
|
#
|
|
cfg.option('options.unicodetoto').value.set('test')
|
|
assert cfg.value.dict() == {'options.unicode.unicode': [], 'options.unicode.unicode1': [], 'options.unicode.unicode2': [], 'options.unicode.unicode3': [], 'options.unicode.unicode4': [], 'options.unicodetoto': 'test'}
|
|
#
|
|
cfg.option('options.unicode.unicode').value.set(['a', 'b', 'c'])
|
|
dico = cfg.value.dict()
|
|
assert list(dico.keys()) == ['options.unicode.unicode', 'options.unicode.unicode1', 'options.unicode.unicode2', 'options.unicode.unicode3', 'options.unicode.unicode4', 'options.unicodetoto']
|
|
assert dico['options.unicodetoto'] == 'test'
|
|
assert dico['options.unicode.unicode'] == ['a', 'b', 'c']
|
|
assert dico['options.unicode.unicode1'] == [None, None, None]
|
|
assert dico['options.unicode.unicode2'] == [None, None, None]
|
|
assert isinstance(dico['options.unicode.unicode3'][0], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode3'][1], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode3'][2], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][0], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][1], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][2], PropertiesOptionError)
|
|
del (dico['options.unicode.unicode3'][2])
|
|
del (dico['options.unicode.unicode3'][1])
|
|
del (dico['options.unicode.unicode3'][0])
|
|
del (dico['options.unicode.unicode4'][2])
|
|
del (dico['options.unicode.unicode4'][1])
|
|
del (dico['options.unicode.unicode4'][0])
|
|
#
|
|
cfg.option('options.unicode.unicode2', 1).value.set('test')
|
|
cfg.option('options.unicode.unicode3', 1).value.set('test')
|
|
dico = cfg.value.dict()
|
|
assert list(dico.keys()) == ['options.unicode.unicode', 'options.unicode.unicode1', 'options.unicode.unicode2', 'options.unicode.unicode3', 'options.unicode.unicode4', 'options.unicodetoto']
|
|
assert dico['options.unicodetoto'] == 'test'
|
|
assert dico['options.unicode.unicode'] == ['a', 'b', 'c']
|
|
assert dico['options.unicode.unicode1'] == [None, None, None]
|
|
assert dico['options.unicode.unicode2'] == [None, 'test', None]
|
|
assert isinstance(dico['options.unicode.unicode3'][0], PropertiesOptionError)
|
|
assert dico['options.unicode.unicode3'][1] == 'test'
|
|
assert isinstance(dico['options.unicode.unicode3'][2], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][0], PropertiesOptionError)
|
|
assert dico['options.unicode.unicode4'][1] == None
|
|
assert isinstance(dico['options.unicode.unicode4'][2], PropertiesOptionError)
|
|
del (dico['options.unicode.unicode3'][2])
|
|
del (dico['options.unicode.unicode3'][1])
|
|
del (dico['options.unicode.unicode3'][0])
|
|
del (dico['options.unicode.unicode4'][2])
|
|
del (dico['options.unicode.unicode4'][1])
|
|
del (dico['options.unicode.unicode4'][0])
|
|
#
|
|
cfg.option('options.unicode.unicode2', 1).value.set('rah')
|
|
dico = cfg.value.dict()
|
|
assert list(dico.keys()) == ['options.unicode.unicode', 'options.unicode.unicode1', 'options.unicode.unicode2', 'options.unicode.unicode3', 'options.unicode.unicode4', 'options.unicodetoto']
|
|
assert dico['options.unicodetoto'] == 'test'
|
|
assert dico['options.unicode.unicode'] == ['a', 'b', 'c']
|
|
assert dico['options.unicode.unicode1'] == [None, None, None]
|
|
assert dico['options.unicode.unicode2'] == [None, 'rah', None]
|
|
assert isinstance(dico['options.unicode.unicode3'][0], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode3'][1], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode3'][2], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][0], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][1], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][2], PropertiesOptionError)
|
|
del (dico['options.unicode.unicode3'][2])
|
|
del (dico['options.unicode.unicode3'][1])
|
|
del (dico['options.unicode.unicode3'][0])
|
|
del (dico['options.unicode.unicode4'][2])
|
|
del (dico['options.unicode.unicode4'][1])
|
|
del (dico['options.unicode.unicode4'][0])
|
|
#
|
|
cfg.option('options.unicode.unicode2', 1).value.set('test')
|
|
cfg.option('options.unicodetoto').value.set('rah')
|
|
dico = cfg.value.dict()
|
|
assert list(dico.keys()) == ['options.unicode.unicode', 'options.unicode.unicode1', 'options.unicode.unicode2', 'options.unicode.unicode3', 'options.unicode.unicode4', 'options.unicodetoto']
|
|
assert dico['options.unicodetoto'] == 'rah'
|
|
assert dico['options.unicode.unicode'] == ['a', 'b', 'c']
|
|
assert dico['options.unicode.unicode1'] == [None, None, None]
|
|
assert isinstance(dico['options.unicode.unicode3'][0], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode3'][1], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode3'][2], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][0], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][1], PropertiesOptionError)
|
|
assert isinstance(dico['options.unicode.unicode4'][2], PropertiesOptionError)
|
|
del (dico['options.unicode.unicode2'][2])
|
|
del (dico['options.unicode.unicode2'][1])
|
|
del (dico['options.unicode.unicode2'][0])
|
|
del (dico['options.unicode.unicode3'][2])
|
|
del (dico['options.unicode.unicode3'][1])
|
|
del (dico['options.unicode.unicode3'][0])
|
|
del (dico['options.unicode.unicode4'][2])
|
|
del (dico['options.unicode.unicode4'][1])
|
|
del (dico['options.unicode.unicode4'][0])
|
|
|
|
|
|
# FIXME tester l'ajout d'un Calculation
|
|
# FIXME permissive peut etre in calcul !
|
|
# FIXME Calculation sur des multis ...
|