Mercurial > public > mercurial-scm > hg-stable
annotate tests/test-url.py @ 53031:e705fec4a03f stable
branching: merging with 7.0 changes
Since 6.9.3 was made after 7.0rc0 we need to deal with more branching than
usual.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 05 Mar 2025 23:02:19 +0100 |
parents | f19a3f1437f3 |
children |
rev | line source |
---|---|
28914
63fe5ddb8715
tests: make test-url use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28677
diff
changeset
|
1 import doctest |
15398
474279be5add
tests: fix readline escape characters in heredoctest.py/test-url.py
Brodie Rao <brodie@bitheap.org>
parents:
15018
diff
changeset
|
2 import os |
12592
f2937d6492c5
url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff
changeset
|
3 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
4 |
12592
f2937d6492c5
url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff
changeset
|
5 def check(a, b): |
f2937d6492c5
url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff
changeset
|
6 if a != b: |
28677
2903558a6991
py3: make test-url use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
26421
diff
changeset
|
7 print((a, b)) |
12592
f2937d6492c5
url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff
changeset
|
8 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
9 |
12606
5c8353692123
test-url: refactor with shorter lines
Martin Geisler <mg@aragost.com>
parents:
12592
diff
changeset
|
10 def cert(cn): |
20685
56b1f39dd0c1
test-url: move from dict() construction to {} literals
Augie Fackler <raf@durin42.com>
parents:
15611
diff
changeset
|
11 return {'subject': ((('commonName', cn),),)} |
12606
5c8353692123
test-url: refactor with shorter lines
Martin Geisler <mg@aragost.com>
parents:
12592
diff
changeset
|
12 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
13 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
14 from mercurial import sslutil |
12592
f2937d6492c5
url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff
changeset
|
15 |
28914
63fe5ddb8715
tests: make test-url use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28677
diff
changeset
|
16 _verifycert = sslutil._verifycert |
12724
66e7ba85585b
test-url: remove trailing whitespace
Augie Fackler <durin42@gmail.com>
parents:
12606
diff
changeset
|
17 # Test non-wildcard certificates |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
18 check(_verifycert(cert('example.com'), 'example.com'), None) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
19 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
20 _verifycert(cert('example.com'), 'www.example.com'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
21 b'certificate is for example.com', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
22 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
23 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
24 _verifycert(cert('www.example.com'), 'example.com'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
25 b'certificate is for www.example.com', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
26 ) |
12592
f2937d6492c5
url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff
changeset
|
27 |
f2937d6492c5
url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff
changeset
|
28 # Test wildcard certificates |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
29 check(_verifycert(cert('*.example.com'), 'www.example.com'), None) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
30 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
31 _verifycert(cert('*.example.com'), 'example.com'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
32 b'certificate is for *.example.com', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
33 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
34 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
35 _verifycert(cert('*.example.com'), 'w.w.example.com'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
36 b'certificate is for *.example.com', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
37 ) |
12592
f2937d6492c5
url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff
changeset
|
38 |
13249
75d0c38a0bca
url: check subjectAltName when verifying ssl certificate
Yuya Nishihara <yuya@tcha.org>
parents:
13248
diff
changeset
|
39 # Test subjectAltName |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
40 san_cert = { |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
41 'subject': ((('commonName', 'example.com'),),), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
42 'subjectAltName': (('DNS', '*.example.net'), ('DNS', 'example.net')), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
43 } |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
44 check(_verifycert(san_cert, 'example.net'), None) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
45 check(_verifycert(san_cert, 'foo.example.net'), None) |
14666
27b080aa880a
sslutil: fall back to commonName when no dNSName in subjectAltName (issue2798)
Nicolas Bareil <nico@chdir.org>
parents:
14313
diff
changeset
|
46 # no fallback to subject commonName when subjectAltName has DNS |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
47 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
48 _verifycert(san_cert, 'example.com'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
49 b'certificate is for *.example.net, example.net', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
50 ) |
14666
27b080aa880a
sslutil: fall back to commonName when no dNSName in subjectAltName (issue2798)
Nicolas Bareil <nico@chdir.org>
parents:
14313
diff
changeset
|
51 # fallback to subject commonName when no DNS in subjectAltName |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
52 san_cert = { |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
53 'subject': ((('commonName', 'example.com'),),), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
54 'subjectAltName': (('IP Address', '8.8.8.8'),), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
55 } |
14666
27b080aa880a
sslutil: fall back to commonName when no dNSName in subjectAltName (issue2798)
Nicolas Bareil <nico@chdir.org>
parents:
14313
diff
changeset
|
56 check(_verifycert(san_cert, 'example.com'), None) |
13249
75d0c38a0bca
url: check subjectAltName when verifying ssl certificate
Yuya Nishihara <yuya@tcha.org>
parents:
13248
diff
changeset
|
57 |
12592
f2937d6492c5
url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff
changeset
|
58 # Avoid some pitfalls |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
59 check(_verifycert(cert('*.foo'), 'foo'), b'certificate is for *.foo') |
29452
26a5d605b868
sslutil: synchronize hostname matching logic with CPython
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29451
diff
changeset
|
60 check(_verifycert(cert('*o'), 'foo'), None) |
12592
f2937d6492c5
url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff
changeset
|
61 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
62 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
63 _verifycert({'subject': ()}, 'example.com'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
64 b'no commonName or subjectAltName found in certificate', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
65 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
66 check(_verifycert(None, 'example.com'), b'no certificate received') |
13248
00411a4fa1bb
url: fix UnicodeDecodeError on certificate verification error
Yuya Nishihara <yuya@tcha.org>
parents:
12865
diff
changeset
|
67 |
14666
27b080aa880a
sslutil: fall back to commonName when no dNSName in subjectAltName (issue2798)
Nicolas Bareil <nico@chdir.org>
parents:
14313
diff
changeset
|
68 # Unicode (IDN) certname isn't supported |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
69 check( |
52664
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
70 _verifycert(cert('\u4f8b.jp'), 'example.jp'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
71 b'IDN in certificate not supported', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
72 ) |
14666
27b080aa880a
sslutil: fall back to commonName when no dNSName in subjectAltName (issue2798)
Nicolas Bareil <nico@chdir.org>
parents:
14313
diff
changeset
|
73 |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
74 # The following tests are from CPython's test_ssl.py. |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
75 check(_verifycert(cert('example.com'), 'example.com'), None) |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
76 check(_verifycert(cert('example.com'), 'ExAmple.cOm'), None) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
77 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
78 _verifycert(cert('example.com'), 'www.example.com'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
79 b'certificate is for example.com', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
80 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
81 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
82 _verifycert(cert('example.com'), '.example.com'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
83 b'certificate is for example.com', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
84 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
85 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
86 _verifycert(cert('example.com'), 'example.org'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
87 b'certificate is for example.com', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
88 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
89 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
90 _verifycert(cert('example.com'), 'exampleXcom'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
91 b'certificate is for example.com', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
92 ) |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
93 check(_verifycert(cert('*.a.com'), 'foo.a.com'), None) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
94 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
95 _verifycert(cert('*.a.com'), 'bar.foo.a.com'), b'certificate is for *.a.com' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
96 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
97 check(_verifycert(cert('*.a.com'), 'a.com'), b'certificate is for *.a.com') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
98 check(_verifycert(cert('*.a.com'), 'Xa.com'), b'certificate is for *.a.com') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
99 check(_verifycert(cert('*.a.com'), '.a.com'), b'certificate is for *.a.com') |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
100 |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
101 # only match one left-most wildcard |
29452
26a5d605b868
sslutil: synchronize hostname matching logic with CPython
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29451
diff
changeset
|
102 check(_verifycert(cert('f*.com'), 'foo.com'), None) |
26a5d605b868
sslutil: synchronize hostname matching logic with CPython
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29451
diff
changeset
|
103 check(_verifycert(cert('f*.com'), 'f.com'), None) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
104 check(_verifycert(cert('f*.com'), 'bar.com'), b'certificate is for f*.com') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
105 check(_verifycert(cert('f*.com'), 'foo.a.com'), b'certificate is for f*.com') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
106 check(_verifycert(cert('f*.com'), 'bar.foo.com'), b'certificate is for f*.com') |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
107 |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
108 # NULL bytes are bad, CVE-2013-4073 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
109 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
110 _verifycert( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
111 cert('null.python.org\x00example.org'), 'null.python.org\x00example.org' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
112 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
113 None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
114 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
115 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
116 _verifycert(cert('null.python.org\x00example.org'), 'example.org'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
117 b'certificate is for null.python.org\x00example.org', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
118 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
119 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
120 _verifycert(cert('null.python.org\x00example.org'), 'null.python.org'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
121 b'certificate is for null.python.org\x00example.org', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
122 ) |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
123 |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
124 # error cases with wildcards |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
125 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
126 _verifycert(cert('*.*.a.com'), 'bar.foo.a.com'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
127 b'certificate is for *.*.a.com', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
128 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
129 check(_verifycert(cert('*.*.a.com'), 'a.com'), b'certificate is for *.*.a.com') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
130 check(_verifycert(cert('*.*.a.com'), 'Xa.com'), b'certificate is for *.*.a.com') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
131 check(_verifycert(cert('*.*.a.com'), '.a.com'), b'certificate is for *.*.a.com') |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
132 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
133 check(_verifycert(cert('a.*.com'), 'a.foo.com'), b'certificate is for a.*.com') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
134 check(_verifycert(cert('a.*.com'), 'a..com'), b'certificate is for a.*.com') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
135 check(_verifycert(cert('a.*.com'), 'a.com'), b'certificate is for a.*.com') |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
136 |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
137 # wildcard doesn't match IDNA prefix 'xn--' |
52664
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
138 idna = 'püthon.python.org'.encode('idna').decode('ascii') |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
139 check(_verifycert(cert(idna), idna), None) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
140 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
141 _verifycert(cert('x*.python.org'), idna), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
142 b'certificate is for x*.python.org', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
143 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
144 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
145 _verifycert(cert('xn--p*.python.org'), idna), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
146 b'certificate is for xn--p*.python.org', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
147 ) |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
148 |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
149 # wildcard in first fragment and IDNA A-labels in sequent fragments |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
150 # are supported. |
52664
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
151 idna = 'www*.pythön.org'.encode('idna').decode('ascii') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
152 check( |
52664
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
153 _verifycert(cert(idna), 'www.pythön.org'.encode('idna').decode('ascii')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
154 None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
155 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
156 check( |
52664
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
157 _verifycert(cert(idna), 'www1.pythön.org'.encode('idna').decode('ascii')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
158 None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
159 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
160 check( |
52664
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
161 _verifycert(cert(idna), 'ftp.pythön.org'.encode('idna').decode('ascii')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
162 b'certificate is for www*.xn--pythn-mua.org', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
163 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
164 check( |
52664
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
165 _verifycert(cert(idna), 'pythön.org'.encode('idna').decode('ascii')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
166 b'certificate is for www*.xn--pythn-mua.org', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
167 ) |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
168 |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
169 c = { |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
170 'notAfter': 'Jun 26 21:41:46 2011 GMT', |
52664
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
171 'subject': ((('commonName', 'linuxfrz.org'),),), |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
172 'subjectAltName': ( |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
173 ('DNS', 'linuxfr.org'), |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
174 ('DNS', 'linuxfr.com'), |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
175 ('othername', '<unsupported>'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
176 ), |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
177 } |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
178 check(_verifycert(c, 'linuxfr.org'), None) |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
179 check(_verifycert(c, 'linuxfr.com'), None) |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
180 # Not a "DNS" entry |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
181 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
182 _verifycert(c, '<unsupported>'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
183 b'certificate is for linuxfr.org, linuxfr.com', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
184 ) |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
185 # When there is a subjectAltName, commonName isn't used |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
186 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
187 _verifycert(c, 'linuxfrz.org'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
188 b'certificate is for linuxfr.org, linuxfr.com', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
189 ) |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
190 |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
191 # A pristine real-world example |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
192 c = { |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
193 'notAfter': 'Dec 18 23:59:59 2011 GMT', |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
194 'subject': ( |
52664
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
195 (('countryName', 'US'),), |
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
196 (('stateOrProvinceName', 'California'),), |
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
197 (('localityName', 'Mountain View'),), |
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
198 (('organizationName', 'Google Inc'),), |
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
199 (('commonName', 'mail.google.com'),), |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
200 ), |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
201 } |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
202 check(_verifycert(c, 'mail.google.com'), None) |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
203 check(_verifycert(c, 'gmail.com'), b'certificate is for mail.google.com') |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
204 |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
205 # Only commonName is considered |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
206 check(_verifycert(c, 'California'), b'certificate is for mail.google.com') |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
207 |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
208 # Neither commonName nor subjectAltName |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
209 c = { |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
210 'notAfter': 'Dec 18 23:59:59 2011 GMT', |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
211 'subject': ( |
52664
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
212 (('countryName', 'US'),), |
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
213 (('stateOrProvinceName', 'California'),), |
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
214 (('localityName', 'Mountain View'),), |
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
215 (('organizationName', 'Google Inc'),), |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
216 ), |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
217 } |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
218 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
219 _verifycert(c, 'mail.google.com'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
220 b'no commonName or subjectAltName found in certificate', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
221 ) |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
222 |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
223 # No DNS entry in subjectAltName but a commonName |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
224 c = { |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
225 'notAfter': 'Dec 18 23:59:59 2099 GMT', |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
226 'subject': ( |
52664
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
227 (('countryName', 'US'),), |
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
228 (('stateOrProvinceName', 'California'),), |
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
229 (('localityName', 'Mountain View'),), |
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
230 (('commonName', 'mail.google.com'),), |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
231 ), |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
232 'subjectAltName': (('othername', 'blabla'),), |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
233 } |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
234 check(_verifycert(c, 'mail.google.com'), None) |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
235 |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
236 # No DNS entry subjectAltName and no commonName |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
237 c = { |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
238 'notAfter': 'Dec 18 23:59:59 2099 GMT', |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
239 'subject': ( |
52664
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
240 (('countryName', 'US'),), |
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
241 (('stateOrProvinceName', 'California'),), |
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
242 (('localityName', 'Mountain View'),), |
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
243 (('organizationName', 'Google Inc'),), |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
244 ), |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
245 'subjectAltName': (('othername', 'blabla'),), |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
246 } |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
247 check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
248 _verifycert(c, 'google.com'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
249 b'no commonName or subjectAltName found in certificate', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
250 ) |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
251 |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
252 # Empty cert / no cert |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
253 check(_verifycert(None, 'example.com'), b'no certificate received') |
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
254 check(_verifycert({}, 'example.com'), b'no certificate received') |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
255 |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
256 # avoid denials of service by refusing more than one |
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
257 # wildcard per fragment. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
258 check( |
52664
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
259 _verifycert({'subject': ((('commonName', 'a*b.com'),),)}, 'axxb.com'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
260 None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
261 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
262 check( |
52664
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
263 _verifycert({'subject': ((('commonName', 'a*b.co*'),),)}, 'axxb.com'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
264 b'certificate is for a*b.co*', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
265 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
266 check( |
52664
9db77d46de79
py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
267 _verifycert({'subject': ((('commonName', 'a*b*.com'),),)}, 'axxbxxc.com'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
268 b'too many wildcards in certificate DNS name: a*b*.com', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
269 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
270 |
29451
676f4d0e3a7b
tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28914
diff
changeset
|
271 |
13770 | 272 def test_url(): |
273 """ | |
37918
0dcd03637d36
tests: fix error case in test-url.py's doctest
Augie Fackler <augie@google.com>
parents:
29452
diff
changeset
|
274 >>> from mercurial import error, pycompat |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45687
diff
changeset
|
275 >>> from mercurial.utils.urlutil import url |
37999
d088810c496e
tests: fix deprecation warning in test-url.py
Augie Fackler <augie@google.com>
parents:
37919
diff
changeset
|
276 >>> from mercurial.utils.stringutil import forcebytestr |
13770 | 277 |
278 This tests for edge cases in url.URL's parsing algorithm. Most of | |
279 these aren't useful for documentation purposes, so they aren't | |
280 part of the class's doc tests. | |
281 | |
282 Query strings and fragments: | |
283 | |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
284 >>> url(b'http://host/a?b#c') |
13770 | 285 <url scheme: 'http', host: 'host', path: 'a', query: 'b', fragment: 'c'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
286 >>> url(b'http://host/a?') |
13770 | 287 <url scheme: 'http', host: 'host', path: 'a'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
288 >>> url(b'http://host/a#b#c') |
13770 | 289 <url scheme: 'http', host: 'host', path: 'a', fragment: 'b#c'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
290 >>> url(b'http://host/a#b?c') |
13770 | 291 <url scheme: 'http', host: 'host', path: 'a', fragment: 'b?c'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
292 >>> url(b'http://host/?a#b') |
13770 | 293 <url scheme: 'http', host: 'host', path: '', query: 'a', fragment: 'b'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
294 >>> url(b'http://host/?a#b', parsequery=False) |
13770 | 295 <url scheme: 'http', host: 'host', path: '?a', fragment: 'b'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
296 >>> url(b'http://host/?a#b', parsefragment=False) |
13770 | 297 <url scheme: 'http', host: 'host', path: '', query: 'a#b'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
298 >>> url(b'http://host/?a#b', parsequery=False, parsefragment=False) |
13770 | 299 <url scheme: 'http', host: 'host', path: '?a#b'> |
300 | |
301 IPv6 addresses: | |
302 | |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
303 >>> url(b'ldap://[2001:db8::7]/c=GB?objectClass?one') |
13770 | 304 <url scheme: 'ldap', host: '[2001:db8::7]', path: 'c=GB', |
305 query: 'objectClass?one'> | |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
306 >>> url(b'ldap://joe:xxx@[2001:db8::7]:80/c=GB?objectClass?one') |
13770 | 307 <url scheme: 'ldap', user: 'joe', passwd: 'xxx', host: '[2001:db8::7]', |
308 port: '80', path: 'c=GB', query: 'objectClass?one'> | |
309 | |
310 Missing scheme, host, etc.: | |
311 | |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
312 >>> url(b'://192.0.2.16:80/') |
13770 | 313 <url path: '://192.0.2.16:80/'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
314 >>> url(b'https://mercurial-scm.org') |
26421
4b0fc75f9403
urls: bulk-change primary website URLs
Matt Mackall <mpm@selenic.com>
parents:
20685
diff
changeset
|
315 <url scheme: 'https', host: 'mercurial-scm.org'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
316 >>> url(b'/foo') |
13770 | 317 <url path: '/foo'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
318 >>> url(b'bundle:/foo') |
13770 | 319 <url scheme: 'bundle', path: '/foo'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
320 >>> url(b'a?b#c') |
13770 | 321 <url path: 'a?b', fragment: 'c'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
322 >>> url(b'http://x.com?arg=/foo') |
13770 | 323 <url scheme: 'http', host: 'x.com', query: 'arg=/foo'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
324 >>> url(b'http://joe:xxx@/foo') |
13770 | 325 <url scheme: 'http', user: 'joe', passwd: 'xxx', path: 'foo'> |
326 | |
327 Just a scheme and a path: | |
328 | |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
329 >>> url(b'mailto:John.Doe@example.com') |
13770 | 330 <url scheme: 'mailto', path: 'John.Doe@example.com'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
331 >>> url(b'a:b:c:d') |
13808 | 332 <url path: 'a:b:c:d'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
333 >>> url(b'aa:bb:cc:dd') |
13808 | 334 <url scheme: 'aa', path: 'bb:cc:dd'> |
13770 | 335 |
336 SSH examples: | |
337 | |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
338 >>> url(b'ssh://joe@host//home/joe') |
13770 | 339 <url scheme: 'ssh', user: 'joe', host: 'host', path: '/home/joe'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
340 >>> url(b'ssh://joe:xxx@host/src') |
13770 | 341 <url scheme: 'ssh', user: 'joe', passwd: 'xxx', host: 'host', path: 'src'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
342 >>> url(b'ssh://joe:xxx@host') |
13770 | 343 <url scheme: 'ssh', user: 'joe', passwd: 'xxx', host: 'host'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
344 >>> url(b'ssh://joe@host') |
13770 | 345 <url scheme: 'ssh', user: 'joe', host: 'host'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
346 >>> url(b'ssh://host') |
13770 | 347 <url scheme: 'ssh', host: 'host'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
348 >>> url(b'ssh://') |
13770 | 349 <url scheme: 'ssh'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
350 >>> url(b'ssh:') |
13770 | 351 <url scheme: 'ssh'> |
352 | |
353 Non-numeric port: | |
354 | |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
355 >>> url(b'http://example.com:dd') |
13770 | 356 <url scheme: 'http', host: 'example.com', port: 'dd'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
357 >>> url(b'ssh://joe:xxx@host:ssh/foo') |
13770 | 358 <url scheme: 'ssh', user: 'joe', passwd: 'xxx', host: 'host', port: 'ssh', |
359 path: 'foo'> | |
360 | |
361 Bad authentication credentials: | |
362 | |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
363 >>> url(b'http://joe@joeville:123@4:@host/a?b#c') |
13770 | 364 <url scheme: 'http', user: 'joe@joeville', passwd: '123@4:', |
365 host: 'host', path: 'a', query: 'b', fragment: 'c'> | |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
366 >>> url(b'http://!*#?/@!*#?/:@host/a?b#c') |
13770 | 367 <url scheme: 'http', host: '!*', fragment: '?/@!*#?/:@host/a?b#c'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
368 >>> url(b'http://!*#?@!*#?:@host/a?b#c') |
13770 | 369 <url scheme: 'http', host: '!*', fragment: '?@!*#?:@host/a?b#c'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
370 >>> url(b'http://!*@:!*@@host/a?b#c') |
13770 | 371 <url scheme: 'http', user: '!*@', passwd: '!*@', host: 'host', |
372 path: 'a', query: 'b', fragment: 'c'> | |
373 | |
374 File paths: | |
375 | |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
376 >>> url(b'a/b/c/d.g.f') |
13770 | 377 <url path: 'a/b/c/d.g.f'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
378 >>> url(b'/x///z/y/') |
13770 | 379 <url path: '/x///z/y/'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
380 >>> url(b'/foo:bar') |
13848
b2798c1defff
url: be stricter about detecting schemes
Brodie Rao <brodie@bitheap.org>
parents:
13827
diff
changeset
|
381 <url path: '/foo:bar'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
382 >>> url(b'\\\\foo:bar') |
13848
b2798c1defff
url: be stricter about detecting schemes
Brodie Rao <brodie@bitheap.org>
parents:
13827
diff
changeset
|
383 <url path: '\\\\foo:bar'> |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
384 >>> url(b'./foo:bar') |
13848
b2798c1defff
url: be stricter about detecting schemes
Brodie Rao <brodie@bitheap.org>
parents:
13827
diff
changeset
|
385 <url path: './foo:bar'> |
13770 | 386 |
13817
7f18bab2c0b0
url: abort on file:// URLs with non-localhost hosts
Brodie Rao <brodie@bitheap.org>
parents:
13808
diff
changeset
|
387 Non-localhost file URL: |
7f18bab2c0b0
url: abort on file:// URLs with non-localhost hosts
Brodie Rao <brodie@bitheap.org>
parents:
13808
diff
changeset
|
388 |
37918
0dcd03637d36
tests: fix error case in test-url.py's doctest
Augie Fackler <augie@google.com>
parents:
29452
diff
changeset
|
389 >>> try: |
0dcd03637d36
tests: fix error case in test-url.py's doctest
Augie Fackler <augie@google.com>
parents:
29452
diff
changeset
|
390 ... u = url(b'file://mercurial-scm.org/foo') |
0dcd03637d36
tests: fix error case in test-url.py's doctest
Augie Fackler <augie@google.com>
parents:
29452
diff
changeset
|
391 ... except error.Abort as e: |
45687
223296268c4e
tests: fix test-url.py on py3, broken by D9179
Martin von Zweigbergk <martinvonz@google.com>
parents:
45682
diff
changeset
|
392 ... pycompat.bytestr(e.message) |
37918
0dcd03637d36
tests: fix error case in test-url.py's doctest
Augie Fackler <augie@google.com>
parents:
29452
diff
changeset
|
393 'file:// URLs can only refer to localhost' |
13817
7f18bab2c0b0
url: abort on file:// URLs with non-localhost hosts
Brodie Rao <brodie@bitheap.org>
parents:
13808
diff
changeset
|
394 |
13770 | 395 Empty URL: |
396 | |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
397 >>> u = url(b'') |
13770 | 398 >>> u |
399 <url path: ''> | |
400 >>> str(u) | |
401 '' | |
402 | |
403 Empty path with query string: | |
404 | |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
405 >>> str(url(b'http://foo/?bar')) |
13770 | 406 'http://foo/?bar' |
407 | |
408 Invalid path: | |
409 | |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
410 >>> u = url(b'http://foo/bar') |
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
411 >>> u.path = b'bar' |
13770 | 412 >>> str(u) |
413 'http://foo/bar' | |
414 | |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
415 >>> u = url(b'file:/foo/bar/baz') |
14313
a389dd285282
util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14204
diff
changeset
|
416 >>> u |
a389dd285282
util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14204
diff
changeset
|
417 <url scheme: 'file', path: '/foo/bar/baz'> |
a389dd285282
util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14204
diff
changeset
|
418 >>> str(u) |
a389dd285282
util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14204
diff
changeset
|
419 'file:///foo/bar/baz' |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
420 >>> pycompat.bytestr(u.localpath()) |
15018
e89f62dcd723
url: really handle urls of the form file:///c:/foo/bar/ correctly
Mads Kiilerich <mads@kiilerich.com>
parents:
14666
diff
changeset
|
421 '/foo/bar/baz' |
14313
a389dd285282
util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14204
diff
changeset
|
422 |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
423 >>> u = url(b'file:///foo/bar/baz') |
13770 | 424 >>> u |
425 <url scheme: 'file', path: '/foo/bar/baz'> | |
426 >>> str(u) | |
14313
a389dd285282
util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14204
diff
changeset
|
427 'file:///foo/bar/baz' |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
428 >>> pycompat.bytestr(u.localpath()) |
15018
e89f62dcd723
url: really handle urls of the form file:///c:/foo/bar/ correctly
Mads Kiilerich <mads@kiilerich.com>
parents:
14666
diff
changeset
|
429 '/foo/bar/baz' |
e89f62dcd723
url: really handle urls of the form file:///c:/foo/bar/ correctly
Mads Kiilerich <mads@kiilerich.com>
parents:
14666
diff
changeset
|
430 |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
431 >>> u = url(b'file:///f:oo/bar/baz') |
15018
e89f62dcd723
url: really handle urls of the form file:///c:/foo/bar/ correctly
Mads Kiilerich <mads@kiilerich.com>
parents:
14666
diff
changeset
|
432 >>> u |
e89f62dcd723
url: really handle urls of the form file:///c:/foo/bar/ correctly
Mads Kiilerich <mads@kiilerich.com>
parents:
14666
diff
changeset
|
433 <url scheme: 'file', path: 'f:oo/bar/baz'> |
e89f62dcd723
url: really handle urls of the form file:///c:/foo/bar/ correctly
Mads Kiilerich <mads@kiilerich.com>
parents:
14666
diff
changeset
|
434 >>> str(u) |
15611 | 435 'file:///f:oo/bar/baz' |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
436 >>> pycompat.bytestr(u.localpath()) |
15018
e89f62dcd723
url: really handle urls of the form file:///c:/foo/bar/ correctly
Mads Kiilerich <mads@kiilerich.com>
parents:
14666
diff
changeset
|
437 'f:oo/bar/baz' |
14313
a389dd285282
util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14204
diff
changeset
|
438 |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
439 >>> u = url(b'file://localhost/f:oo/bar/baz') |
15496
396e83d635a6
url: handle file://localhost/c:/foo "correctly"
Mads Kiilerich <mads@kiilerich.com>
parents:
15398
diff
changeset
|
440 >>> u |
396e83d635a6
url: handle file://localhost/c:/foo "correctly"
Mads Kiilerich <mads@kiilerich.com>
parents:
15398
diff
changeset
|
441 <url scheme: 'file', host: 'localhost', path: 'f:oo/bar/baz'> |
396e83d635a6
url: handle file://localhost/c:/foo "correctly"
Mads Kiilerich <mads@kiilerich.com>
parents:
15398
diff
changeset
|
442 >>> str(u) |
15513 | 443 'file://localhost/f:oo/bar/baz' |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
444 >>> pycompat.bytestr(u.localpath()) |
15496
396e83d635a6
url: handle file://localhost/c:/foo "correctly"
Mads Kiilerich <mads@kiilerich.com>
parents:
15398
diff
changeset
|
445 'f:oo/bar/baz' |
396e83d635a6
url: handle file://localhost/c:/foo "correctly"
Mads Kiilerich <mads@kiilerich.com>
parents:
15398
diff
changeset
|
446 |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
447 >>> u = url(b'file:foo/bar/baz') |
14313
a389dd285282
util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14204
diff
changeset
|
448 >>> u |
a389dd285282
util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14204
diff
changeset
|
449 <url scheme: 'file', path: 'foo/bar/baz'> |
a389dd285282
util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14204
diff
changeset
|
450 >>> str(u) |
a389dd285282
util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14204
diff
changeset
|
451 'file:foo/bar/baz' |
37919
078c3eec2d5c
tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents:
37918
diff
changeset
|
452 >>> pycompat.bytestr(u.localpath()) |
15018
e89f62dcd723
url: really handle urls of the form file:///c:/foo/bar/ correctly
Mads Kiilerich <mads@kiilerich.com>
parents:
14666
diff
changeset
|
453 'foo/bar/baz' |
13770 | 454 """ |
455 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37999
diff
changeset
|
456 |
15398
474279be5add
tests: fix readline escape characters in heredoctest.py/test-url.py
Brodie Rao <brodie@bitheap.org>
parents:
15018
diff
changeset
|
457 if 'TERM' in os.environ: |
474279be5add
tests: fix readline escape characters in heredoctest.py/test-url.py
Brodie Rao <brodie@bitheap.org>
parents:
15018
diff
changeset
|
458 del os.environ['TERM'] |
474279be5add
tests: fix readline escape characters in heredoctest.py/test-url.py
Brodie Rao <brodie@bitheap.org>
parents:
15018
diff
changeset
|
459 |
13770 | 460 doctest.testmod(optionflags=doctest.NORMALIZE_WHITESPACE) |