85f48b9368f9aace1117dfcda43db91f205d27cc
[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
9
10 def test_domainname():
11     d = DomainnameOption('d', '')
12     f = DomainnameOption('f', '', allow_without_dot=True)
13     g = DomainnameOption('g', '', allow_ip=True)
14     od = OptionDescription('a', '', [d, f, g])
15     c = Config(od)
16     c.read_write()
17     c.d = 'toto.com'
18     raises(ValueError, "c.d = 'toto'")
19     c.d = 'toto3.com'
20     raises(ValueError, "c.d = 'toto_super.com'")
21     c.d = 'toto-.com'
22     raises(ValueError, "c.d = 'toto..com'")
23     #
24     c.f = 'toto.com'
25     c.f = 'toto'
26     c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainnamea'
27     raises(ValueError, "c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainnamean'")
28     c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainnamea.nd'
29     c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainnamea.nditsnoteasytogeneratesolongdomainnamewithoutrepeatdomainnameto.olongthathavemorethanmaximumsizeforatruedomainnameanditsnoteas.ytogeneratesolongdomainnamewithoutrepeatbutimnotabletodoitnowie'
30     raises(ValueError, "c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainnamea.nditsnoteasytogeneratesolongdomainnamewithoutrepeatdomainnameto.olongthathavemorethanmaximumsizeforatruedomainnameanditsnoteas.ytogeneratesolongdomainnamewithoutrepeatbutimnotabletodoitnowien'")
31     raises(ValueError, "c.f = 'd'")
32     raises(ValueError, "c.f = 'd.t'")
33     #
34     c.g = 'toto.com'
35     c.g = '192.168.1.0'
36     c.g = '192.168.1.29'
37
38
39 def test_domainname_warning():
40     d = DomainnameOption('d', '', warnings_only=True)
41     f = DomainnameOption('f', '', allow_without_dot=True, warnings_only=True)
42     g = DomainnameOption('g', '', allow_ip=True, warnings_only=True)
43     od = OptionDescription('a', '', [d, f, g])
44     warnings.simplefilter("always", ValueWarning)
45     c = Config(od)
46     c.read_write()
47     c.d = 'toto.com'
48     raises(ValueError, "c.d = 'toto'")
49     c.d = 'toto3.com'
50     with warnings.catch_warnings(record=True) as w:
51         c.d = 'toto_super.com'
52     assert len(w) == 1
53     c.d = 'toto-.com'
54     raises(ValueError, "c.d = 'toto..com'")
55     #
56     c.f = 'toto.com'
57     c.f = 'toto'
58     c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainnamea'
59     raises(ValueError, "c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainnamean'")
60     c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainnamea.nd'
61     c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainnamea.nditsnoteasytogeneratesolongdomainnamewithoutrepeatdomainnameto.olongthathavemorethanmaximumsizeforatruedomainnameanditsnoteas.ytogeneratesolongdomainnamewithoutrepeatbutimnotabletodoitnowie'
62     raises(ValueError, "c.f = 'domainnametoolongthathavemorethanmaximumsizeforatruedomainnamea.nditsnoteasytogeneratesolongdomainnamewithoutrepeatdomainnameto.olongthathavemorethanmaximumsizeforatruedomainnameanditsnoteas.ytogeneratesolongdomainnamewithoutrepeatbutimnotabletodoitnowien'")
63     raises(ValueError, "c.f = 'd'")
64     raises(ValueError, "c.f = 'd.t'")
65     #
66     c.g = 'toto.com'
67     c.g = '192.168.1.0'
68     c.g = '192.168.1.29'
69
70
71 def test_special_domain_name():
72     """domain name option that starts with a number or not
73     """
74     d = DomainnameOption('d', '')
75     e = DomainnameOption('e', '', type_='netbios')
76     od = OptionDescription('a', '', [d, e])
77     c = Config(od)
78     c.read_write()
79     c.d = '1toto.com'
80     c.d = '123toto.com'
81     c.e = 'toto'
82     c.e = '1toto'
83
84
85 def test_domainname_netbios():
86     d = DomainnameOption('d', '', type_='netbios')
87     e = DomainnameOption('e', '', "toto", type_='netbios')
88     od = OptionDescription('a', '', [d, e])
89     c = Config(od)
90     c.read_write()
91     raises(ValueError, "c.d = 'toto.com'")
92     c.d = 'toto'
93     raises(ValueError, "c.d = 'domainnametoolong'")
94
95
96 def test_domainname_hostname():
97     d = DomainnameOption('d', '', type_='hostname')
98     e = DomainnameOption('e', '', "toto", type_='hostname')
99     od = OptionDescription('a', '', [d, e])
100     c = Config(od)
101     c.read_write()
102     raises(ValueError, "c.d = 'toto.com'")
103     c.d = 'toto'
104     c.d = 'domainnametoolong'
105
106
107 def test_email():
108     e = EmailOption('e', '')
109     od = OptionDescription('a', '', [e])
110     c = Config(od)
111     c.read_write()
112     c.e = 'root@foo.com'
113     raises(ValueError, "c.e = 'root'")
114     raises(ValueError, "c.e = 'root@domain'")
115     raises(ValueError, "c.e = 'root[]@domain'")
116
117
118 def test_url():
119     u = URLOption('u', '')
120     od = OptionDescription('a', '', [u])
121     c = Config(od)
122     c.read_write()
123     c.u = 'http://foo.com'
124     c.u = 'https://foo.com'
125     c.u = 'https://foo.com/'
126     raises(ValueError, "c.u = 'ftp://foo.com'")
127     raises(ValueError, "c.u = 'foo.com'")
128     raises(ValueError, "c.u = ':/foo.com'")
129     raises(ValueError, "c.u = 'foo.com/http://'")
130     c.u = 'https://foo.com/index.html'
131     c.u = 'https://foo.com/index.html?var=value&var2=val2'
132     raises(ValueError, "c.u = 'https://foo.com/index\\n.html'")
133     c.u = 'https://foo.com:8443'
134     c.u = 'https://foo.com:8443/'
135     c.u = 'https://foo.com:8443/index.html'
136     raises(ValueError, "c.u = 'https://foo.com:84438989'")