##// END OF EJS Templates
sslutil: synchronize hostname matching logic with CPython...
sslutil: synchronize hostname matching logic with CPython sslutil contains its own hostname matching logic. CPython has code for the same intent. However, it is only available to Python 2.7.9+ (or distributions that have backported 2.7.9's ssl module improvements). This patch effectively imports CPython's hostname matching code from its ssl.py into sslutil.py. The hostname matching code itself is pretty similar. However, the DNS name matching code is much more robust and spec conformant. As the test changes show, this changes some behavior around wildcard handling and IDNA matching. The new behavior allows wildcards in the middle of words (e.g. 'f*.com' matches 'foo.com') This is spec compliant according to RFC 6125 Section 6.5.3 item 3. There is one test where the matcher is more strict. Before, '*.a.com' matched '.a.com'. Now it doesn't match. Strictly speaking this is a security vulnerability.

File last commit:

r28931:ba0e4789 default
r29452:26a5d605 3.8.4 stable
Show More
test-lrucachedict.py
74 lines | 1.8 KiB | text/x-python | PythonLexer
/ tests / test-lrucachedict.py
Pulkit Goyal
tests: make test-lrucachedict use print_function
r28931 from __future__ import absolute_import, print_function
Pulkit Goyal
tests: make test-lrucachedict use absolute_import
r28930
from mercurial import (
util,
)
Siddharth Agarwal
util: add an LRU cache dict...
r18603
Eric Sumner
lrucachedict: add copy method...
r27576 def printifpresent(d, xs, name='d'):
Siddharth Agarwal
util: add an LRU cache dict...
r18603 for x in xs:
present = x in d
Pulkit Goyal
tests: make test-lrucachedict use print_function
r28931 print("'%s' in %s: %s" % (x, name, present))
Siddharth Agarwal
util: add an LRU cache dict...
r18603 if present:
Pulkit Goyal
tests: make test-lrucachedict use print_function
r28931 print("%s['%s']: %s" % (name, x, d[x]))
Siddharth Agarwal
util: add an LRU cache dict...
r18603
def test_lrucachedict():
d = util.lrucachedict(4)
d['a'] = 'va'
d['b'] = 'vb'
d['c'] = 'vc'
d['d'] = 'vd'
# all of these should be present
printifpresent(d, ['a', 'b', 'c', 'd'])
# 'a' should be dropped because it was least recently used
d['e'] = 've'
printifpresent(d, ['a', 'b', 'c', 'd', 'e'])
# touch entries in some order (get or set).
d['e']
d['c'] = 'vc2'
d['d']
d['b'] = 'vb2'
# 'e' should be dropped now
d['f'] = 'vf'
printifpresent(d, ['b', 'c', 'd', 'e', 'f'])
Siddharth Agarwal
lrucachedict: implement clear()
r19710 d.clear()
printifpresent(d, ['b', 'c', 'd', 'e', 'f'])
Gregory Szorc
util: reimplement lrucachedict...
r27371 # Now test dicts that aren't full.
d = util.lrucachedict(4)
d['a'] = 1
d['b'] = 2
d['a']
d['b']
printifpresent(d, ['a', 'b'])
Eric Sumner
lrucachedict: add copy method...
r27576 # test copy method
d = util.lrucachedict(4)
d['a'] = 'va3'
d['b'] = 'vb3'
d['c'] = 'vc3'
d['d'] = 'vd3'
dc = d.copy()
# all of these should be present
Pulkit Goyal
tests: make test-lrucachedict use print_function
r28931 print("\nAll of these should be present:")
Eric Sumner
lrucachedict: add copy method...
r27576 printifpresent(dc, ['a', 'b', 'c', 'd'], 'dc')
# 'a' should be dropped because it was least recently used
Pulkit Goyal
tests: make test-lrucachedict use print_function
r28931 print("\nAll of these except 'a' should be present:")
Eric Sumner
lrucachedict: add copy method...
r27576 dc['e'] = 've3'
printifpresent(dc, ['a', 'b', 'c', 'd', 'e'], 'dc')
# contents and order of original dict should remain unchanged
Pulkit Goyal
tests: make test-lrucachedict use print_function
r28931 print("\nThese should be in reverse alphabetical order and read 'v?3':")
Eric Sumner
lrucachedict: add copy method...
r27576 dc['b'] = 'vb3_new'
for k in list(iter(d)):
Pulkit Goyal
tests: make test-lrucachedict use print_function
r28931 print("d['%s']: %s" % (k, d[k]))
Eric Sumner
lrucachedict: add copy method...
r27576
Siddharth Agarwal
util: add an LRU cache dict...
r18603 if __name__ == '__main__':
test_lrucachedict()