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