python 3.5 support
[tiramisu.git] / test / test_option_consistency.py
index 01e9c90..3761cf2 100644 (file)
@@ -1,4 +1,4 @@
-from autopath import do_autopath
+from .autopath import do_autopath
 do_autopath()
 
 from py.test import raises
@@ -6,11 +6,15 @@ from py.test import raises
 from tiramisu.setting import owners, groups
 from tiramisu.config import Config
 from tiramisu.option import IPOption, NetworkOption, NetmaskOption, IntOption,\
-    BroadcastOption, SymLinkOption, OptionDescription, submulti
+    BroadcastOption, StrOption, SymLinkOption, OptionDescription, submulti
 from tiramisu.error import ConfigError, ValueWarning, PropertiesOptionError
 import warnings
 
 
+def return_value(value=None):
+    return value
+
+
 def test_consistency():
     a = IntOption('a', '')
     b = IntOption('b', '')
@@ -67,9 +71,15 @@ def test_consistency_warnings_only_more_option():
     with warnings.catch_warnings(record=True) as w:
         c.b = 1
     assert w != []
+    assert len(w) == 1
+    with warnings.catch_warnings(record=True) as w:
+        c.d
+    assert w != []
+    assert len(w) == 1
     with warnings.catch_warnings(record=True) as w:
         c.d = 1
     assert w != []
+    assert len(w) == 1
 
 
 def test_consistency_not_equal():
@@ -231,6 +241,13 @@ def test_consistency_not_equal_masterslave():
     c.a = [1]
     raises(ValueError, "c.b = [1]")
     c.b = [2]
+    del(c.a)
+    c.a.append(1)
+    c.make_dict()
+    c.b[0] = 3
+    c.a.append(2)
+    c.b[0] = 3
+    raises(ValueError, "c.b[1] = 3")
 
 
 def test_consistency_not_equal_masterslaves_default():
@@ -703,3 +720,55 @@ def test_consistency_with_callback():
     c.impl_add_consistency('in_network', a, b)
     cfg = Config(od)
     cfg.c
+
+
+def test_consistency_double_warnings():
+    a = IntOption('a', '')
+    b = IntOption('b', '', 1)
+    c = IntOption('c', '', 1)
+    od = OptionDescription('od', '', [a, b, c])
+    warnings.simplefilter("always", ValueWarning)
+    a.impl_add_consistency('not_equal', b, warnings_only=True)
+    a.impl_add_consistency('not_equal', c, warnings_only=True)
+    cfg = Config(od)
+    with warnings.catch_warnings(record=True) as w:
+        cfg.a = 1
+    assert w != []
+    assert len(w) == 2
+    with warnings.catch_warnings(record=True) as w:
+        cfg.c = 2
+    assert w == []
+    with warnings.catch_warnings(record=True) as w:
+        cfg.a = 2
+    assert w != []
+    assert len(w) == 1
+    cfg.cfgimpl_get_settings().remove('warnings')
+    with warnings.catch_warnings(record=True) as w:
+        cfg.a = 1
+    assert w == []
+
+
+def test_consistency_warnings_error():
+    a = IntOption('a', '')
+    b = IntOption('b', '', 1)
+    c = IntOption('c', '', 1)
+    od = OptionDescription('od', '', [a, b, c])
+    warnings.simplefilter("always", ValueWarning)
+    a.impl_add_consistency('not_equal', b, warnings_only=True)
+    a.impl_add_consistency('not_equal', c)
+    cfg = Config(od)
+    with warnings.catch_warnings(record=True) as w:
+        raises(ValueError, "cfg.a = 1")
+    assert w == []
+
+
+def test_consistency_network_netmask_mandatory():
+    a = NetworkOption('a', '', multi=True, properties=('mandatory',), default=[u'0.0.0.0'])
+    b = NetmaskOption('b', '', multi=True, properties=('mandatory',), default_multi=u'0.0.0.0')
+    od = OptionDescription('a', '', [a, b])
+    od.impl_set_group_type(groups.master)
+    b.impl_add_consistency('network_netmask', a)
+    c = Config(od)
+    c.read_only()
+    c.cfgimpl_get_settings().remove('mandatory')
+    c.make_dict()