1acdbb8814308c8a66110159409fe5e39ec32749
[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=[{'option': boolopt,
34                                            'expected': False,
35                                            'action': 'disabled'}])
36     linkopt = SymLinkOption("c", stropt)
37     descr = OptionDescription('opt', '', [boolopt, stropt, linkopt])
38     config = Config(descr)
39     config.read_write()
40     assert config.b is True
41     assert config.s is None
42     assert config.c is None
43     config.b = False
44     #
45     props = []
46     try:
47         config.s
48     except PropertiesOptionError, err:
49         props = err.proptype
50     assert props == ['disabled']
51     #
52     props = []
53     try:
54         config.c
55     except PropertiesOptionError, err:
56         props = err.proptype
57     assert props == ['disabled']
58
59
60 def test_symlink_multi():
61     boolopt = BoolOption("b", "", default=[False], multi=True)
62     linkopt = SymLinkOption("c", boolopt)
63     descr = OptionDescription("opt", "",
64                               [linkopt, OptionDescription("s1", "", [boolopt])])
65     config = Config(descr)
66     assert config.s1.b == [False]
67     assert config.c == [False]
68     config.c = [True]
69     assert config.s1.b == [True]
70     assert config.c == [True]
71     config.c = [False]
72     assert config.s1.b == [False]
73     assert config.c == [False]
74     config.c.append(True)
75     assert config.s1.b == [False, True]
76     assert config.c == [False, True]
77     assert boolopt.impl_is_multi() is True
78     assert linkopt.impl_is_multi() is True
79
80
81 def test_symlink_owner():
82     boolopt = BoolOption("b", "", default=False)
83     linkopt = SymLinkOption("c", boolopt)
84     descr = OptionDescription("opt", "",
85                               [linkopt, OptionDescription("s1", "", [boolopt])])
86     config = Config(descr)
87     assert config.getowner('s1.b') == owners.default
88     assert config.getowner('c') == owners.default
89     config.c = True
90     assert config.getowner('s1.b') != owners.default
91     assert config.getowner('c') != owners.default
92
93
94 def test_symlink_get_information():
95     boolopt = BoolOption("b", "", default=False)
96     linkopt = SymLinkOption("c", boolopt)
97     boolopt.impl_set_information('test', 'test')
98     assert boolopt.impl_get_information('test') == 'test'
99     assert linkopt.impl_get_information('test') == 'test'
100     boolopt.impl_set_information('test', 'test2')
101     assert boolopt.impl_get_information('test') == 'test2'
102     assert linkopt.impl_get_information('test') == 'test2'
103
104
105 def test_symlink_master():
106     a = StrOption('a', "", multi=True)
107     ip_admin_eth0 = SymLinkOption('ip_admin_eth0', a)
108     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "", multi=True)
109     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
110     raises(ValueError, 'interface1.impl_set_group_type(groups.master)')
111
112
113 def test_symlink_slaves():
114     a = StrOption('a', "", multi=True)
115     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
116     netmask_admin_eth0 = SymLinkOption('netmask_admin_eth0', a)
117     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
118     raises(ValueError, 'interface1.impl_set_group_type(groups.master)')