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