python 3.5 support
[tiramisu.git] / test / test_config_domain.py
1 from .autopath import do_autopath
2 do_autopath()
3
4 import warnings, sys
5 from py.test import raises
6
7 from tiramisu.config import Config
8 from tiramisu.option import DomainnameOption, EmailOption, URLOption, OptionDescription
9 from tiramisu.error import ValueWarning
10 from tiramisu.i18n import _
11
12
13 def test_domainname():
14     d = DomainnameOption('d', '')
15     f = DomainnameOption('f', '', allow_without_dot=True)
16     g = DomainnameOption('g', '', allow_ip=True)
17     od = OptionDescription('a', '', [d, f, g])
18     c = Config(od)
19     c.read_write()
20     c.d = 'toto.com'
21     raises(ValueError, "c.d = 'toto'")
22     c.d = 'toto3.com'
23     raises(ValueError, "c.d = 'toto_super.com'")
24     c.d = 'toto-.com'
25     raises(ValueError, "c.d = 'toto..com'")
26     #
27     c.f = 'toto.com'
28     c.f = 'toto'
29     c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainnamea'
30     raises(ValueError, "c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainnamean'")
31     c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainnamea.nd'
32     c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainnamea.nditsnoteasytogeneratesolongdomainnamewithoutrepeatdomainnameto.olongthathavemorethanmaximumsizeforatruedomainnameanditsnoteas.ytogeneratesolongdomainnamewithoutrepeatbutimnotabletodoitnowie'
33     raises(ValueError, "c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainnamea.nditsnoteasytogeneratesolongdomainnamewithoutrepeatdomainnameto.olongthathavemorethanmaximumsizeforatruedomainnameanditsnoteas.ytogeneratesolongdomainnamewithoutrepeatbutimnotabletodoitnowien'")
34     c.f = 'd'
35     c.f = 'd.t'
36     #
37     raises(ValueError, "c.f = '192.168.1.1'")
38     c.g = 'toto.com'
39     c.g = '192.168.1.0'
40     c.g = '192.168.1.29'
41
42
43 def test_domainname_upper():
44     d = DomainnameOption('d', '')
45     od = OptionDescription('a', '', [d])
46     c = Config(od)
47     c.read_write()
48     c.d = 'toto.com'
49     msg = _('some characters are uppercase')
50     has_error = False
51     try:
52         c.d = 'TOTO.COM'
53     except ValueError as err:
54         if sys.version_info[0] >= 3:  # pragma: optional cover
55             assert msg in str(err)
56         else:
57             assert msg in str(err)
58         has_error = True
59     assert has_error is True
60     has_error = False
61     try:
62         c.d = 'toTo.com'
63     except ValueError as err:
64         if sys.version_info[0] >= 3:  # pragma: optional cover
65             assert msg in str(err)
66         else:
67             assert msg in str(err)
68         has_error = True
69     assert has_error is True
70
71
72 def test_domainname_warning():
73     d = DomainnameOption('d', '', warnings_only=True)
74     f = DomainnameOption('f', '', allow_without_dot=True, warnings_only=True)
75     g = DomainnameOption('g', '', allow_ip=True, warnings_only=True)
76     od = OptionDescription('a', '', [d, f, g])
77     warnings.simplefilter("always", ValueWarning)
78     c = Config(od)
79     c.read_write()
80     c.d = 'toto.com'
81     raises(ValueError, "c.d = 'toto'")
82     c.d = 'toto3.com'
83     with warnings.catch_warnings(record=True) as w:
84         c.d = 'toto_super.com'
85     assert len(w) == 1
86     c.d = 'toto-.com'
87     raises(ValueError, "c.d = 'toto..com'")
88     #
89     c.f = 'toto.com'
90     c.f = 'toto'
91     c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainnamea'
92     raises(ValueError, "c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainnamean'")
93     c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainnamea.nd'
94     c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainnamea.nditsnoteasytogeneratesolongdomainnamewithoutrepeatdomainnameto.olongthathavemorethanmaximumsizeforatruedomainnameanditsnoteas.ytogeneratesolongdomainnamewithoutrepeatbutimnotabletodoitnowie'
95     raises(ValueError, "c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainname.nditsnoteasytogeneratesolongdomainnamewithoutrepeatdomainnamet.olongthathavemorethanmaximumsizeforatruedomainnameanditsnotea.ytogeneratesolongdomainnamewithoutrepeatbutimnotabletodoitnowie.xxxx'")
96     c.f = 'd'
97     c.f = 'd.t'
98     #
99     raises(ValueError, "c.f = '192.168.1.1'")
100     c.g = 'toto.com'
101     c.g = '192.168.1.0'
102     c.g = '192.168.1.29'
103
104
105 def test_special_domain_name():
106     """domain name option that starts with a number or not
107     """
108     d = DomainnameOption('d', '')
109     e = DomainnameOption('e', '', type_='netbios')
110     od = OptionDescription('a', '', [d, e])
111     c = Config(od)
112     c.read_write()
113     c.d = '1toto.com'
114     c.d = '123toto.com'
115     c.e = 'toto'
116     c.e = '1toto'
117
118
119 def test_domainname_netbios():
120     d = DomainnameOption('d', '', type_='netbios')
121     e = DomainnameOption('e', '', "toto", type_='netbios')
122     od = OptionDescription('a', '', [d, e])
123     c = Config(od)
124     c.read_write()
125     raises(ValueError, "c.d = 'toto.com'")
126     c.d = 'toto'
127     raises(ValueError, "c.d = 'domainnametoolong'")
128
129
130 def test_domainname_hostname():
131     d = DomainnameOption('d', '', type_='hostname')
132     e = DomainnameOption('e', '', "toto", type_='hostname')
133     od = OptionDescription('a', '', [d, e])
134     c = Config(od)
135     c.read_write()
136     raises(ValueError, "c.d = 'toto.com'")
137     c.d = 'toto'
138     c.d = 'domainnametoolong'
139
140
141 def test_email():
142     e = EmailOption('e', '')
143     od = OptionDescription('a', '', [e])
144     c = Config(od)
145     c.read_write()
146     c.e = u'foo-bar.baz@example.com'
147     c.e = u'root@foo.com'
148     c.e = u'root@domain'
149     raises(ValueError, "c.e = 1")
150     raises(ValueError, "c.e = u'root'")
151     raises(ValueError, "c.e = u'root[]@domain'")
152
153
154 def test_url():
155     u = URLOption('u', '')
156     od = OptionDescription('a', '', [u])
157     c = Config(od)
158     c.read_write()
159     c.u = 'http://foo.com'
160     c.u = 'https://foo.com'
161     c.u = 'https://foo.com/'
162     raises(ValueError, "c.u = 1")
163     raises(ValueError, "c.u = 'ftp://foo.com'")
164     raises(ValueError, "c.u = 'foo.com'")
165     raises(ValueError, "c.u = ':/foo.com'")
166     raises(ValueError, "c.u = 'foo.com/http://'")
167     c.u = 'https://foo.com/index.html'
168     c.u = 'https://foo.com/index.html?var=value&var2=val2'
169     raises(ValueError, "c.u = 'https://foo.com/index\\n.html'")
170     c.u = 'https://foo.com:8443'
171     c.u = 'https://foo.com:8443/'
172     c.u = 'https://foo.com:8443/index.html'
173     raises(ValueError, "c.u = 'https://foo.com:84438989'")
174     c.u = 'https://foo.com:8443/INDEX'
175     raises(ValueError, "c.u = 'https://FOO.COM:8443'")