consistancies can have more than one option
[tiramisu.git] / test / test_option_consistency.py
1 import autopath
2 from py.test import raises
3
4 from tiramisu.setting import owners, groups
5 from tiramisu.config import Config
6 from tiramisu.option import IPOption, NetworkOption, NetmaskOption, IntOption,\
7     BroadcastOption, SymLinkOption, OptionDescription
8
9
10 def test_consistency_not_equal():
11     a = IntOption('a', '')
12     b = IntOption('b', '')
13     od = OptionDescription('od', '', [a, b])
14     a.impl_add_consistency('not_equal', b)
15     c = Config(od)
16     assert c.a is None
17     assert c.b is None
18     c.a = 1
19     del(c.a)
20     c.a = 1
21     raises(ValueError, "c.b = 1")
22     c.b = 2
23
24
25 def test_consistency_not_equal_symlink():
26     a = IntOption('a', '')
27     b = IntOption('b', '')
28     c = SymLinkOption('c', a)
29     od = OptionDescription('od', '', [a, b, c])
30     a.impl_add_consistency('not_equal', b)
31     c = Config(od)
32     assert set(od._consistencies.keys()) == set([a, b])
33
34
35 def test_consistency_not_equal_multi():
36     a = IntOption('a', '', multi=True)
37     b = IntOption('b', '', multi=True)
38     od = OptionDescription('od', '', [a, b])
39     a.impl_add_consistency('not_equal', b)
40     c = Config(od)
41     assert c.a == []
42     assert c.b == []
43     c.a = [1]
44     del(c.a)
45     c.a = [1]
46     raises(ValueError, "c.b = [1]")
47     c.b = [2]
48
49
50 def test_consistency_default():
51     a = IntOption('a', '', 1)
52     b = IntOption('b', '', 1)
53     raises(ValueError, "a.impl_add_consistency('not_equal', b)")
54
55
56 def test_consistency_default_diff():
57     a = IntOption('a', '', 3)
58     b = IntOption('b', '', 1)
59     od = OptionDescription('od', '', [a, b])
60     a.impl_add_consistency('not_equal', b)
61     c = Config(od)
62     raises(ValueError, "c.a = 1")
63     c.a = 2
64     c.b = 3
65     assert c.getowner(a) is owners.user
66     raises(ValueError, "del(c.a)")
67     assert c.getowner(a) is owners.user
68
69
70 def test_consistency_ip_netmask():
71     a = IPOption('a', '')
72     b = NetmaskOption('b', '')
73     od = OptionDescription('od', '', [a, b])
74     b.impl_add_consistency('ip_netmask', a)
75     c = Config(od)
76     c.a = '192.168.1.1'
77     c.b = '255.255.255.0'
78     c.a = '192.168.1.2'
79     c.b = '255.255.255.255'
80     c.b = '255.255.255.0'
81     raises(ValueError, "c.a = '192.168.1.0'")
82
83
84 def test_consistency_network_netmask():
85     a = NetworkOption('a', '')
86     b = NetmaskOption('b', '')
87     od = OptionDescription('od', '', [a, b])
88     b.impl_add_consistency('network_netmask', a)
89     c = Config(od)
90     c.a = '192.168.1.1'
91     c.b = '255.255.255.255'
92     del(c.b)
93     c.a = '192.168.1.0'
94     c.b = '255.255.255.0'
95     raises(ValueError, "c.a = '192.168.1.1'")
96
97
98 def test_consistency_ip_netmask_error_multi():
99     a = IPOption('a', '', multi=True)
100     b = NetmaskOption('b', '')
101     od = OptionDescription('od', '', [a, b])
102     raises(ValueError, "b.impl_add_consistency('ip_netmask', a)")
103
104
105 def test_consistency_ip_netmask_multi():
106     a = IPOption('a', '', multi=True)
107     b = NetmaskOption('b', '', multi=True)
108     od = OptionDescription('od', '', [a, b])
109     b.impl_add_consistency('ip_netmask', a)
110     c = Config(od)
111     c.a = ['192.168.1.1']
112     c.b = ['255.255.255.0']
113     c.a = ['192.168.1.2']
114     c.b = ['255.255.255.255']
115     c.b = ['255.255.255.0']
116     raises(ValueError, "c.a = ['192.168.1.0']")
117
118
119 def test_consistency_network_netmask_multi():
120     a = NetworkOption('a', '', multi=True)
121     b = NetmaskOption('b', '', multi=True)
122     od = OptionDescription('od', '', [a, b])
123     b.impl_add_consistency('network_netmask', a)
124     c = Config(od)
125     c.a = ['192.168.1.1']
126     c.b = ['255.255.255.255']
127     del(c.b)
128     c.a = ['192.168.1.0']
129     c.b = ['255.255.255.0']
130     raises(ValueError, "c.a = ['192.168.1.1']")
131
132
133 def test_consistency_ip_netmask_multi_master():
134     a = IPOption('a', '', multi=True)
135     b = NetmaskOption('b', '', multi=True)
136     od = OptionDescription('a', '', [a, b])
137     od.impl_set_group_type(groups.master)
138     b.impl_add_consistency('ip_netmask', a)
139     c = Config(od)
140     c.a = ['192.168.1.1']
141     c.b = ['255.255.255.0']
142     c.a = ['192.168.1.2']
143     c.b = ['255.255.255.255']
144     c.b = ['255.255.255.0']
145     raises(ValueError, "c.a = ['192.168.1.0']")
146     c.a = ['192.168.1.2', '192.168.1.3']
147
148
149 def test_consistency_network_netmask_multi_master():
150     a = NetworkOption('a', '', multi=True)
151     b = NetmaskOption('b', '', multi=True)
152     od = OptionDescription('a', '', [a, b])
153     od.impl_set_group_type(groups.master)
154     b.impl_add_consistency('network_netmask', a)
155     c = Config(od)
156     c.a = ['192.168.1.1']
157     c.b = ['255.255.255.255']
158     del(c.b)
159     c.a = ['192.168.1.0']
160     c.b = ['255.255.255.0']
161     raises(ValueError, "c.a = ['192.168.1.1']")
162
163
164 def test_consistency_broadcast():
165     a = NetworkOption('a', '', multi=True)
166     b = NetmaskOption('b', '', multi=True)
167     c = BroadcastOption('c', '', multi=True)
168     od = OptionDescription('a', '', [a, b, c])
169     od.impl_set_group_type(groups.master)
170     b.impl_add_consistency('network_netmask', a)
171     c.impl_add_consistency('broadcast', a, b)
172     c = Config(od)
173     c.a = ['192.168.1.0']
174     c.b = ['255.255.255.0']
175     c.c = ['192.168.1.255']
176     raises(ValueError, "c.a = ['192.168.1.1']")
177     c.a = ['192.168.1.0', '192.168.2.128']
178     c.b = ['255.255.255.0', '255.255.255.128']
179     c.c = ['192.168.1.255', '192.168.2.255']
180     raises(ValueError, "c.c[1] = '192.168.2.128'")