2 from py.test import raises
4 from tiramisu.config import Config
5 from tiramisu.option import StrOption, OptionDescription
6 from tiramisu.setting import groups
9 def return_true(value, param=None):
10 if value == 'val' and param in [None, 'yes']:
14 def return_false(value, param=None):
15 if value == 'val' and param in [None, 'yes']:
16 raise ValueError('error')
19 def return_val(value, param=None):
23 def return_if_val(value):
25 raise ValueError('error')
29 opt1 = StrOption('opt1', '', validator=return_true, default='val')
30 raises(ValueError, "StrOption('opt2', '', validator=return_false, default='val')")
31 opt2 = StrOption('opt2', '', validator=return_false)
32 root = OptionDescription('root', '', [opt1, opt2])
34 assert cfg.opt1 == 'val'
35 raises(ValueError, "cfg.opt2 = 'val'")
38 def test_validator_params():
39 opt1 = StrOption('opt1', '', validator=return_true, validator_params={'': ('yes',)}, default='val')
40 raises(ValueError, "StrOption('opt2', '', validator=return_false, validator_params={'': ('yes',)}, default='val')")
41 opt2 = StrOption('opt2', '', validator=return_false, validator_params={'': ('yes',)})
42 root = OptionDescription('root', '', [opt1, opt2])
44 assert cfg.opt1 == 'val'
45 raises(ValueError, "cfg.opt2 = 'val'")
48 def test_validator_params_key():
49 opt1 = StrOption('opt1', '', validator=return_true, validator_params={'param': ('yes',)}, default='val')
50 raises(TypeError, "StrOption('opt2', '', validator=return_true, validator_params={'param_unknown': ('yes',)}, default='val')")
51 root = OptionDescription('root', '', [opt1])
53 assert cfg.opt1 == 'val'
56 def test_validator_params_option():
57 opt0 = StrOption('opt0', '', default='val')
58 raises(ValueError, "opt1 = StrOption('opt1', '', validator=return_true, validator_params={'': ((opt0, False),)}, default='val')")
61 def test_validator_multi():
62 opt1 = StrOption('opt1', '', validator=return_if_val, multi=True)
63 root = OptionDescription('root', '', [opt1])
66 cfg.opt1.append('val')
67 assert cfg.opt1 == ['val']
68 raises(ValueError, "cfg.opt1.append('val1')")
69 raises(ValueError, "cfg.opt1 = ['val', 'val1']")
72 def test_validator_warning():
73 opt1 = StrOption('opt1', '', validator=return_true, default='val', only_warning=True)
74 opt2 = StrOption('opt2', '', validator=return_false, only_warning=True)
75 opt3 = StrOption('opt3', '', validator=return_if_val, multi=True, only_warning=True)
76 root = OptionDescription('root', '', [opt1, opt2, opt3])
78 assert cfg.opt1 == 'val'
80 assert cfg.cfgimpl_get_values().has_warning() is False
82 assert cfg.cfgimpl_get_values().has_warning() is True
83 assert cfg.cfgimpl_get_values().get_last_warning() == 'invalid value val for option opt2: error'
84 assert cfg.cfgimpl_get_values().has_warning() is False
85 cfg.opt3.append('val')
86 assert cfg.cfgimpl_get_values().has_warning() is False
87 cfg.opt3.append('val1')
88 assert cfg.cfgimpl_get_values().has_warning() is True
89 assert cfg.cfgimpl_get_values().get_last_warning() == 'invalid value val1 for option opt3: error'
90 assert cfg.cfgimpl_get_values().has_warning() is False
91 raises(ValueError, "cfg.opt2 = 1")
94 def test_validator_warning_master_slave():
95 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip reseau autorise", multi=True, validator=return_false, only_warning=True)
96 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-reseau", multi=True, validator=return_if_val, only_warning=True)
97 interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
98 interface1.impl_set_group_type(groups.master)
99 assert interface1.impl_get_group_type() == groups.master
100 root = OptionDescription('root', '', [interface1])
102 cfg.ip_admin_eth0.ip_admin_eth0.append(None)
103 assert cfg.cfgimpl_get_values().has_warning() is False
104 cfg.ip_admin_eth0.netmask_admin_eth0 = ['val1']
105 assert cfg.ip_admin_eth0.netmask_admin_eth0 == ['val1']
106 assert cfg.cfgimpl_get_values().has_warning() is True
107 assert cfg.cfgimpl_get_values().get_last_warning() == 'invalid value val1 for option netmask_admin_eth0: error'
108 cfg.ip_admin_eth0.ip_admin_eth0 = ['val']
109 assert cfg.ip_admin_eth0.ip_admin_eth0 == ['val']
110 assert cfg.cfgimpl_get_values().get_last_warning() == 'invalid value val for option ip_admin_eth0: error'
111 cfg.ip_admin_eth0.ip_admin_eth0 = ['val', 'val1', 'val1']
112 assert cfg.cfgimpl_get_values().get_last_warning() == 'invalid value val for option ip_admin_eth0: error'
113 cfg.ip_admin_eth0.ip_admin_eth0 = ['val1', 'val', 'val1']
114 assert cfg.cfgimpl_get_values().get_last_warning() == 'invalid value val for option ip_admin_eth0: error'
115 cfg.ip_admin_eth0.ip_admin_eth0 = ['val1', 'val1', 'val']
116 assert cfg.cfgimpl_get_values().get_last_warning() == 'invalid value val for option ip_admin_eth0: error'