Show More
@@ -182,6 +182,7 b' test-http-branchmap.t' | |||||
182 | test-http-bundle1.t |
|
182 | test-http-bundle1.t | |
183 | test-http-clone-r.t |
|
183 | test-http-clone-r.t | |
184 | test-http.t |
|
184 | test-http.t | |
|
185 | test-hybridencode.py | |||
185 | test-identify.t |
|
186 | test-identify.t | |
186 | test-import-unknown.t |
|
187 | test-import-unknown.t | |
187 | test-import.t |
|
188 | test-import.t |
This diff has been collapsed as it changes many lines, (1256 lines changed) Show them Hide them | |||||
@@ -1,471 +1,877 b'' | |||||
1 | from __future__ import absolute_import, print_function |
|
1 | from __future__ import absolute_import, print_function | |
|
2 | ||||
|
3 | import unittest | |||
|
4 | ||||
2 | from mercurial import ( |
|
5 | from mercurial import ( | |
3 | store, |
|
6 | store, | |
4 | ) |
|
7 | ) | |
5 |
|
8 | |||
6 | def show(s): |
|
9 | class hybridencodetests(unittest.TestCase): | |
7 | # show test input |
|
10 | def hybridencode(self, input, want): | |
8 | print("A = '%s'" % s.encode("string_escape")) |
|
|||
9 |
|
||||
10 | # show the result of the C implementation, if available |
|
|||
11 | h = store._pathencode(s) |
|
|||
12 | print("B = '%s'" % h.encode("string_escape")) |
|
|||
13 |
|
11 | |||
14 | # compare it with reference implementation in Python |
|
12 | # Check the C implementation if it's in use | |
15 |
|
|
13 | got = store._pathencode(input) | |
16 | if h != r: |
|
14 | self.assertEqual(want, got) | |
17 | print("R = '%s'" % r.encode("string_escape")) |
|
15 | # Check the reference implementation in Python | |
18 | print() |
|
16 | refgot = store._hybridencode(input, True) | |
19 |
|
17 | self.assertEqual(want, refgot) | ||
20 | show("data/abcdefghijklmnopqrstuvwxyz0123456789 !#%&'()+,-.;=[]^`{}") |
|
|||
21 |
|
18 | |||
22 | print("uppercase char X is encoded as _x") |
|
19 | def testnoencodingrequired(self): | |
23 | show("data/ABCDEFGHIJKLMNOPQRSTUVWXYZ") |
|
20 | self.hybridencode( | |
24 |
|
21 | b'data/abcdefghijklmnopqrstuvwxyz0123456789 !#%&\'()+,-.;=[]^`{}', | ||
25 | print("underbar is doubled") |
|
22 | b'data/abcdefghijklmnopqrstuvwxyz0123456789 !#%&\'()+,-.;=[]^`{}') | |
26 | show("data/_") |
|
|||
27 |
|
||||
28 | print("tilde is character-encoded") |
|
|||
29 | show("data/~") |
|
|||
30 |
|
23 | |||
31 | print("characters in ASCII code range 1..31") |
|
24 | def testuppercasechars(self): # uppercase char X is encoded as _x | |
32 | show('data/\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f' |
|
25 | self.hybridencode( | |
33 | '\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f') |
|
26 | b'data/ABCDEFGHIJKLMNOPQRSTUVWXYZ', | |
|
27 | b'data/_a_b_c_d_e_f_g_h_i_j_k_l_m_n_o_p_q_r_s_t_u_v_w_x_y_z') | |||
|
28 | ||||
|
29 | def testunderbar(self): # underbar is doubled | |||
|
30 | self.hybridencode(b'data/_', b'data/__') | |||
34 |
|
31 | |||
35 | print("characters in ASCII code range 126..255") |
|
32 | def testtilde(self): # tilde is character-encoded | |
36 | show('data/\x7e\x7f' |
|
33 | self.hybridencode(b'data/~', b'data/~7e') | |
37 | '\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f' |
|
|||
38 | '\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f') |
|
|||
39 | show('data/\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf' |
|
|||
40 | '\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf') |
|
|||
41 | show('data/\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf' |
|
|||
42 | '\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf') |
|
|||
43 | show('data/\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef' |
|
|||
44 | '\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff') |
|
|||
45 |
|
34 | |||
46 | print("Windows reserved characters") |
|
35 | def testcontrolchars(self): # characters in ASCII code range 1..31 | |
47 | show('data/less <, greater >, colon :, double-quote ", backslash \\' |
|
36 | self.hybridencode( | |
48 | ', pipe |, question-mark ?, asterisk *') |
|
37 | (b'data/\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f' | |
49 |
|
38 | b'\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e' | ||
50 | print("encoding directories ending in .hg, .i or .d with '.hg' suffix") |
|
39 | b'\x1f'), | |
51 | show('data/x.h.i/x.hg/x.i/x.d/foo') |
|
40 | (b'data/~01~02~03~04~05~06~07~08~09~0a~0b~0c~0d~0e~0f~10~11~12~13' | |
52 | show('data/a.hg/a.i/a.d/foo') |
|
41 | b'~14~15~16~17~18~19~1a~1b~1c~1d~1e~1f')) | |
53 | show('data/au.hg/au.i/au.d/foo') |
|
|||
54 | show('data/aux.hg/aux.i/aux.d/foo') |
|
|||
55 | show('data/auxy.hg/auxy.i/auxy.d/foo') |
|
|||
56 |
|
42 | |||
57 | print("but these are not encoded on *filenames*") |
|
43 | def testhighascii(self):# characters in ASCII code range 126..255 | |
58 | show('data/foo/x.hg') |
|
44 | self.hybridencode( | |
59 | show('data/foo/x.i') |
|
45 | (b'data/~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c' | |
60 | show('data/foo/x.d') |
|
46 | b'\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b' | |
61 | show('data/foo/a.hg') |
|
47 | b'\x9c\x9d\x9e\x9f'), | |
62 | show('data/foo/a.i') |
|
48 | (b'data/~7e~7f~80~81~82~83~84~85~86~87~88~89~8a~8b~8c~8d~8e~8f~90' | |
63 | show('data/foo/a.d') |
|
49 | b'~91~92~93~94~95~96~97~98~99~9a~9b~9c~9d~9e~9f')) | |
64 | show('data/foo/au.hg') |
|
50 | self.hybridencode( | |
65 | show('data/foo/au.i') |
|
51 | (b'data/\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad' | |
66 | show('data/foo/au.d') |
|
52 | b'\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc' | |
67 | show('data/foo/aux.hg') |
|
53 | b'\xbd\xbe\xbf'), | |
68 | show('data/foo/aux.i') |
|
54 | (b'data/~a0~a1~a2~a3~a4~a5~a6~a7~a8~a9~aa~ab~ac~ad~ae~af~b0~b1~b2' | |
69 | show('data/foo/aux.d') |
|
55 | b'~b3~b4~b5~b6~b7~b8~b9~ba~bb~bc~bd~be~bf')) | |
70 | show('data/foo/auxy.hg') |
|
56 | self.hybridencode( | |
71 | show('data/foo/auxy.i') |
|
57 | (b'data/\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca' | |
72 | show('data/foo/auxy.d') |
|
58 | b'\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6' | |
|
59 | b'\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf'), | |||
|
60 | (b'data/~c0~c1~c2~c3~c4~c5~c6~c7~c8~c9~ca~cb~cc~cd~ce~cf~d0~d1~d2' | |||
|
61 | b'~d3~d4~d5~d6~d7~d8~d9~da~db~dc~dd~de~df')) | |||
|
62 | self.hybridencode( | |||
|
63 | (b'data/\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed' | |||
|
64 | b'\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd' | |||
|
65 | b'\xfe\xff'), | |||
|
66 | (b'data/~e0~e1~e2~e3~e4~e5~e6~e7~e8~e9~ea~eb~ec~ed~ee~ef~f0~f1~f2' | |||
|
67 | b'~f3~f4~f5~f6~f7~f8~f9~fa~fb~fc~fd~fe~ff')) | |||
73 |
|
68 | |||
74 | print("plain .hg, .i and .d directories have the leading dot encoded") |
|
69 | def testwinreserved(self): # Windows reserved characters | |
75 | show('data/.hg/.i/.d/foo') |
|
70 | self.hybridencode( | |
76 |
|
71 | (b'data/less <, greater >, colon :, double-quote ", backslash \\, ' | ||
77 | show('data/aux.bla/bla.aux/prn/PRN/lpt/com3/nul/coma/foo.NUL/normal.c.i') |
|
72 | b'pipe |, question-mark ?, asterisk *'), | |
|
73 | (b'data/less ~3c, greater ~3e, colon ~3a, double-quote ~22, ' | |||
|
74 | b'backslash ~5c, pipe ~7c, question-mark ~3f, asterisk ~2a')) | |||
78 |
|
75 | |||
79 | show('data/AUX/SECOND/X.PRN/FOURTH/FI:FTH/SIXTH/SEVENTH/EIGHTH/NINETH/' |
|
76 | def testhgreserved(self): | |
80 | 'TENTH/ELEVENTH/LOREMIPSUM.TXT.i') |
|
77 | # encoding directories ending in .hg, .i or .d with '.hg' suffix | |
81 | show('data/enterprise/openesbaddons/contrib-imola/corba-bc/netbeansplugin/' |
|
78 | self.hybridencode(b'data/x.h.i/x.hg/x.i/x.d/foo', | |
82 | 'wsdlExtension/src/main/java/META-INF/services/org.netbeans.modules' |
|
79 | b'data/x.h.i.hg/x.hg.hg/x.i.hg/x.d.hg/foo') | |
83 | '.xml.wsdl.bindingsupport.spi.ExtensibilityElementTemplateProvider.i') |
|
80 | self.hybridencode(b'data/a.hg/a.i/a.d/foo', | |
84 | show('data/AUX.THE-QUICK-BROWN-FOX-JU:MPS-OVER-THE-LAZY-DOG-THE-QUICK-' |
|
81 | b'data/a.hg.hg/a.i.hg/a.d.hg/foo') | |
85 | 'BROWN-FOX-JUMPS-OVER-THE-LAZY-DOG.TXT.i') |
|
82 | self.hybridencode(b'data/au.hg/au.i/au.d/foo', | |
86 | show('data/Project Planning/Resources/AnotherLongDirectoryName/' |
|
83 | b'data/au.hg.hg/au.i.hg/au.d.hg/foo') | |
87 | 'Followedbyanother/AndAnother/AndThenAnExtremelyLongFileName.txt') |
|
84 | self.hybridencode(b'data/aux.hg/aux.i/aux.d/foo', | |
88 | show('data/Project.Planning/Resources/AnotherLongDirectoryName/' |
|
85 | b'data/au~78.hg.hg/au~78.i.hg/au~78.d.hg/foo') | |
89 | 'Followedbyanother/AndAnother/AndThenAnExtremelyLongFileName.txt') |
|
86 | self.hybridencode(b'data/auxy.hg/auxy.i/auxy.d/foo', | |
90 | show('data/foo.../foo / /a./_. /__/.x../ bla/.FOO/something.i') |
|
87 | b'data/auxy.hg.hg/auxy.i.hg/auxy.d.hg/foo') | |
|
88 | # but these are not encoded on *filenames* | |||
|
89 | self.hybridencode(b'data/foo/x.hg', b'data/foo/x.hg') | |||
|
90 | self.hybridencode(b'data/foo/x.i', b'data/foo/x.i') | |||
|
91 | self.hybridencode(b'data/foo/x.d', b'data/foo/x.d') | |||
|
92 | self.hybridencode(b'data/foo/a.hg', b'data/foo/a.hg') | |||
|
93 | self.hybridencode(b'data/foo/a.i', b'data/foo/a.i') | |||
|
94 | self.hybridencode(b'data/foo/a.d', b'data/foo/a.d') | |||
|
95 | self.hybridencode(b'data/foo/au.hg', b'data/foo/au.hg') | |||
|
96 | self.hybridencode(b'data/foo/au.i', b'data/foo/au.i') | |||
|
97 | self.hybridencode(b'data/foo/au.d', b'data/foo/au.d') | |||
|
98 | self.hybridencode(b'data/foo/aux.hg', b'data/foo/au~78.hg') | |||
|
99 | self.hybridencode(b'data/foo/aux.i', b'data/foo/au~78.i') | |||
|
100 | self.hybridencode(b'data/foo/aux.d', b'data/foo/au~78.d') | |||
|
101 | self.hybridencode(b'data/foo/auxy.hg', b'data/foo/auxy.hg') | |||
|
102 | self.hybridencode(b'data/foo/auxy.i', b'data/foo/auxy.i') | |||
|
103 | self.hybridencode(b'data/foo/auxy.d', b'data/foo/auxy.d') | |||
91 |
|
104 | |||
92 | show('data/c/co/com/com0/com1/com2/com3/com4/com5/com6/com7/com8/com9') |
|
105 | # plain .hg, .i and .d directories have the leading dot encoded | |
93 | show('data/C/CO/COM/COM0/COM1/COM2/COM3/COM4/COM5/COM6/COM7/COM8/COM9') |
|
106 | self.hybridencode(b'data/.hg/.i/.d/foo', | |
94 | show('data/c.x/co.x/com.x/com0.x/com1.x/com2.x/com3.x/com4.x/com5.x' |
|
107 | b'data/~2ehg.hg/~2ei.hg/~2ed.hg/foo') | |
95 | '/com6.x/com7.x/com8.x/com9.x') |
|
|||
96 | show('data/x.c/x.co/x.com0/x.com1/x.com2/x.com3/x.com4/x.com5' |
|
|||
97 | '/x.com6/x.com7/x.com8/x.com9') |
|
|||
98 | show('data/cx/cox/comx/com0x/com1x/com2x/com3x/com4x/com5x' |
|
|||
99 | '/com6x/com7x/com8x/com9x') |
|
|||
100 | show('data/xc/xco/xcom0/xcom1/xcom2/xcom3/xcom4/xcom5' |
|
|||
101 | '/xcom6/xcom7/xcom8/xcom9') |
|
|||
102 |
|
||||
103 | show('data/l/lp/lpt/lpt0/lpt1/lpt2/lpt3/lpt4/lpt5/lpt6/lpt7/lpt8/lpt9') |
|
|||
104 | show('data/L/LP/LPT/LPT0/LPT1/LPT2/LPT3/LPT4/LPT5/LPT6/LPT7/LPT8/LPT9') |
|
|||
105 | show('data/l.x/lp.x/lpt.x/lpt0.x/lpt1.x/lpt2.x/lpt3.x/lpt4.x/lpt5.x' |
|
|||
106 | '/lpt6.x/lpt7.x/lpt8.x/lpt9.x') |
|
|||
107 | show('data/x.l/x.lp/x.lpt/x.lpt0/x.lpt1/x.lpt2/x.lpt3/x.lpt4/x.lpt5' |
|
|||
108 | '/x.lpt6/x.lpt7/x.lpt8/x.lpt9') |
|
|||
109 | show('data/lx/lpx/lptx/lpt0x/lpt1x/lpt2x/lpt3x/lpt4x/lpt5x' |
|
|||
110 | '/lpt6x/lpt7x/lpt8x/lpt9x') |
|
|||
111 | show('data/xl/xlp/xlpt/xlpt0/xlpt1/xlpt2/xlpt3/xlpt4/xlpt5' |
|
|||
112 | '/xlpt6/xlpt7/xlpt8/xlpt9') |
|
|||
113 |
|
||||
114 | show('data/con/p/pr/prn/a/au/aux/n/nu/nul') |
|
|||
115 | show('data/CON/P/PR/PRN/A/AU/AUX/N/NU/NUL') |
|
|||
116 | show('data/con.x/p.x/pr.x/prn.x/a.x/au.x/aux.x/n.x/nu.x/nul.x') |
|
|||
117 | show('data/x.con/x.p/x.pr/x.prn/x.a/x.au/x.aux/x.n/x.nu/x.nul') |
|
|||
118 | show('data/conx/px/prx/prnx/ax/aux/auxx/nx/nux/nulx') |
|
|||
119 | show('data/xcon/xp/xpr/xprn/xa/xau/xaux/xn/xnu/xnul') |
|
|||
120 |
|
108 | |||
121 | show('data/a./au./aux./auxy./aux.') |
|
109 | def testmisclongcases(self): | |
122 | show('data/c./co./con./cony./con.') |
|
110 | self.hybridencode( | |
123 | show('data/p./pr./prn./prny./prn.') |
|
111 | (b'data/aux.bla/bla.aux/prn/PRN/lpt/com3/nul/' | |
124 | show('data/n./nu./nul./nuly./nul.') |
|
112 | b'coma/foo.NUL/normal.c.i'), | |
125 | show('data/l./lp./lpt./lpt1./lpt1y./lpt1.') |
|
113 | (b'data/au~78.bla/bla.aux/pr~6e/_p_r_n/lpt/co~6d3' | |
126 | show('data/lpt9./lpt9y./lpt9.') |
|
114 | b'/nu~6c/coma/foo._n_u_l/normal.c.i')) | |
127 | show('data/com./com1./com1y./com1.') |
|
115 | self.hybridencode( | |
128 | show('data/com9./com9y./com9.') |
|
116 | (b'data/AUX/SECOND/X.PRN/FOURTH/FI:FTH/SIXTH/SEVENTH/EIGHTH/NINETH' | |
129 |
|
117 | b'/TENTH/ELEVENTH/LOREMIPSUM.TXT.i'), | ||
130 | show('data/a /au /aux /auxy /aux ') |
|
118 | (b'dh/au~78/second/x.prn/fourth/fi~3afth/sixth/seventh/eighth/' | |
131 |
|
119 | b'nineth/tenth/loremia20419e358ddff1bf8751e38288aff1d7c32ec05.i')) | ||
132 | print("largest unhashed path") |
|
120 | self.hybridencode( | |
133 | show('data/123456789-123456789-123456789-123456789-123456789-' |
|
121 | (b'data/enterprise/openesbaddons/contrib-imola/corba-bc/' | |
134 | 'unhashed--xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
122 | b'netbeansplugin/wsdlExtension/src/main/java/META-INF/services' | |
135 | '123456789-12345') |
|
123 | b'/org.netbeans.modules.xml.wsdl.bindingsupport.spi.' | |
136 |
|
124 | b'ExtensibilityElementTemplateProvider.i'), | ||
137 | print("shortest hashed path") |
|
125 | (b'dh/enterpri/openesba/contrib-/corba-bc/netbeans/wsdlexte/src/' | |
138 | show('data/123456789-123456789-123456789-123456789-123456789-' |
|
126 | b'main/java/org.net7018f27961fdf338a598a40c4683429e7ffb9743.i')) | |
139 | 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
127 | self.hybridencode( | |
140 | '123456789-123456') |
|
128 | (b'data/AUX.THE-QUICK-BROWN-FOX-JU:MPS-OVER-THE-LAZY-DOG-THE-' | |
141 |
|
129 | b'QUICK-BROWN-FOX-JUMPS-OVER-THE-LAZY-DOG.TXT.i'), | ||
142 | print("changing one char in part that's hashed away produces a different hash") |
|
130 | (b'dh/au~78.the-quick-brown-fox-ju~3amps-over-the-lazy-dog-the-' | |
143 | show('data/123456789-123456789-123456789-123456789-123456789-' |
|
131 | b'quick-brown-fox-jud4dcadd033000ab2b26eb66bae1906bcb15d4a70.i')) | |
144 | 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxy-' |
|
132 | self.hybridencode( | |
145 | '123456789-123456') |
|
133 | (b'data/Project Planning/Resources/AnotherLongDirectoryName/Follow' | |
|
134 | b'edbyanother/AndAnother/AndThenAnExtremelyLongFileName.txt'), | |||
|
135 | (b'dh/project_/resource/anotherl/followed/andanoth/andthenanextrem' | |||
|
136 | b'elylongfilenaf93030515d9849cfdca52937c2204d19f83913e5.txt')) | |||
|
137 | self.hybridencode( | |||
|
138 | (b'data/Project.Planning/Resources/AnotherLongDirectoryName/Follo' | |||
|
139 | b'wedbyanother/AndAnother/AndThenAnExtremelyLongFileName.txt'), | |||
|
140 | (b'dh/project_/resource/anotherl/followed/andanoth/andthenanextre' | |||
|
141 | b'melylongfilena0fd7c506f5c9d58204444fc67e9499006bd2d445.txt')) | |||
|
142 | self.hybridencode( | |||
|
143 | b'data/foo.../foo / /a./_. /__/.x../ bla/.FOO/something.i', | |||
|
144 | (b'data/foo..~2e/foo ~20/~20/a~2e/__.~20/____/~2ex.~2e/~20 bla/' | |||
|
145 | b'~2e_f_o_o/something.i')) | |||
|
146 | self.hybridencode( | |||
|
147 | b'data/c/co/com/com0/com1/com2/com3/com4/com5/com6/com7/com8/com9', | |||
|
148 | (b'data/c/co/com/com0/co~6d1/co~6d2/co~6d3/co~6d4/co~6d5/co~6d6/' | |||
|
149 | b'co~6d7/co~6d8/co~6d9')) | |||
|
150 | self.hybridencode( | |||
|
151 | b'data/C/CO/COM/COM0/COM1/COM2/COM3/COM4/COM5/COM6/COM7/COM8/COM9', | |||
|
152 | (b'data/_c/_c_o/_c_o_m/_c_o_m0/_c_o_m1/_c_o_m2/_c_o_m3/_c_o_m4/' | |||
|
153 | b'_c_o_m5/_c_o_m6/_c_o_m7/_c_o_m8/_c_o_m9')) | |||
|
154 | self.hybridencode( | |||
|
155 | (b'data/c.x/co.x/com.x/com0.x/com1.x/com2.x/com3.x/com4.x/com5.x/' | |||
|
156 | b'com6.x/com7.x/com8.x/com9.x'), | |||
|
157 | (b'data/c.x/co.x/com.x/com0.x/co~6d1.x/co~6d2.x/co~6d3.x/co~6d4.x' | |||
|
158 | b'/co~6d5.x/co~6d6.x/co~6d7.x/co~6d8.x/co~6d9.x')) | |||
|
159 | self.hybridencode( | |||
|
160 | (b'data/x.c/x.co/x.com0/x.com1/x.com2/x.com3/x.com4/x.com5/x.com6' | |||
|
161 | b'/x.com7/x.com8/x.com9'), | |||
|
162 | (b'data/x.c/x.co/x.com0/x.com1/x.com2/x.com3/x.com4/x.com5/x.com6' | |||
|
163 | b'/x.com7/x.com8/x.com9')) | |||
|
164 | self.hybridencode( | |||
|
165 | (b'data/cx/cox/comx/com0x/com1x/com2x/com3x/com4x/com5x/com6x/' | |||
|
166 | b'com7x/com8x/com9x'), | |||
|
167 | (b'data/cx/cox/comx/com0x/com1x/com2x/com3x/com4x/com5x/com6x/' | |||
|
168 | b'com7x/com8x/com9x')) | |||
|
169 | self.hybridencode( | |||
|
170 | (b'data/xc/xco/xcom0/xcom1/xcom2/xcom3/xcom4/xcom5/xcom6/xcom7/' | |||
|
171 | b'xcom8/xcom9'), | |||
|
172 | (b'data/xc/xco/xcom0/xcom1/xcom2/xcom3/xcom4/xcom5/xcom6/xcom7/' | |||
|
173 | b'xcom8/xcom9')) | |||
|
174 | self.hybridencode( | |||
|
175 | b'data/l/lp/lpt/lpt0/lpt1/lpt2/lpt3/lpt4/lpt5/lpt6/lpt7/lpt8/lpt9', | |||
|
176 | (b'data/l/lp/lpt/lpt0/lp~741/lp~742/lp~743/lp~744/lp~745/lp~746/' | |||
|
177 | b'lp~747/lp~748/lp~749')) | |||
|
178 | self.hybridencode( | |||
|
179 | b'data/L/LP/LPT/LPT0/LPT1/LPT2/LPT3/LPT4/LPT5/LPT6/LPT7/LPT8/LPT9', | |||
|
180 | (b'data/_l/_l_p/_l_p_t/_l_p_t0/_l_p_t1/_l_p_t2/_l_p_t3/_l_p_t4/' | |||
|
181 | b'_l_p_t5/_l_p_t6/_l_p_t7/_l_p_t8/_l_p_t9')) | |||
|
182 | self.hybridencode( | |||
|
183 | (b'data/l.x/lp.x/lpt.x/lpt0.x/lpt1.x/lpt2.x/lpt3.x/lpt4.x/lpt5.x/' | |||
|
184 | b'lpt6.x/lpt7.x/lpt8.x/lpt9.x'), | |||
|
185 | (b'data/l.x/lp.x/lpt.x/lpt0.x/lp~741.x/lp~742.x/lp~743.x/lp~744.x/' | |||
|
186 | b'lp~745.x/lp~746.x/lp~747.x/lp~748.x/lp~749.x')) | |||
|
187 | self.hybridencode( | |||
|
188 | (b'data/x.l/x.lp/x.lpt/x.lpt0/x.lpt1/x.lpt2/x.lpt3/x.lpt4/x.lpt5/' | |||
|
189 | b'x.lpt6/x.lpt7/x.lpt8/x.lpt9'), | |||
|
190 | (b'data/x.l/x.lp/x.lpt/x.lpt0/x.lpt1/x.lpt2/x.lpt3/x.lpt4/x.lpt5' | |||
|
191 | b'/x.lpt6/x.lpt7/x.lpt8/x.lpt9')) | |||
|
192 | self.hybridencode( | |||
|
193 | (b'data/lx/lpx/lptx/lpt0x/lpt1x/lpt2x/lpt3x/lpt4x/lpt5x/lpt6x/' | |||
|
194 | b'lpt7x/lpt8x/lpt9x'), | |||
|
195 | (b'data/lx/lpx/lptx/lpt0x/lpt1x/lpt2x/lpt3x/lpt4x/lpt5x/lpt6x/' | |||
|
196 | b'lpt7x/lpt8x/lpt9x')) | |||
|
197 | self.hybridencode( | |||
|
198 | (b'data/xl/xlp/xlpt/xlpt0/xlpt1/xlpt2/xlpt3/xlpt4/xlpt5/xlpt6/' | |||
|
199 | b'xlpt7/xlpt8/xlpt9'), | |||
|
200 | (b'data/xl/xlp/xlpt/xlpt0/xlpt1/xlpt2/xlpt3/xlpt4/xlpt5/xlpt6/' | |||
|
201 | b'xlpt7/xlpt8/xlpt9')) | |||
|
202 | self.hybridencode(b'data/con/p/pr/prn/a/au/aux/n/nu/nul', | |||
|
203 | b'data/co~6e/p/pr/pr~6e/a/au/au~78/n/nu/nu~6c') | |||
|
204 | self.hybridencode( | |||
|
205 | b'data/CON/P/PR/PRN/A/AU/AUX/N/NU/NUL', | |||
|
206 | b'data/_c_o_n/_p/_p_r/_p_r_n/_a/_a_u/_a_u_x/_n/_n_u/_n_u_l') | |||
|
207 | self.hybridencode( | |||
|
208 | b'data/con.x/p.x/pr.x/prn.x/a.x/au.x/aux.x/n.x/nu.x/nul.x', | |||
|
209 | b'data/co~6e.x/p.x/pr.x/pr~6e.x/a.x/au.x/au~78.x/n.x/nu.x/nu~6c.x') | |||
|
210 | self.hybridencode( | |||
|
211 | b'data/x.con/x.p/x.pr/x.prn/x.a/x.au/x.aux/x.n/x.nu/x.nul', | |||
|
212 | b'data/x.con/x.p/x.pr/x.prn/x.a/x.au/x.aux/x.n/x.nu/x.nul') | |||
|
213 | self.hybridencode(b'data/conx/px/prx/prnx/ax/aux/auxx/nx/nux/nulx', | |||
|
214 | b'data/conx/px/prx/prnx/ax/au~78/auxx/nx/nux/nulx') | |||
|
215 | self.hybridencode(b'data/xcon/xp/xpr/xprn/xa/xau/xaux/xn/xnu/xnul', | |||
|
216 | b'data/xcon/xp/xpr/xprn/xa/xau/xaux/xn/xnu/xnul') | |||
|
217 | self.hybridencode(b'data/a./au./aux./auxy./aux.', | |||
|
218 | b'data/a~2e/au~2e/au~78~2e/auxy~2e/au~78~2e') | |||
|
219 | self.hybridencode(b'data/c./co./con./cony./con.', | |||
|
220 | b'data/c~2e/co~2e/co~6e~2e/cony~2e/co~6e~2e') | |||
|
221 | self.hybridencode(b'data/p./pr./prn./prny./prn.', | |||
|
222 | b'data/p~2e/pr~2e/pr~6e~2e/prny~2e/pr~6e~2e') | |||
|
223 | self.hybridencode(b'data/n./nu./nul./nuly./nul.', | |||
|
224 | b'data/n~2e/nu~2e/nu~6c~2e/nuly~2e/nu~6c~2e') | |||
|
225 | self.hybridencode( | |||
|
226 | b'data/l./lp./lpt./lpt1./lpt1y./lpt1.', | |||
|
227 | b'data/l~2e/lp~2e/lpt~2e/lp~741~2e/lpt1y~2e/lp~741~2e') | |||
|
228 | self.hybridencode(b'data/lpt9./lpt9y./lpt9.', | |||
|
229 | b'data/lp~749~2e/lpt9y~2e/lp~749~2e') | |||
|
230 | self.hybridencode(b'data/com./com1./com1y./com1.', | |||
|
231 | b'data/com~2e/co~6d1~2e/com1y~2e/co~6d1~2e') | |||
|
232 | self.hybridencode(b'data/com9./com9y./com9.', | |||
|
233 | b'data/co~6d9~2e/com9y~2e/co~6d9~2e') | |||
|
234 | self.hybridencode(b'data/a /au /aux /auxy /aux ', | |||
|
235 | b'data/a~20/au~20/aux~20/auxy~20/aux~20') | |||
146 |
|
236 | |||
147 | print("uppercase hitting length limit due to encoding") |
|
237 | def testhashingboundarycases(self): | |
148 | show('data/A23456789-123456789-123456789-123456789-123456789-' |
|
238 | # largest unhashed path | |
149 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
239 | self.hybridencode( | |
150 | '123456789-12345') |
|
240 | (b'data/123456789-123456789-123456789-123456789-123456789-unhashed' | |
151 | show('data/Z23456789-123456789-123456789-123456789-123456789-' |
|
241 | b'--xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'), | |
152 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
242 | (b'data/123456789-123456789-123456789-123456789-123456789-unhashed' | |
153 | '123456789-12345') |
|
243 | b'--xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345')) | |
154 |
|
244 | # shortest hashed path | ||
155 | print("compare with lowercase not hitting limit") |
|
245 | self.hybridencode( | |
156 |
|
|
246 | (b'data/123456789-123456789-123456789-123456789-123456789-hashed' | |
157 |
' |
|
247 | b'----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |
158 | '123456789-12345') |
|
248 | (b'dh/123456789-123456789-123456789-123456789-123456789-hashed---' | |
159 | show('data/z23456789-123456789-123456789-123456789-123456789-' |
|
249 | b'-xxxxxxxxx-xxxxxxxe9c55002b50bf5181e7a6fc1f60b126e2a6fcf71')) | |
160 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
|||
161 | '123456789-12345') |
|
|||
162 |
|
||||
163 | print("not hitting limit with any of these") |
|
|||
164 | show("data/abcdefghijklmnopqrstuvwxyz0123456789 !#%&'()+,-.;=" |
|
|||
165 | "[]^`{}xxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-" |
|
|||
166 | "123456789-12345") |
|
|||
167 |
|
||||
168 | print("underbar hitting length limit due to encoding") |
|
|||
169 | show('data/_23456789-123456789-123456789-123456789-123456789-' |
|
|||
170 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
|||
171 | '123456789-12345') |
|
|||
172 |
|
||||
173 | print("tilde hitting length limit due to encoding") |
|
|||
174 | show('data/~23456789-123456789-123456789-123456789-123456789-' |
|
|||
175 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
|||
176 | '123456789-12345') |
|
|||
177 |
|
250 | |||
178 | print("Windows reserved characters hitting length limit") |
|
251 | def testhashing(self): | |
179 | show('data/<23456789-123456789-123456789-123456789-123456789-' |
|
252 | # changing one char in part that's hashed away produces a different hash | |
180 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
253 | self.hybridencode( | |
181 | '123456789-12345') |
|
254 | (b'data/123456789-123456789-123456789-123456789-123456789-hashed' | |
182 | show('data/>23456789-123456789-123456789-123456789-123456789-' |
|
255 | b'----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxy-123456789-123456'), | |
183 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
256 | (b'dh/123456789-123456789-123456789-123456789-123456789-hashed---' | |
184 | '123456789-12345') |
|
257 | b'-xxxxxxxxx-xxxxxxxd24fa4455faf8a94350c18e5eace7c2bb17af706')) | |
185 | show('data/:23456789-123456789-123456789-123456789-123456789-' |
|
258 | # uppercase hitting length limit due to encoding | |
186 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
259 | self.hybridencode( | |
187 | '123456789-12345') |
|
260 | (b'data/A23456789-123456789-123456789-123456789-123456789-' | |
188 | show('data/"23456789-123456789-123456789-123456789-123456789-' |
|
261 | b'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' | |
189 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
262 | b'123456789-12345'), | |
190 | '123456789-12345') |
|
263 | (b'dh/a23456789-123456789-123456789-123456789-123456789-' | |
191 | show('data/\\23456789-123456789-123456789-123456789-123456789-' |
|
264 | b'xxxxxxxxx-xxxxxxxxx-xxxxxxx' | |
192 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
265 | b'cbbc657029b41b94ed510d05feb6716a5c03bc6b')) | |
193 | '123456789-12345') |
|
266 | self.hybridencode( | |
194 |
|
|
267 | (b'data/Z23456789-123456789-123456789-123456789-123456789-' | |
195 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
268 | b'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' | |
196 | '123456789-12345') |
|
269 | b'123456789-12345'), | |
197 |
|
|
270 | (b'dh/z23456789-123456789-123456789-123456789-123456789-xxxxxxxxx' | |
198 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
271 | b'-xxxxxxxxx-xxxxxxx938f32a725c89512833fb96b6602dd9ebff51ddd')) | |
199 | '123456789-12345') |
|
272 | # compare with lowercase not hitting limit | |
200 | show('data/*23456789-123456789-123456789-123456789-123456789-' |
|
273 | self.hybridencode( | |
201 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
274 | (b'data/a23456789-123456789-123456789-123456789-123456789-' | |
202 | '123456789-12345') |
|
275 | b'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-' | |
|
276 | b'12345'), | |||
|
277 | (b'data/a23456789-123456789-123456789-123456789-123456789-' | |||
|
278 | b'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-' | |||
|
279 | b'12345')) | |||
|
280 | self.hybridencode( | |||
|
281 | (b'data/z23456789-123456789-123456789-123456789-123456789' | |||
|
282 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789' | |||
|
283 | b'-12345'), | |||
|
284 | (b'data/z23456789-123456789-123456789-123456789-123456789' | |||
|
285 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-' | |||
|
286 | b'12345')) | |||
|
287 | # not hitting limit with any of these | |||
|
288 | self.hybridencode( | |||
|
289 | (b'data/abcdefghijklmnopqrstuvwxyz0123456789 !#%&\'()+,-.;=[]^`{}' | |||
|
290 | b'xxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'), | |||
|
291 | (b'data/abcdefghijklmnopqrstuvwxyz0123456789 !#%&\'()+,-.;=[]^`{}' | |||
|
292 | b'xxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345')) | |||
|
293 | # underbar hitting length limit due to encoding | |||
|
294 | self.hybridencode( | |||
|
295 | (b'data/_23456789-123456789-123456789-123456789-123456789-' | |||
|
296 | b'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-' | |||
|
297 | b'12345'), | |||
|
298 | (b'dh/_23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-' | |||
|
299 | b'xxxxxxxxx-xxxxxxx9921a01af50feeabc060ce00eee4cba6efc31d2b')) | |||
|
300 | ||||
|
301 | # tilde hitting length limit due to encoding | |||
|
302 | self.hybridencode( | |||
|
303 | (b'data/~23456789-123456789-123456789-123456789-123456789-' | |||
|
304 | b'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-' | |||
|
305 | b'12345'), | |||
|
306 | (b'dh/~7e23456789-123456789-123456789-123456789-123456789' | |||
|
307 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |||
|
308 | b'9cec6f97d569c10995f785720044ea2e4227481b')) | |||
203 |
|
309 | |||
204 | print("initial space hitting length limit") |
|
310 | def testwinreservedoverlimit(self): | |
205 | show('data/ 23456789-123456789-123456789-123456789-123456789-' |
|
311 | # Windows reserved characters hitting length limit | |
206 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
312 | self.hybridencode( | |
207 | '123456789-12345') |
|
313 | (b'data/<23456789-123456789-123456789-123456789-123456789' | |
208 |
|
314 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx' | ||
209 | print("initial dot hitting length limit") |
|
315 | b'-123456789-12345'), | |
210 |
|
|
316 | (b'dh/~3c23456789-123456789-123456789-123456789-123456789' | |
211 |
' |
|
317 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxee' | |
212 | '123456789-12345') |
|
318 | b'67d8f275876ca1ef2500fc542e63c885c4e62d')) | |
213 |
|
319 | self.hybridencode( | ||
214 | print("trailing space in filename hitting length limit") |
|
320 | (b'data/>23456789-123456789-123456789-123456789-123456789-' | |
215 | show('data/123456789-123456789-123456789-123456789-123456789-' |
|
321 | b'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' | |
216 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
322 | b'123456789-12345'), | |
217 | '123456789-1234 ') |
|
323 | (b'dh/~3e23456789-123456789-123456789-123456789-123456789' | |
|
324 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |||
|
325 | b'387a85a5b1547cc9136310c974df716818458ddb')) | |||
|
326 | self.hybridencode( | |||
|
327 | (b'data/:23456789-123456789-123456789-123456789-123456789' | |||
|
328 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' | |||
|
329 | b'123456789-12345'), | |||
|
330 | (b'dh/~3a23456789-123456789-123456789-123456789-123456789' | |||
|
331 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |||
|
332 | b'2e4154fb571d13d22399c58cc4ef4858e4b75999')) | |||
|
333 | self.hybridencode( | |||
|
334 | (b'data/"23456789-123456789-123456789-123456789-123456789' | |||
|
335 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx' | |||
|
336 | b'-123456789-12345'), | |||
|
337 | (b'dh/~2223456789-123456789-123456789-123456789-123456789' | |||
|
338 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |||
|
339 | b'fc7e3ec7b0687ee06ed8c32fef0eb0c1980259f5')) | |||
|
340 | self.hybridencode( | |||
|
341 | (b'data/\\23456789-123456789-123456789-123456789-123456789' | |||
|
342 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' | |||
|
343 | b'123456789-12345'), | |||
|
344 | (b'dh/~5c23456789-123456789-123456789-123456789-123456789' | |||
|
345 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |||
|
346 | b'944e1f2b7110687e116e0d151328ac648b06ab4a')) | |||
|
347 | self.hybridencode( | |||
|
348 | (b'data/|23456789-123456789-123456789-123456789-123456789' | |||
|
349 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx' | |||
|
350 | b'-123456789-12345'), | |||
|
351 | (b'dh/~7c23456789-123456789-123456789-123456789-123456789' | |||
|
352 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |||
|
353 | b'28b23dd3fd0242946334126ab62bcd772aac32f4')) | |||
|
354 | self.hybridencode( | |||
|
355 | (b'data/?23456789-123456789-123456789-123456789-123456789' | |||
|
356 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx' | |||
|
357 | b'-123456789-12345'), | |||
|
358 | (b'dh/~3f23456789-123456789-123456789-123456789-123456789' | |||
|
359 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |||
|
360 | b'a263022d3994d2143d98f94f431eef8b5e7e0f8a')) | |||
|
361 | self.hybridencode( | |||
|
362 | (b'data/*23456789-123456789-123456789-123456789-123456789' | |||
|
363 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' | |||
|
364 | b'123456789-12345'), | |||
|
365 | (b'dh/~2a23456789-123456789-123456789-123456789-123456789' | |||
|
366 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |||
|
367 | b'0e7e6020e3c00ba7bb7893d84ca2966fbf53e140')) | |||
218 |
|
368 | |||
219 | print("trailing dot in filename hitting length limit") |
|
369 | def testinitialspacelenlimit(self): | |
220 | show('data/123456789-123456789-123456789-123456789-123456789-' |
|
370 | # initial space hitting length limit | |
221 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
371 | self.hybridencode( | |
222 | '123456789-1234.') |
|
372 | (b'data/ 23456789-123456789-123456789-123456789-123456789' | |
|
373 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' | |||
|
374 | b'123456789-12345'), | |||
|
375 | (b'dh/~2023456789-123456789-123456789-123456789-123456789' | |||
|
376 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |||
|
377 | b'92acbc78ef8c0b796111629a02601f07d8aec4ea')) | |||
223 |
|
378 | |||
224 | print("initial space in directory hitting length limit") |
|
379 | def testinitialdotlenlimit(self): | |
225 | show('data/ x/456789-123456789-123456789-123456789-123456789-' |
|
380 | # initial dot hitting length limit | |
226 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
381 | self.hybridencode( | |
227 | '123456789-12345') |
|
382 | (b'data/.23456789-123456789-123456789-123456789-123456789' | |
|
383 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx' | |||
|
384 | b'-123456789-12345'), | |||
|
385 | (b'dh/~2e23456789-123456789-123456789-123456789-123456789' | |||
|
386 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |||
|
387 | b'dbe19cc6505b3515ab9228cebf877ad07075168f')) | |||
|
388 | ||||
|
389 | def testtrailingspacelenlimit(self): | |||
|
390 | # trailing space in filename hitting length limit | |||
|
391 | self.hybridencode( | |||
|
392 | (b'data/123456789-123456789-123456789-123456789-123456789' | |||
|
393 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' | |||
|
394 | b'123456789-1234 '), | |||
|
395 | (b'dh/123456789-123456789-123456789-123456789-123456789' | |||
|
396 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxx' | |||
|
397 | b'0025dc73e04f97426db4893e3bf67d581dc6d066')) | |||
228 |
|
398 | |||
229 | print("initial dot in directory hitting length limit") |
|
399 | def testtrailingdotlenlimit(self): | |
230 | show('data/.x/456789-123456789-123456789-123456789-123456789-' |
|
400 | # trailing dot in filename hitting length limit | |
231 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
401 | self.hybridencode( | |
232 | '123456789-12345') |
|
402 | (b'data/123456789-123456789-123456789-123456789-123456789' | |
|
403 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-' | |||
|
404 | b'1234.'), | |||
|
405 | (b'dh/123456789-123456789-123456789-123456789-123456789' | |||
|
406 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxx' | |||
|
407 | b'85a16cf03ee7feba8a5abc626f1ba9886d01e89d')) | |||
|
408 | ||||
|
409 | def testinitialspacedirlenlimit(self): | |||
|
410 | # initial space in directory hitting length limit | |||
|
411 | self.hybridencode( | |||
|
412 | (b'data/ x/456789-123456789-123456789-123456789-123456789' | |||
|
413 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx' | |||
|
414 | b'-123456789-12345'), | |||
|
415 | (b'dh/~20x/456789-123456789-123456789-123456789-123456789' | |||
|
416 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |||
|
417 | b'1b3a3b712b2ac00d6af14ae8b4c14fdbf904f516')) | |||
233 |
|
418 | |||
234 | print("trailing space in directory hitting length limit") |
|
419 | def testinitialdotdirlenlimit(self): | |
235 | show('data/x /456789-123456789-123456789-123456789-123456789-' |
|
420 | # initial dot in directory hitting length limit | |
236 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
421 | self.hybridencode( | |
237 | '123456789-12345') |
|
422 | (b'data/.x/456789-123456789-123456789-123456789-123456789' | |
|
423 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx' | |||
|
424 | b'-123456789-12345'), | |||
|
425 | (b'dh/~2ex/456789-123456789-123456789-123456789-123456789' | |||
|
426 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |||
|
427 | b'39dbc4c193a5643a8936fc69c3363cd7ac91ab14')) | |||
|
428 | ||||
|
429 | def testtrailspacedirlenlimit(self): | |||
|
430 | # trailing space in directory hitting length limit | |||
|
431 | self.hybridencode( | |||
|
432 | (b'data/x /456789-123456789-123456789-123456789-123456789' | |||
|
433 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx' | |||
|
434 | b'-123456789-12345'), | |||
|
435 | (b'dh/x~20/456789-123456789-123456789-123456789-123456789' | |||
|
436 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |||
|
437 | b'2253c341df0b5290790ad312cd8499850f2273e5')) | |||
238 |
|
438 | |||
239 | print("trailing dot in directory hitting length limit") |
|
439 | def testtrailingdotdirlenlimit(self): | |
240 | show('data/x./456789-123456789-123456789-123456789-123456789-' |
|
440 | # trailing dot in directory hitting length limit | |
241 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
441 | self.hybridencode( | |
242 | '123456789-12345') |
|
442 | (b'data/x./456789-123456789-123456789-123456789-123456789' | |
|
443 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' | |||
|
444 | b'123456789-12345'), | |||
|
445 | (b'dh/x~2e/456789-123456789-123456789-123456789-123456789' | |||
|
446 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |||
|
447 | b'cc0324d696d34562b44b5138db08ee1594ccc583')) | |||
243 |
|
448 | |||
244 | print("with directories that need direncoding, hitting length limit") |
|
449 | def testdirencodinglenlimit(self): | |
245 | show('data/x.i/56789-123456789-123456789-123456789-123456789-' |
|
450 | # with directories that need direncoding, hitting length limit | |
246 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
451 | self.hybridencode( | |
247 | '123456789-12345') |
|
452 | (b'data/x.i/56789-123456789-123456789-123456789-123456789' | |
248 | show('data/x.d/56789-123456789-123456789-123456789-123456789-' |
|
453 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-' | |
249 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
454 | b'12345'), | |
250 | '123456789-12345') |
|
455 | (b'dh/x.i.hg/56789-123456789-123456789-123456789-123456789' | |
251 | show('data/x.hg/5789-123456789-123456789-123456789-123456789-' |
|
456 | b'-xxxxxxxxx-xxxxxxxxx-xxxx' | |
252 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
457 | b'a4c4399bdf81c67dbbbb7060aa0124d8dea94f74')) | |
253 | '123456789-12345') |
|
458 | self.hybridencode( | |
|
459 | (b'data/x.d/56789-123456789-123456789-123456789-123456789' | |||
|
460 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx' | |||
|
461 | b'-123456789-12345'), | |||
|
462 | (b'dh/x.d.hg/56789-123456789-123456789-123456789-123456789' | |||
|
463 | b'-xxxxxxxxx-xxxxxxxxx-xxxx' | |||
|
464 | b'1303fa90473b230615f5b3ea7b660e881ae5270a')) | |||
|
465 | self.hybridencode( | |||
|
466 | (b'data/x.hg/5789-123456789-123456789-123456789-123456789' | |||
|
467 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx' | |||
|
468 | b'-123456789-12345'), | |||
|
469 | (b'dh/x.hg.hg/5789-123456789-123456789-123456789-123456789' | |||
|
470 | b'-xxxxxxxxx-xxxxxxxxx-xxxx' | |||
|
471 | b'26d724a8af68e7a4e4455e6602ea9adbd0eb801f')) | |||
254 |
|
472 | |||
255 | print("Windows reserved filenames, hitting length limit") |
|
473 | def testwinreservedfilenameslimit(self): | |
256 | show('data/con/56789-123456789-123456789-123456789-123456789-' |
|
474 | # Windows reserved filenames, hitting length limit | |
257 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
475 | self.hybridencode( | |
258 | '123456789-12345') |
|
476 | (b'data/con/56789-123456789-123456789-123456789-123456789' | |
259 | show('data/prn/56789-123456789-123456789-123456789-123456789-' |
|
477 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' | |
260 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
478 | b'123456789-12345'), | |
261 | '123456789-12345') |
|
479 | (b'dh/co~6e/56789-123456789-123456789-123456789-123456789' | |
262 | show('data/aux/56789-123456789-123456789-123456789-123456789-' |
|
480 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |
263 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
481 | b'c0794d4f4c605a2617900eb2563d7113cf6ea7d3')) | |
264 | '123456789-12345') |
|
482 | self.hybridencode( | |
265 |
|
|
483 | (b'data/prn/56789-123456789-123456789-123456789-123456789' | |
266 |
'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx |
|
484 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx' | |
267 | '123456789-12345') |
|
485 | b'-123456789-12345'), | |
268 |
|
|
486 | (b'dh/pr~6e/56789-123456789-123456789-123456789-123456789' | |
269 |
' |
|
487 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |
270 | '123456789-12345') |
|
488 | b'64db876e1a9730e27236cb9b167aff942240e932')) | |
271 | show('data/com9/6789-123456789-123456789-123456789-123456789-' |
|
489 | self.hybridencode( | |
272 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
490 | (b'data/aux/56789-123456789-123456789-123456789-123456789' | |
273 | '123456789-12345') |
|
491 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx' | |
274 | show('data/lpt1/6789-123456789-123456789-123456789-123456789-' |
|
492 | b'-123456789-12345'), | |
275 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
493 | (b'dh/au~78/56789-123456789-123456789-123456789-123456789' | |
276 | '123456789-12345') |
|
494 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |
277 | show('data/lpt9/6789-123456789-123456789-123456789-123456789-' |
|
495 | b'8a178558405ca6fb4bbd75446dfa186f06751a0d')) | |
278 | 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
496 | self.hybridencode( | |
279 | '123456789-12345') |
|
497 | (b'data/nul/56789-123456789-123456789-123456789-123456789' | |
|
498 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx' | |||
|
499 | b'-123456789-12345'), | |||
|
500 | (b'dh/nu~6c/56789-123456789-123456789-123456789-123456789' | |||
|
501 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |||
|
502 | b'c5e51b6fec1bd07bd243b053a0c3f7209855b886')) | |||
|
503 | self.hybridencode( | |||
|
504 | (b'data/com1/6789-123456789-123456789-123456789-123456789' | |||
|
505 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx' | |||
|
506 | b'-123456789-12345'), | |||
|
507 | (b'dh/co~6d1/6789-123456789-123456789-123456789-123456789' | |||
|
508 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |||
|
509 | b'32f5f44ece3bb62b9327369ca84cc19c86259fcd')) | |||
|
510 | self.hybridencode( | |||
|
511 | (b'data/com9/6789-123456789-123456789-123456789-123456789' | |||
|
512 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx' | |||
|
513 | b'-123456789-12345'), | |||
|
514 | (b'dh/co~6d9/6789-123456789-123456789-123456789-123456789' | |||
|
515 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |||
|
516 | b'734360b28c66a3230f55849fe8926206d229f990')) | |||
|
517 | self.hybridencode( | |||
|
518 | (b'data/lpt1/6789-123456789-123456789-123456789-123456789' | |||
|
519 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx' | |||
|
520 | b'-123456789-12345'), | |||
|
521 | (b'dh/lp~741/6789-123456789-123456789-123456789-123456789' | |||
|
522 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |||
|
523 | b'e6f16ab4b6b0637676b2842b3345c9836df46ef7')) | |||
|
524 | self.hybridencode( | |||
|
525 | (b'data/lpt9/6789-123456789-123456789-123456789-123456789' | |||
|
526 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx' | |||
|
527 | b'-123456789-12345'), | |||
|
528 | (b'dh/lp~749/6789-123456789-123456789-123456789-123456789' | |||
|
529 | b'-xxxxxxxxx-xxxxxxxxx-xxxxx' | |||
|
530 | b'a475814c51acead3e44f2ff801f0c4903f986157')) | |||
280 |
|
531 | |||
281 | print("non-reserved names, just not hitting limit") |
|
532 | def testnonreservednolimit(self): | |
282 | show('data/123456789-123456789-123456789-123456789-123456789-' |
|
533 | # non-reserved names, just not hitting limit | |
283 | '/com/com0/lpt/lpt0/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
534 | self.hybridencode( | |
284 | '123456789-12345') |
|
535 | (b'data/123456789-123456789-123456789-123456789-123456789-' | |
285 |
|
536 | b'/com/com0/lpt/lpt0/' | ||
286 | print("hashed path with largest untruncated 1st dir") |
|
537 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'), | |
287 |
|
|
538 | (b'data/123456789-123456789-123456789-123456789-123456789-' | |
288 | 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
539 | b'/com/com0/lpt/lpt0/' | |
289 |
'123456789-12345 |
|
540 | b'-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345')) | |
290 |
|
||||
291 | print("hashed path with smallest truncated 1st dir") |
|
|||
292 | show('data/123456789/123456789-123456789-123456789-123456789-' |
|
|||
293 | 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
|||
294 | '123456789-123456') |
|
|||
295 |
|
541 | |||
296 | print("hashed path with largest untruncated two dirs") |
|
542 | def testhashedpathuntrucfirst(self): | |
297 | show('data/12345678/12345678/9-123456789-123456789-123456789-' |
|
543 | # hashed path with largest untruncated 1st dir | |
298 | 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
544 | self.hybridencode( | |
299 | '123456789-123456') |
|
545 | (b'data/12345678/-123456789-123456789-123456789-123456789-hashed' | |
|
546 | b'----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |||
|
547 | (b'dh/12345678/-123456789-123456789-123456789-123456789-hashed' | |||
|
548 | b'----xxxxxxxxx-xxxxxxx4e9e9e384d00929a93b6835fbf976eb32321ff3c')) | |||
300 |
|
549 | |||
301 | print("hashed path with smallest truncated two dirs") |
|
550 | def testhashedpathsmallesttrucdir(self): | |
302 | show('data/123456789/123456789/123456789-123456789-123456789-' |
|
551 | # hashed path with smallest truncated 1st dir | |
303 | 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
552 | self.hybridencode( | |
304 | '123456789-123456') |
|
553 | (b'data/123456789/123456789-123456789-123456789-123456789-hashed' | |
|
554 | b'----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |||
|
555 | (b'dh/12345678/123456789-123456789-123456789-123456789-hashed' | |||
|
556 | b'----xxxxxxxxx-xxxxxxxx1f4e4ec5f2be76e109bfaa8e31c062fe426d5490')) | |||
305 |
|
557 | |||
306 | print("hashed path with largest untruncated three dirs") |
|
558 | def testhashedlargesttwountruc(self): | |
307 | show('data/12345678/12345678/12345678/89-123456789-123456789-' |
|
559 | # hashed path with largest untruncated two dirs | |
308 | 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
560 | self.hybridencode( | |
309 | '123456789-123456') |
|
561 | (b'data/12345678/12345678/9-123456789-123456789-123456789-hashed' | |
|
562 | b'----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |||
|
563 | (b'dh/12345678/12345678/9-123456789-123456789-123456789-hashed' | |||
|
564 | b'----xxxxxxxxx-xxxxxxx3332d8329d969cf835542a9f2cbcfb385b6cf39d')) | |||
310 |
|
565 | |||
311 | print("hashed path with smallest truncated three dirs") |
|
566 | def testhashedpathsmallesttrunctwodirs(self): | |
312 | show('data/123456789/123456789/123456789/123456789-123456789-' |
|
567 | # hashed path with smallest truncated two dirs | |
313 | 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
568 | self.hybridencode( | |
314 | '123456789-123456') |
|
569 | (b'data/123456789/123456789/123456789-123456789-123456789-hashed' | |
|
570 | b'----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |||
|
571 | (b'dh/12345678/12345678/123456789-123456789-123456789-hashed' | |||
|
572 | b'----xxxxxxxxx-xxxxxxxxx' | |||
|
573 | b'9699559798247dffa18717138859be5f8874840e')) | |||
315 |
|
574 | |||
316 | print("hashed path with largest untruncated four dirs") |
|
575 | def testhashuntruncthree(self): | |
317 | show('data/12345678/12345678/12345678/12345678/789-123456789-' |
|
576 | # hashed path with largest untruncated three dirs | |
318 | 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
577 | self.hybridencode( | |
319 | '123456789-123456') |
|
578 | (b'data/12345678/12345678/12345678/89-123456789-123456789-' | |
|
579 | b'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' | |||
|
580 | b'123456789-123456'), | |||
|
581 | (b'dh/12345678/12345678/12345678/89-123456789-123456789-hashed' | |||
|
582 | b'----xxxxxxxxx-xxxxxxxf0a2b053bb1369cce02f78c217d6a7aaea18c439')) | |||
320 |
|
583 | |||
321 | print("hashed path with smallest truncated four dirs") |
|
584 | def testhashtruncthree(self): | |
322 | show('data/123456789/123456789/123456789/123456789/123456789-' |
|
585 | # hashed path with smallest truncated three dirs | |
323 | 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
586 | self.hybridencode( | |
324 | '123456789-123456') |
|
587 | (b'data/123456789/123456789/123456789/123456789-123456789-hashed' | |
|
588 | b'----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |||
|
589 | (b'dh/12345678/12345678/12345678/123456789-123456789-hashed' | |||
|
590 | b'----xxxxxxxxx-xxxxxxxxx-' | |||
|
591 | b'1c6f8284967384ec13985a046d3553179d9d03cd')) | |||
325 |
|
592 | |||
326 | print("hashed path with largest untruncated five dirs") |
|
593 | def testhashuntrucfour(self): | |
327 | show('data/12345678/12345678/12345678/12345678/12345678/6789-' |
|
594 | # hashed path with largest untruncated four dirs | |
328 | 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
595 | self.hybridencode( | |
329 | '123456789-123456') |
|
596 | (b'data/12345678/12345678/12345678/12345678/789-123456789-hashed' | |
|
597 | b'----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |||
|
598 | (b'dh/12345678/12345678/12345678/12345678/789-123456789-hashed' | |||
|
599 | b'----xxxxxxxxx-xxxxxxx0d30c99049d8f0ff97b94d4ef302027e8d54c6fd')) | |||
330 |
|
600 | |||
331 | print("hashed path with smallest truncated five dirs") |
|
601 | def testhashtruncfour(self): | |
332 | show('data/123456789/123456789/123456789/123456789/123456789/' |
|
602 | # hashed path with smallest truncated four dirs | |
333 | 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
603 | self.hybridencode( | |
334 | '123456789-123456') |
|
604 | (b'data/123456789/123456789/123456789/123456789/123456789-hashed' | |
|
605 | b'----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |||
|
606 | (b'dh/12345678/12345678/12345678/12345678/123456789-hashed' | |||
|
607 | b'----xxxxxxxxx-xxxxxxxxx-x' | |||
|
608 | b'46162779e1a771810b37a737f82ae7ed33771402')) | |||
335 |
|
609 | |||
336 | print("hashed path with largest untruncated six dirs") |
|
610 | def testhashuntruncfive(self): | |
337 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
611 | # hashed path with largest untruncated five dirs | |
338 | '678/ed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
612 | self.hybridencode( | |
339 | '123456789-123456') |
|
613 | (b'data/12345678/12345678/12345678/12345678/12345678/6789-hashed' | |
|
614 | b'----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |||
|
615 | (b'dh/12345678/12345678/12345678/12345678/12345678/6789-hashed' | |||
|
616 | b'----xxxxxxxxx-xxxxxxxbfe752ddc8b003c2790c66a9f2eb1ea75c114390')) | |||
340 |
|
617 | |||
341 | print("hashed path with smallest truncated six dirs") |
|
618 | def testhashtruncfive(self): | |
342 | show('data/123456789/123456789/123456789/123456789/123456789/' |
|
619 | # hashed path with smallest truncated five dirs | |
343 | '123456789/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
620 | self.hybridencode( | |
344 | '123456789-123456') |
|
621 | (b'data/123456789/123456789/123456789/123456789/123456789/hashed' | |
|
622 | b'----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |||
|
623 | (b'dh/12345678/12345678/12345678/12345678/12345678/hashed' | |||
|
624 | b'----xxxxxxxxx-xxxxxxxxx-xx' | |||
|
625 | b'b94c27b3532fa880cdd572b1c514785cab7b6ff2')) | |||
|
626 | ||||
|
627 | def testhashuntruncsix(self): | |||
|
628 | # hashed path with largest untruncated six dirs | |||
|
629 | self.hybridencode( | |||
|
630 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678/' | |||
|
631 | b'ed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |||
|
632 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/' | |||
|
633 | b'ed----xxxxxxxxx-xxxxxxx' | |||
|
634 | b'cd8cc5483a0f3be409e0e5d4bf9e36e113c59235')) | |||
345 |
|
635 | |||
346 | print("hashed path with largest untruncated seven dirs") |
|
636 | def testhashtruncsix(self): | |
347 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
637 | # hashed path with smallest truncated six dirs | |
348 | '678/12345678/xxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
638 | self.hybridencode( | |
349 | '123456789-123456') |
|
639 | (b'data/123456789/123456789/123456789/123456789/123456789/' | |
|
640 | b'123456789/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' | |||
|
641 | b'123456789-123456'), | |||
|
642 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/' | |||
|
643 | b'xxxxxxxxx-xxxxxxxxx-xxx' | |||
|
644 | b'47dd6f616f833a142da00701b334cebbf640da06')) | |||
350 |
|
645 | |||
351 | print("hashed path with smallest truncated seven dirs") |
|
646 | def testhashuntrunc7(self): | |
352 | show('data/123456789/123456789/123456789/123456789/123456789/' |
|
647 | # hashed path with largest untruncated seven dirs | |
353 | '123456789/123456789/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
648 | self.hybridencode( | |
354 | '123456789-123456') |
|
649 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678' | |
|
650 | b'/12345678/xxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' | |||
|
651 | b'123456789-123456'), | |||
|
652 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678' | |||
|
653 | b'/12345678/xxxxxx-xxxxxxx' | |||
|
654 | b'1c8ed635229fc22efe51035feeadeb4c8a0ecb82')) | |||
355 |
|
655 | |||
356 | print("hashed path with largest untruncated eight dirs") |
|
656 | def testhashtrunc7(self): | |
357 | print("(directory 8 is dropped because it hits _maxshortdirslen)") |
|
657 | # hashed path with smallest truncated seven dirs | |
358 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
658 | self.hybridencode( | |
359 | '678/12345678/12345678/xxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
659 | (b'data/123456789/123456789/123456789/123456789/123456789/' | |
360 |
'123456789 |
|
660 | b'123456789/123456789/' | |
|
661 | b'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |||
|
662 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/123' | |||
|
663 | b'45678/xxxxxxxxx-xxxx298ff7d33f8ce6db57930837ffea2fb2f48bb926')) | |||
361 |
|
664 | |||
362 | print("hashed path with smallest truncated eight dirs") |
|
665 | def testhashuntrunc8(self): | |
363 | print("(directory 8 is dropped because it hits _maxshortdirslen)") |
|
666 | # hashed path with largest untruncated eight dirs | |
364 | show('data/123456789/123456789/123456789/123456789/123456789/' |
|
667 | # (directory 8 is dropped because it hits _maxshortdirslen) | |
365 | '123456789/123456789/123456789/xxxxxxxxx-xxxxxxxxx-' |
|
668 | self.hybridencode( | |
366 | '123456789-123456') |
|
669 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678/' | |
|
670 | b'12345678/12345678/xxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |||
|
671 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/1' | |||
|
672 | b'2345678/xxxxxxx-xxxxxxc8996ccd41b471f768057181a4d59d2febe7277d')) | |||
367 |
|
673 | |||
368 | print("hashed path with largest non-dropped directory 8") |
|
674 | def testhashtrunc8(self): | |
369 | print("(just not hitting the _maxshortdirslen boundary)") |
|
675 | # hashed path with smallest truncated eight dirs | |
370 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
676 | # (directory 8 is dropped because it hits _maxshortdirslen) | |
371 | '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
677 | self.hybridencode( | |
372 | '123456789-123456') |
|
678 | (b'data/123456789/123456789/123456789/123456789/123456789/' | |
|
679 | b'123456789/123456789/123456789/xxxxxxxxx-xxxxxxxxx-' | |||
|
680 | b'123456789-123456'), | |||
|
681 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678' | |||
|
682 | b'/12345678/xxxxxxxxx-xxxx' | |||
|
683 | b'4fa04a839a6bda93e1c21c713f2edcbd16e8890d')) | |||
373 |
|
684 | |||
374 | print("...adding one truncated char to dir 1..7 won't drop dir 8") |
|
685 | def testhashnondropped8(self): | |
375 | show('data/12345678x/12345678/12345678/12345678/12345678/12345' |
|
686 | # hashed path with largest non-dropped directory 8 | |
376 | '678/12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
687 | # (just not hitting the _maxshortdirslen boundary) | |
377 | '123456789-123456') |
|
688 | self.hybridencode( | |
378 | show('data/12345678/12345678x/12345678/12345678/12345678/12345' |
|
689 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678' | |
379 |
' |
|
690 | b'/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789' | |
380 |
' |
|
691 | b'-123456'), | |
381 |
|
|
692 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678' | |
382 |
' |
|
693 | b'/12345678/12345/-xxxxxxx' | |
383 | '123456789-123456') |
|
694 | b'4d43d1ccaa20efbfe99ec779dc063611536ff2c5')) | |
384 | show('data/12345678/12345678/12345678/12345678x/12345678/12345' |
|
695 | # ...adding one truncated char to dir 1..7 won't drop dir 8 | |
385 | '678/12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
696 | self.hybridencode( | |
386 | '123456789-123456') |
|
697 | (b'data/12345678x/12345678/12345678/12345678/12345678/12345678' | |
387 | show('data/12345678/12345678/12345678/12345678/12345678x/12345' |
|
698 | b'/12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |
388 | '678/12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
699 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/1234' | |
389 | '123456789-123456') |
|
700 | b'5678/12345/xxxxxxxx0f9efce65189cc60fd90fe4ffd49d7b58bbe0f2e')) | |
390 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
701 | self.hybridencode( | |
391 | '678x/12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
702 | (b'data/12345678/12345678x/12345678/12345678/12345678/12345678' | |
392 | '123456789-123456') |
|
703 | b'/12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |
393 |
|
|
704 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/1234' | |
394 | '678/12345678x/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
705 | b'5678/12345/xxxxxxxx945ca395708cafdd54a94501859beabd3e243921')) | |
395 | '123456789-123456') |
|
706 | self.hybridencode( | |
|
707 | (b'data/12345678/12345678/12345678x/12345678/12345678/12345678/12' | |||
|
708 | b'345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |||
|
709 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/1234' | |||
|
710 | b'5678/12345/xxxxxxxxac62bf6898c4fd0502146074547c11caa751a327')) | |||
|
711 | self.hybridencode( | |||
|
712 | (b'data/12345678/12345678/12345678/12345678x/12345678/12345678/12' | |||
|
713 | b'345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |||
|
714 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/1234' | |||
|
715 | b'5678/12345/xxxxxxxx2ae5a2baed7983fae8974d0ca06c6bf08b9aee92')) | |||
|
716 | self.hybridencode( | |||
|
717 | (b'data/12345678/12345678/12345678/12345678/12345678x/12345678/' | |||
|
718 | b'12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |||
|
719 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/1234' | |||
|
720 | b'5678/12345/xxxxxxxx214aba07b6687532a43d1e9eaf6e88cfca96b68c')) | |||
|
721 | self.hybridencode( | |||
|
722 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678x' | |||
|
723 | b'/12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |||
|
724 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/1234' | |||
|
725 | b'5678/12345/xxxxxxxxe7a022ae82f0f55cf4e0498e55ba59ea4ebb55bf')) | |||
|
726 | self.hybridencode( | |||
|
727 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678/' | |||
|
728 | b'12345678x/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |||
|
729 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345' | |||
|
730 | b'678/12345/xxxxxxxxb51ce61164996a80f36ce3cfe64b62d519aedae3')) | |||
396 |
|
731 | |||
397 | print("hashed path with shortest dropped directory 8") |
|
732 | def testhashedpathshortestdropped8(self): | |
398 | print("(just hitting the _maxshortdirslen boundary)") |
|
733 | # hashed path with shortest dropped directory 8 | |
399 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
734 | # (just hitting the _maxshortdirslen boundary) | |
400 | '678/12345678/123456/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
735 | self.hybridencode( | |
401 | '123456789-123456') |
|
736 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678' | |
402 |
|
737 | b'/12345678/123456/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' | ||
403 | print("hashed path that drops dir 8 due to dot or space at end is") |
|
738 | b'123456789-123456'), | |
404 | print("encoded, and thus causing to hit _maxshortdirslen") |
|
739 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678' | |
405 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
740 | b'/12345678/xxxxxxxxx-xxxx' | |
406 | '678/12345678/1234./-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
741 | b'11fa9873cc6c3215eae864528b5530a04efc6cfe')) | |
407 | '123456789-123456') |
|
|||
408 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
|||
409 | '678/12345678/1234 /-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
|||
410 | '123456789-123456') |
|
|||
411 |
|
742 | |||
412 | print("... with dir 8 short enough for encoding") |
|
743 | def testhashedpathdropsdir8fortrailingdotspace(self): | |
413 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
744 | # hashed path that drops dir 8 due to dot or space at end is | |
414 | '678/12345678/12./xx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
745 | # encoded, and thus causing to hit _maxshortdirslen | |
415 | '123456789-123456') |
|
746 | self.hybridencode( | |
416 |
|
|
747 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678' | |
417 |
' |
|
748 | b'/12345678/1234./-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' | |
418 | '123456789-123456') |
|
749 | b'123456789-123456'), | |
|
750 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678' | |||
|
751 | b'/12345678/-xxxxxxxxx-xxx' | |||
|
752 | b'602df9b45bec564e2e1f0645d5140dddcc76ed58')) | |||
|
753 | self.hybridencode( | |||
|
754 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678' | |||
|
755 | b'/12345678/1234 /-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' | |||
|
756 | b'123456789-123456'), | |||
|
757 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678' | |||
|
758 | b'/12345678/-xxxxxxxxx-xxx' | |||
|
759 | b'd99ff212bc84b4d1f70cd6b0071e3ef69d4e12ce')) | |||
|
760 | # ... with dir 8 short enough for encoding | |||
|
761 | self.hybridencode( | |||
|
762 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678' | |||
|
763 | b'/12345678/12./xx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx' | |||
|
764 | b'-123456789-123456'), | |||
|
765 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678' | |||
|
766 | b'/12345678/12~2e/' | |||
|
767 | b'xx-xxxxx7baeb5ed7f14a586ee1cacecdbcbff70032d1b3c')) | |||
|
768 | self.hybridencode( | |||
|
769 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678' | |||
|
770 | b'/12345678/12 ' | |||
|
771 | b'/xx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'), | |||
|
772 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678' | |||
|
773 | b'/12345678/12~20/' | |||
|
774 | b'xx-xxxxxcf79ca9795f77d7f75745da36807e5d772bd5182')) | |||
419 |
|
775 | |||
420 |
|
|
776 | def testextensionsreplicatedonhashedpaths(self): | |
421 | we only get to encode files that end in .i or .d inside the |
|
777 | # Extensions are replicated on hashed paths. Note that | |
422 | store. Encoded filenames are thus bound in length.''') |
|
778 | # we only get to encode files that end in .i or .d inside the | |
423 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
779 | # store. Encoded filenames are thus bound in length. | |
424 | '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
780 | self.hybridencode( | |
425 | '123456789-12.345.i') |
|
781 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678/' | |
426 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
782 | b'12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3' | |
427 | '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
783 | b'45.i'), | |
428 | '123456789-12.345.d') |
|
784 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/12' | |
429 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
785 | b'345678/12345/-xxxxxc10ad03b5755ed524f5286aab1815dfe07729438.i')) | |
430 | '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
786 | self.hybridencode( | |
431 | '123456789-12.3456.i') |
|
787 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678/' | |
432 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
788 | b'12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3' | |
433 | '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
789 | b'45.d'), | |
434 | '123456789-12.34567.i') |
|
790 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/12' | |
435 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
791 | b'345678/12345/-xxxxx9eec83381f2b39ef5ac8b4ecdf2c94f7983f57c8.d')) | |
436 | '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
792 | self.hybridencode( | |
437 | '123456789-12.345678.i') |
|
793 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678/' | |
438 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
794 | b'12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3' | |
439 | '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
795 | b'456.i'), | |
440 | '123456789-12.3456789.i') |
|
796 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/12' | |
441 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
797 | b'345678/12345/-xxxxxb7796dc7d175cfb0bb8a7728f58f6ebec9042568.i')) | |
442 | '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
798 | self.hybridencode( | |
443 | '123456789-12.3456789-.i') |
|
799 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678/' | |
444 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
800 | b'12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3' | |
445 | '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
801 | b'4567.i'), | |
446 | '123456789-12.3456789-1.i') |
|
802 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/12' | |
447 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
803 | b'345678/12345/-xxxxxb515857a6bfeef017c4894d8df42458ac65d55b8.i')) | |
448 | '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
804 | self.hybridencode( | |
449 | '123456789-12.3456789-12.i') |
|
805 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678/' | |
450 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
806 | b'12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3' | |
451 | '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
807 | b'45678.i'), | |
452 | '123456789-12.3456789-123.i') |
|
808 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/12' | |
453 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
809 | b'345678/12345/-xxxxxb05a0f247bc0a776211cd6a32ab714fd9cc09f2b.i')) | |
454 | '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
810 | self.hybridencode( | |
455 | '123456789-12.3456789-1234.i') |
|
811 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678/' | |
456 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
812 | b'12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3' | |
457 | '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
813 | b'456789.i'), | |
458 | '123456789-12.3456789-12345.i') |
|
814 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/12' | |
459 | show('data/12345678/12345678/12345678/12345678/12345678/12345' |
|
815 | b'345678/12345/-xxxxxf192b48bff08d9e0e12035fb52bc58c70de72c94.i')) | |
460 | '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-' |
|
816 | self.hybridencode( | |
461 | '123456789-12.3456789-12345-ABCDEFGHIJKLMNOPRSTUVWX' |
|
817 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678/' | |
462 | 'YZ-abcdefghjiklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPRSTU' |
|
818 | b'12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3' | |
463 | 'VWXYZ-1234567890-xxxxxxxxx-xxxxxxxxx-xxxxxxxx-xxxx' |
|
819 | b'456789-.i'), | |
464 | 'xxxxx-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwww' |
|
820 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/12' | |
465 | 'wwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww.i') |
|
821 | b'345678/12345/-xxxxx435551e0ed4c7b083b9ba83cee916670e02e80ad.i')) | |
|
822 | self.hybridencode( | |||
|
823 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678/' | |||
|
824 | b'12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3' | |||
|
825 | b'456789-1.i'), | |||
|
826 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/12' | |||
|
827 | b'345678/12345/-xxxxxa7f74eb98d8d58b716356dfd26e2f9aaa65d6a9a.i')) | |||
|
828 | self.hybridencode( | |||
|
829 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678/' | |||
|
830 | b'12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3' | |||
|
831 | b'456789-12.i'), | |||
|
832 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/12' | |||
|
833 | b'345678/12345/-xxxxxed68d9bd43b931f0b100267fee488d65a0c66f62.i')) | |||
|
834 | self.hybridencode( | |||
|
835 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678/' | |||
|
836 | b'12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3' | |||
|
837 | b'456789-123.i'), | |||
|
838 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/12' | |||
|
839 | b'345678/12345/-xxxxx5cea44de2b642d2ba2b4a30693ffb1049644d698.i')) | |||
|
840 | self.hybridencode( | |||
|
841 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678/' | |||
|
842 | b'12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3' | |||
|
843 | b'456789-1234.i'), | |||
|
844 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/12' | |||
|
845 | b'345678/12345/-xxxxx68462f62a7f230b39c1b5400d73ec35920990b7e.i')) | |||
|
846 | self.hybridencode( | |||
|
847 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678/' | |||
|
848 | b'12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3' | |||
|
849 | b'456789-12345.i'), | |||
|
850 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/12' | |||
|
851 | b'345678/12345/-xxxxx4cb852a314c6da240a83eec94761cdd71c6ec22e.i')) | |||
|
852 | self.hybridencode( | |||
|
853 | (b'data/12345678/12345678/12345678/12345678/12345678/12345678/' | |||
|
854 | b'12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3' | |||
|
855 | b'456789-12345-ABCDEFGHIJKLMNOPRSTUVWXYZ-' | |||
|
856 | b'abcdefghjiklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPRSTUVWXYZ' | |||
|
857 | b'-1234567890-xxxxxxxxx-xxxxxxxxx-xxxxxxxx' | |||
|
858 | b'-xxxxxxxxx-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww' | |||
|
859 | b'-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww.i'), | |||
|
860 | (b'dh/12345678/12345678/12345678/12345678/12345678/12345678/12' | |||
|
861 | b'345678/12345/-xxxxx93352aa50377751d9e5ebdf52da1e6e69a6887a6.i')) | |||
466 |
|
862 | |||
467 | print("paths outside data/ can be encoded") |
|
863 | def testpathsoutsidedata(self): | |
468 | show('metadata/dir/00manifest.i') |
|
864 | # paths outside data/ can be encoded | |
469 | show('metadata/12345678/12345678/12345678/12345678/12345678/' |
|
865 | self.hybridencode(b'metadata/dir/00manifest.i', | |
470 | '12345678/12345678/12345678/12345678/12345678/12345678/' |
|
866 | b'metadata/dir/00manifest.i') | |
471 | '12345678/12345678/00manifest.i') |
|
867 | self.hybridencode( | |
|
868 | (b'metadata/12345678/12345678/12345678/12345678/12345678' | |||
|
869 | b'/12345678/12345678/12345678/12345678/12345678/12345678' | |||
|
870 | b'/12345678/12345678/00manifest.i'), | |||
|
871 | (b'dh/ata/12345678/12345678/12345678/12345678/12345678' | |||
|
872 | b'/12345678/12345678/00manife' | |||
|
873 | b'0a4da1f89aa2aa9eb0896eb451288419049781b4.i')) | |||
|
874 | ||||
|
875 | if __name__ == '__main__': | |||
|
876 | import silenttestrunner | |||
|
877 | silenttestrunner.main(__name__) |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
General Comments 0
You need to be logged in to leave comments.
Login now