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