python 3.5 support
[tiramisu.git] / test / test_symlink.py
1 # coding: utf-8
2 from .autopath import do_autopath
3 do_autopath()
4
5 from tiramisu.option import BoolOption, StrOption, SymLinkOption, \
6     OptionDescription
7 from tiramisu.config import Config
8 from tiramisu.error import PropertiesOptionError
9 from tiramisu.setting import groups, owners
10
11 from py.test import raises
12
13
14 def return_value():
15     pass
16
17
18 #____________________________________________________________
19 def test_symlink_option():
20     boolopt = BoolOption("b", "", default=False)
21     linkopt = SymLinkOption("c", boolopt)
22     descr = OptionDescription("opt", "",
23                               [linkopt, OptionDescription("s1", "", [boolopt])])
24     config = Config(descr)
25     assert config.s1.b is False
26     setattr(config, "s1.b", True)
27     setattr(config, "s1.b", False)
28     assert config.s1.b is False
29     assert config.c is False
30     config.c = True
31     assert config.s1.b is True
32     assert config.c is True
33     config.c = False
34     assert config.s1.b is False
35     assert config.c is False
36
37
38 def test_symlink_getproperties():
39     boolopt = BoolOption('b', '', default=True, properties=('test',))
40     linkopt = SymLinkOption("c", boolopt)
41     descr = OptionDescription('opt', '', [boolopt, linkopt])
42     config = Config(descr)
43     config.read_write()
44     assert boolopt.impl_getproperties() == linkopt.impl_getproperties() == ('test',)
45     assert boolopt.impl_has_callback() == linkopt.impl_has_callback() == False
46
47
48 def test_symlink_getcallback():
49     boolopt = BoolOption('b', '', callback=return_value)
50     linkopt = SymLinkOption("c", boolopt)
51     descr = OptionDescription('opt', '', [boolopt, linkopt])
52     config = Config(descr)
53     config.read_write()
54     assert boolopt.impl_has_callback() == linkopt.impl_has_callback() == True
55     assert boolopt.impl_get_callback() == linkopt.impl_get_callback() == (return_value, {})
56
57
58 def test_symlink_requires():
59     boolopt = BoolOption('b', '', default=True)
60     stropt = StrOption('s', '', requires=[{'option': boolopt,
61                                            'expected': False,
62                                            'action': 'disabled'}])
63     linkopt = SymLinkOption("c", stropt)
64     descr = OptionDescription('opt', '', [boolopt, stropt, linkopt])
65     config = Config(descr)
66     config.read_write()
67     assert config.b is True
68     assert config.s is None
69     assert config.c is None
70     config.b = False
71     #
72     props = []
73     try:
74         config.s
75     except PropertiesOptionError as err:
76         props = err.proptype
77     assert props == ['disabled']
78     #
79     props = []
80     try:
81         config.c
82     except PropertiesOptionError as err:
83         props = err.proptype
84     assert props == ['disabled']
85
86
87 def test_symlink_multi():
88     boolopt = BoolOption("b", "", default=[False], multi=True)
89     linkopt = SymLinkOption("c", boolopt)
90     descr = OptionDescription("opt", "",
91                               [linkopt, OptionDescription("s1", "", [boolopt])])
92     config = Config(descr)
93     assert config.s1.b == [False]
94     assert config.c == [False]
95     config.c = [True]
96     assert config.s1.b == [True]
97     assert config.c == [True]
98     config.c = [False]
99     assert config.s1.b == [False]
100     assert config.c == [False]
101     config.c.append(True)
102     assert config.s1.b == [False, True]
103     assert config.c == [False, True]
104     assert boolopt.impl_is_multi() is True
105     assert linkopt.impl_is_multi() is True
106
107
108 def test_symlink_owner():
109     boolopt = BoolOption("b", "", default=False)
110     linkopt = SymLinkOption("c", boolopt)
111     descr = OptionDescription("opt", "",
112                               [linkopt, OptionDescription("s1", "", [boolopt])])
113     config = Config(descr)
114     assert config.getowner(boolopt) == owners.default
115     assert config.getowner(linkopt) == owners.default
116     config.c = True
117     assert config.getowner(boolopt) != owners.default
118     assert config.getowner(linkopt) != owners.default
119
120
121 def test_symlink_get_information():
122     boolopt = BoolOption("b", "", default=False)
123     linkopt = SymLinkOption("c", boolopt)
124     boolopt.impl_set_information('test', 'test')
125     assert boolopt.impl_get_information('test') == 'test'
126     assert linkopt.impl_get_information('test') == 'test'
127     boolopt.impl_set_information('test', 'test2')
128     assert boolopt.impl_get_information('test') == 'test2'
129     assert linkopt.impl_get_information('test') == 'test2'
130
131
132 def test_symlink_master():
133     a = StrOption('a', "", multi=True)
134     ip_admin_eth0 = SymLinkOption('ip_admin_eth0', a)
135     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "", multi=True)
136     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
137     interface1
138     raises(ValueError, 'interface1.impl_set_group_type(groups.master)')
139
140
141 def test_symlink_slaves():
142     a = StrOption('a', "", multi=True)
143     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
144     netmask_admin_eth0 = SymLinkOption('netmask_admin_eth0', a)
145     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
146     interface1
147     raises(ValueError, 'interface1.impl_set_group_type(groups.master)')