##// END OF EJS Templates
tests: handle getaddrinfo reporting "No address associated with hostname"...
Mads Kiilerich -
r28527:2707cce2 default
parent child Browse files
Show More
@@ -1,434 +1,434 b''
1 1 Set up a server
2 2
3 3 $ cat >> $HGRCPATH << EOF
4 4 > [format]
5 5 > usegeneraldelta=yes
6 6 > EOF
7 7 $ hg init server
8 8 $ cd server
9 9 $ cat >> .hg/hgrc << EOF
10 10 > [extensions]
11 11 > clonebundles =
12 12 > EOF
13 13
14 14 $ touch foo
15 15 $ hg -q commit -A -m 'add foo'
16 16 $ touch bar
17 17 $ hg -q commit -A -m 'add bar'
18 18
19 19 $ hg serve -d -p $HGPORT --pid-file hg.pid --accesslog access.log
20 20 $ cat hg.pid >> $DAEMON_PIDS
21 21 $ cd ..
22 22
23 23 Missing manifest should not result in server lookup
24 24
25 25 $ hg --verbose clone -U http://localhost:$HGPORT no-manifest
26 26 requesting all changes
27 27 adding changesets
28 28 adding manifests
29 29 adding file changes
30 30 added 2 changesets with 2 changes to 2 files
31 31
32 32 $ cat server/access.log
33 33 * - - [*] "GET /?cmd=capabilities HTTP/1.1" 200 - (glob)
34 34 * - - [*] "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
35 35 * - - [*] "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=aaff8d2ffbbf07a46dd1f05d8ae7877e3f56e2a2&listkeys=phase%2Cbookmarks (glob)
36 36 * - - [*] "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases (glob)
37 37
38 38 Empty manifest file results in retrieval
39 39 (the extension only checks if the manifest file exists)
40 40
41 41 $ touch server/.hg/clonebundles.manifest
42 42 $ hg --verbose clone -U http://localhost:$HGPORT empty-manifest
43 43 no clone bundles available on remote; falling back to regular clone
44 44 requesting all changes
45 45 adding changesets
46 46 adding manifests
47 47 adding file changes
48 48 added 2 changesets with 2 changes to 2 files
49 49
50 50 Manifest file with invalid URL aborts
51 51
52 52 $ echo 'http://does.not.exist/bundle.hg' > server/.hg/clonebundles.manifest
53 53 $ hg clone http://localhost:$HGPORT 404-url
54 54 applying clone bundle from http://does.not.exist/bundle.hg
55 error fetching bundle: (.* not known|getaddrinfo failed) (re)
55 error fetching bundle: (.* not known|getaddrinfo failed|No address associated with hostname) (re)
56 56 abort: error applying bundle
57 57 (if this error persists, consider contacting the server operator or disable clone bundles via "--config ui.clonebundles=false")
58 58 [255]
59 59
60 60 Server is not running aborts
61 61
62 62 $ echo "http://localhost:$HGPORT1/bundle.hg" > server/.hg/clonebundles.manifest
63 63 $ hg clone http://localhost:$HGPORT server-not-runner
64 64 applying clone bundle from http://localhost:$HGPORT1/bundle.hg
65 65 error fetching bundle: * refused* (glob)
66 66 abort: error applying bundle
67 67 (if this error persists, consider contacting the server operator or disable clone bundles via "--config ui.clonebundles=false")
68 68 [255]
69 69
70 70 Server returns 404
71 71
72 72 $ python $TESTDIR/dumbhttp.py -p $HGPORT1 --pid http.pid
73 73 $ cat http.pid >> $DAEMON_PIDS
74 74 $ hg clone http://localhost:$HGPORT running-404
75 75 applying clone bundle from http://localhost:$HGPORT1/bundle.hg
76 76 HTTP error fetching bundle: HTTP Error 404: File not found
77 77 abort: error applying bundle
78 78 (if this error persists, consider contacting the server operator or disable clone bundles via "--config ui.clonebundles=false")
79 79 [255]
80 80
81 81 We can override failure to fall back to regular clone
82 82
83 83 $ hg --config ui.clonebundlefallback=true clone -U http://localhost:$HGPORT 404-fallback
84 84 applying clone bundle from http://localhost:$HGPORT1/bundle.hg
85 85 HTTP error fetching bundle: HTTP Error 404: File not found
86 86 falling back to normal clone
87 87 requesting all changes
88 88 adding changesets
89 89 adding manifests
90 90 adding file changes
91 91 added 2 changesets with 2 changes to 2 files
92 92
93 93 Bundle with partial content works
94 94
95 95 $ hg -R server bundle --type gzip-v1 --base null -r 53245c60e682 partial.hg
96 96 1 changesets found
97 97
98 98 We verify exact bundle content as an extra check against accidental future
99 99 changes. If this output changes, we could break old clients.
100 100
101 101 $ f --size --hexdump partial.hg
102 102 partial.hg: size=207
103 103 0000: 48 47 31 30 47 5a 78 9c 63 60 60 98 17 ac 12 93 |HG10GZx.c``.....|
104 104 0010: f0 ac a9 23 45 70 cb bf 0d 5f 59 4e 4a 7f 79 21 |...#Ep..._YNJ.y!|
105 105 0020: 9b cc 40 24 20 a0 d7 ce 2c d1 38 25 cd 24 25 d5 |..@$ ...,.8%.$%.|
106 106 0030: d8 c2 22 cd 38 d9 24 cd 22 d5 c8 22 cd 24 cd 32 |..".8.$."..".$.2|
107 107 0040: d1 c2 d0 c4 c8 d2 32 d1 38 39 29 c9 34 cd d4 80 |......2.89).4...|
108 108 0050: ab 24 b5 b8 84 cb 40 c1 80 2b 2d 3f 9f 8b 2b 31 |.$....@..+-?..+1|
109 109 0060: 25 45 01 c8 80 9a d2 9b 65 fb e5 9e 45 bf 8d 7f |%E......e...E...|
110 110 0070: 9f c6 97 9f 2b 44 34 67 d9 ec 8e 0f a0 92 0b 75 |....+D4g.......u|
111 111 0080: 41 d6 24 59 18 a4 a4 9a a6 18 1a 5b 98 9b 5a 98 |A.$Y.......[..Z.|
112 112 0090: 9a 18 26 9b a6 19 98 1a 99 99 26 a6 18 9a 98 24 |..&.......&....$|
113 113 00a0: 26 59 a6 25 5a 98 a5 18 a6 24 71 41 35 b1 43 dc |&Y.%Z....$qA5.C.|
114 114 00b0: 16 b2 83 f7 e9 45 8b d2 56 c7 a3 1f 82 52 d7 8a |.....E..V....R..|
115 115 00c0: 78 ed fc d5 76 f1 36 35 dc 05 00 36 ed 5e c7 |x...v.65...6.^.|
116 116
117 117 $ echo "http://localhost:$HGPORT1/partial.hg" > server/.hg/clonebundles.manifest
118 118 $ hg clone -U http://localhost:$HGPORT partial-bundle
119 119 applying clone bundle from http://localhost:$HGPORT1/partial.hg
120 120 adding changesets
121 121 adding manifests
122 122 adding file changes
123 123 added 1 changesets with 1 changes to 1 files
124 124 finished applying clone bundle
125 125 searching for changes
126 126 adding changesets
127 127 adding manifests
128 128 adding file changes
129 129 added 1 changesets with 1 changes to 1 files
130 130
131 131 Incremental pull doesn't fetch bundle
132 132
133 133 $ hg clone -r 53245c60e682 -U http://localhost:$HGPORT partial-clone
134 134 adding changesets
135 135 adding manifests
136 136 adding file changes
137 137 added 1 changesets with 1 changes to 1 files
138 138
139 139 $ cd partial-clone
140 140 $ hg pull
141 141 pulling from http://localhost:$HGPORT/
142 142 searching for changes
143 143 adding changesets
144 144 adding manifests
145 145 adding file changes
146 146 added 1 changesets with 1 changes to 1 files
147 147 (run 'hg update' to get a working copy)
148 148 $ cd ..
149 149
150 150 Bundle with full content works
151 151
152 152 $ hg -R server bundle --type gzip-v2 --base null -r tip full.hg
153 153 2 changesets found
154 154
155 155 Again, we perform an extra check against bundle content changes. If this content
156 156 changes, clone bundles produced by new Mercurial versions may not be readable
157 157 by old clients.
158 158
159 159 $ f --size --hexdump full.hg
160 160 full.hg: size=406
161 161 0000: 48 47 32 30 00 00 00 0e 43 6f 6d 70 72 65 73 73 |HG20....Compress|
162 162 0010: 69 6f 6e 3d 47 5a 78 9c 63 60 60 90 e5 76 f6 70 |ion=GZx.c``..v.p|
163 163 0020: f4 73 77 75 0f f2 0f 0d 60 00 02 46 06 76 a6 b2 |.swu....`..F.v..|
164 164 0030: d4 a2 e2 cc fc 3c 03 23 06 06 e6 65 40 b1 4d c1 |.....<.#...e@.M.|
165 165 0040: 2a 31 09 cf 9a 3a 52 04 b7 fc db f0 95 e5 a4 f4 |*1...:R.........|
166 166 0050: 97 17 b2 c9 0c 14 00 02 e6 d9 99 25 1a a7 a4 99 |...........%....|
167 167 0060: a4 a4 1a 5b 58 a4 19 27 9b a4 59 a4 1a 59 a4 99 |...[X..'..Y..Y..|
168 168 0070: a4 59 26 5a 18 9a 18 59 5a 26 1a 27 27 25 99 a6 |.Y&Z...YZ&.''%..|
169 169 0080: 99 1a 70 95 a4 16 97 70 19 28 18 70 a5 e5 e7 73 |..p....p.(.p...s|
170 170 0090: 71 25 a6 a4 28 00 19 40 13 0e ac fa df ab ff 7b |q%..(..@.......{|
171 171 00a0: 3f fb 92 dc 8b 1f 62 bb 9e b7 d7 d9 87 3d 5a 44 |?.....b......=ZD|
172 172 00b0: ac 2f b0 a9 c3 66 1e 54 b9 26 08 a7 1a 1b 1a a7 |./...f.T.&......|
173 173 00c0: 25 1b 9a 1b 99 19 9a 5a 18 9b a6 18 19 00 dd 67 |%......Z.......g|
174 174 00d0: 61 61 98 06 f4 80 49 4a 8a 65 52 92 41 9a 81 81 |aa....IJ.eR.A...|
175 175 00e0: a5 11 17 50 31 30 58 19 cc 80 98 25 29 b1 08 c4 |...P10X....%)...|
176 176 00f0: 37 07 79 19 88 d9 41 ee 07 8a 41 cd 5d 98 65 fb |7.y...A...A.].e.|
177 177 0100: e5 9e 45 bf 8d 7f 9f c6 97 9f 2b 44 34 67 d9 ec |..E.......+D4g..|
178 178 0110: 8e 0f a0 61 a8 eb 82 82 2e c9 c2 20 25 d5 34 c5 |...a....... %.4.|
179 179 0120: d0 d8 c2 dc d4 c2 d4 c4 30 d9 34 cd c0 d4 c8 cc |........0.4.....|
180 180 0130: 34 31 c5 d0 c4 24 31 c9 32 2d d1 c2 2c c5 30 25 |41...$1.2-..,.0%|
181 181 0140: 09 e4 ee 85 8f 85 ff 88 ab 89 36 c7 2a c4 47 34 |..........6.*.G4|
182 182 0150: fe f8 ec 7b 73 37 3f c3 24 62 1d 8d 4d 1d 9e 40 |...{s7?.$b..M..@|
183 183 0160: 06 3b 10 14 36 a4 38 10 04 d8 21 01 9a b1 83 f7 |.;..6.8...!.....|
184 184 0170: e9 45 8b d2 56 c7 a3 1f 82 52 d7 8a 78 ed fc d5 |.E..V....R..x...|
185 185 0180: 76 f1 36 25 81 89 c7 ad ec 90 34 48 75 2b 89 49 |v.6%......4Hu+.I|
186 186 0190: bf 00 d6 97 f0 8d |......|
187 187
188 188 $ echo "http://localhost:$HGPORT1/full.hg" > server/.hg/clonebundles.manifest
189 189 $ hg clone -U http://localhost:$HGPORT full-bundle
190 190 applying clone bundle from http://localhost:$HGPORT1/full.hg
191 191 adding changesets
192 192 adding manifests
193 193 adding file changes
194 194 added 2 changesets with 2 changes to 2 files
195 195 finished applying clone bundle
196 196 searching for changes
197 197 no changes found
198 198
199 199 Feature works over SSH
200 200
201 201 $ hg clone -U -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/server ssh-full-clone
202 202 applying clone bundle from http://localhost:$HGPORT1/full.hg
203 203 adding changesets
204 204 adding manifests
205 205 adding file changes
206 206 added 2 changesets with 2 changes to 2 files
207 207 finished applying clone bundle
208 208 searching for changes
209 209 no changes found
210 210
211 211 Entry with unknown BUNDLESPEC is filtered and not used
212 212
213 213 $ cat > server/.hg/clonebundles.manifest << EOF
214 214 > http://bad.entry1 BUNDLESPEC=UNKNOWN
215 215 > http://bad.entry2 BUNDLESPEC=xz-v1
216 216 > http://bad.entry3 BUNDLESPEC=none-v100
217 217 > http://localhost:$HGPORT1/full.hg BUNDLESPEC=gzip-v2
218 218 > EOF
219 219
220 220 $ hg clone -U http://localhost:$HGPORT filter-unknown-type
221 221 applying clone bundle from http://localhost:$HGPORT1/full.hg
222 222 adding changesets
223 223 adding manifests
224 224 adding file changes
225 225 added 2 changesets with 2 changes to 2 files
226 226 finished applying clone bundle
227 227 searching for changes
228 228 no changes found
229 229
230 230 Automatic fallback when all entries are filtered
231 231
232 232 $ cat > server/.hg/clonebundles.manifest << EOF
233 233 > http://bad.entry BUNDLESPEC=UNKNOWN
234 234 > EOF
235 235
236 236 $ hg clone -U http://localhost:$HGPORT filter-all
237 237 no compatible clone bundles available on server; falling back to regular clone
238 238 (you may want to report this to the server operator)
239 239 requesting all changes
240 240 adding changesets
241 241 adding manifests
242 242 adding file changes
243 243 added 2 changesets with 2 changes to 2 files
244 244
245 245 URLs requiring SNI are filtered in Python <2.7.9
246 246
247 247 $ cp full.hg sni.hg
248 248 $ cat > server/.hg/clonebundles.manifest << EOF
249 249 > http://localhost:$HGPORT1/sni.hg REQUIRESNI=true
250 250 > http://localhost:$HGPORT1/full.hg
251 251 > EOF
252 252
253 253 #if sslcontext
254 254 Python 2.7.9+ support SNI
255 255
256 256 $ hg clone -U http://localhost:$HGPORT sni-supported
257 257 applying clone bundle from http://localhost:$HGPORT1/sni.hg
258 258 adding changesets
259 259 adding manifests
260 260 adding file changes
261 261 added 2 changesets with 2 changes to 2 files
262 262 finished applying clone bundle
263 263 searching for changes
264 264 no changes found
265 265 #else
266 266 Python <2.7.9 will filter SNI URLs
267 267
268 268 $ hg clone -U http://localhost:$HGPORT sni-unsupported
269 269 applying clone bundle from http://localhost:$HGPORT1/full.hg
270 270 adding changesets
271 271 adding manifests
272 272 adding file changes
273 273 added 2 changesets with 2 changes to 2 files
274 274 finished applying clone bundle
275 275 searching for changes
276 276 no changes found
277 277 #endif
278 278
279 279 Stream clone bundles are supported
280 280
281 281 $ hg -R server debugcreatestreamclonebundle packed.hg
282 282 writing 613 bytes for 4 files
283 283 bundle requirements: generaldelta, revlogv1
284 284
285 285 No bundle spec should work
286 286
287 287 $ cat > server/.hg/clonebundles.manifest << EOF
288 288 > http://localhost:$HGPORT1/packed.hg
289 289 > EOF
290 290
291 291 $ hg clone -U http://localhost:$HGPORT stream-clone-no-spec
292 292 applying clone bundle from http://localhost:$HGPORT1/packed.hg
293 293 4 files to transfer, 613 bytes of data
294 294 transferred 613 bytes in *.* seconds (*) (glob)
295 295 finished applying clone bundle
296 296 searching for changes
297 297 no changes found
298 298
299 299 Bundle spec without parameters should work
300 300
301 301 $ cat > server/.hg/clonebundles.manifest << EOF
302 302 > http://localhost:$HGPORT1/packed.hg BUNDLESPEC=none-packed1
303 303 > EOF
304 304
305 305 $ hg clone -U http://localhost:$HGPORT stream-clone-vanilla-spec
306 306 applying clone bundle from http://localhost:$HGPORT1/packed.hg
307 307 4 files to transfer, 613 bytes of data
308 308 transferred 613 bytes in *.* seconds (*) (glob)
309 309 finished applying clone bundle
310 310 searching for changes
311 311 no changes found
312 312
313 313 Bundle spec with format requirements should work
314 314
315 315 $ cat > server/.hg/clonebundles.manifest << EOF
316 316 > http://localhost:$HGPORT1/packed.hg BUNDLESPEC=none-packed1;requirements%3Drevlogv1
317 317 > EOF
318 318
319 319 $ hg clone -U http://localhost:$HGPORT stream-clone-supported-requirements
320 320 applying clone bundle from http://localhost:$HGPORT1/packed.hg
321 321 4 files to transfer, 613 bytes of data
322 322 transferred 613 bytes in *.* seconds (*) (glob)
323 323 finished applying clone bundle
324 324 searching for changes
325 325 no changes found
326 326
327 327 Stream bundle spec with unknown requirements should be filtered out
328 328
329 329 $ cat > server/.hg/clonebundles.manifest << EOF
330 330 > http://localhost:$HGPORT1/packed.hg BUNDLESPEC=none-packed1;requirements%3Drevlogv42
331 331 > EOF
332 332
333 333 $ hg clone -U http://localhost:$HGPORT stream-clone-unsupported-requirements
334 334 no compatible clone bundles available on server; falling back to regular clone
335 335 (you may want to report this to the server operator)
336 336 requesting all changes
337 337 adding changesets
338 338 adding manifests
339 339 adding file changes
340 340 added 2 changesets with 2 changes to 2 files
341 341
342 342 Set up manifest for testing preferences
343 343 (Remember, the TYPE does not have to match reality - the URL is
344 344 important)
345 345
346 346 $ cp full.hg gz-a.hg
347 347 $ cp full.hg gz-b.hg
348 348 $ cp full.hg bz2-a.hg
349 349 $ cp full.hg bz2-b.hg
350 350 $ cat > server/.hg/clonebundles.manifest << EOF
351 351 > http://localhost:$HGPORT1/gz-a.hg BUNDLESPEC=gzip-v2 extra=a
352 352 > http://localhost:$HGPORT1/bz2-a.hg BUNDLESPEC=bzip2-v2 extra=a
353 353 > http://localhost:$HGPORT1/gz-b.hg BUNDLESPEC=gzip-v2 extra=b
354 354 > http://localhost:$HGPORT1/bz2-b.hg BUNDLESPEC=bzip2-v2 extra=b
355 355 > EOF
356 356
357 357 Preferring an undefined attribute will take first entry
358 358
359 359 $ hg --config ui.clonebundleprefers=foo=bar clone -U http://localhost:$HGPORT prefer-foo
360 360 applying clone bundle from http://localhost:$HGPORT1/gz-a.hg
361 361 adding changesets
362 362 adding manifests
363 363 adding file changes
364 364 added 2 changesets with 2 changes to 2 files
365 365 finished applying clone bundle
366 366 searching for changes
367 367 no changes found
368 368
369 369 Preferring bz2 type will download first entry of that type
370 370
371 371 $ hg --config ui.clonebundleprefers=COMPRESSION=bzip2 clone -U http://localhost:$HGPORT prefer-bz
372 372 applying clone bundle from http://localhost:$HGPORT1/bz2-a.hg
373 373 adding changesets
374 374 adding manifests
375 375 adding file changes
376 376 added 2 changesets with 2 changes to 2 files
377 377 finished applying clone bundle
378 378 searching for changes
379 379 no changes found
380 380
381 381 Preferring multiple values of an option works
382 382
383 383 $ hg --config ui.clonebundleprefers=COMPRESSION=unknown,COMPRESSION=bzip2 clone -U http://localhost:$HGPORT prefer-multiple-bz
384 384 applying clone bundle from http://localhost:$HGPORT1/bz2-a.hg
385 385 adding changesets
386 386 adding manifests
387 387 adding file changes
388 388 added 2 changesets with 2 changes to 2 files
389 389 finished applying clone bundle
390 390 searching for changes
391 391 no changes found
392 392
393 393 Sorting multiple values should get us back to original first entry
394 394
395 395 $ hg --config ui.clonebundleprefers=BUNDLESPEC=unknown,BUNDLESPEC=gzip-v2,BUNDLESPEC=bzip2-v2 clone -U http://localhost:$HGPORT prefer-multiple-gz
396 396 applying clone bundle from http://localhost:$HGPORT1/gz-a.hg
397 397 adding changesets
398 398 adding manifests
399 399 adding file changes
400 400 added 2 changesets with 2 changes to 2 files
401 401 finished applying clone bundle
402 402 searching for changes
403 403 no changes found
404 404
405 405 Preferring multiple attributes has correct order
406 406
407 407 $ hg --config ui.clonebundleprefers=extra=b,BUNDLESPEC=bzip2-v2 clone -U http://localhost:$HGPORT prefer-separate-attributes
408 408 applying clone bundle from http://localhost:$HGPORT1/bz2-b.hg
409 409 adding changesets
410 410 adding manifests
411 411 adding file changes
412 412 added 2 changesets with 2 changes to 2 files
413 413 finished applying clone bundle
414 414 searching for changes
415 415 no changes found
416 416
417 417 Test where attribute is missing from some entries
418 418
419 419 $ cat > server/.hg/clonebundles.manifest << EOF
420 420 > http://localhost:$HGPORT1/gz-a.hg BUNDLESPEC=gzip-v2
421 421 > http://localhost:$HGPORT1/bz2-a.hg BUNDLESPEC=bzip2-v2
422 422 > http://localhost:$HGPORT1/gz-b.hg BUNDLESPEC=gzip-v2 extra=b
423 423 > http://localhost:$HGPORT1/bz2-b.hg BUNDLESPEC=bzip2-v2 extra=b
424 424 > EOF
425 425
426 426 $ hg --config ui.clonebundleprefers=extra=b clone -U http://localhost:$HGPORT prefer-partially-defined-attribute
427 427 applying clone bundle from http://localhost:$HGPORT1/gz-b.hg
428 428 adding changesets
429 429 adding manifests
430 430 adding file changes
431 431 added 2 changesets with 2 changes to 2 files
432 432 finished applying clone bundle
433 433 searching for changes
434 434 no changes found
General Comments 0
You need to be logged in to leave comments. Login now