240 self.assertEqual(r.apppath, b'/prefix/repo') |
241 self.assertEqual(r.apppath, b'/prefix/repo') |
241 self.assertEqual(r.dispatchparts, [b'path1', b'path2']) |
242 self.assertEqual(r.dispatchparts, [b'path1', b'path2']) |
242 self.assertEqual(r.dispatchpath, b'path1/path2') |
243 self.assertEqual(r.dispatchpath, b'path1/path2') |
243 self.assertEqual(r.reponame, b'prefix/repo') |
244 self.assertEqual(r.reponame, b'prefix/repo') |
244 |
245 |
|
246 def testaltbaseurl(self): |
|
247 # Simple hostname remap. |
|
248 r = parse(DEFAULT_ENV, altbaseurl='http://altserver') |
|
249 |
|
250 self.assertEqual(r.url, b'http://testserver') |
|
251 self.assertEqual(r.baseurl, b'http://testserver') |
|
252 self.assertEqual(r.advertisedurl, b'http://altserver') |
|
253 self.assertEqual(r.advertisedbaseurl, b'http://altserver') |
|
254 self.assertEqual(r.urlscheme, b'http') |
|
255 self.assertEqual(r.apppath, b'') |
|
256 self.assertEqual(r.dispatchparts, []) |
|
257 self.assertIsNone(r.dispatchpath) |
|
258 self.assertIsNone(r.reponame) |
|
259 |
|
260 # With a custom port. |
|
261 r = parse(DEFAULT_ENV, altbaseurl='http://altserver:8000') |
|
262 self.assertEqual(r.url, b'http://testserver') |
|
263 self.assertEqual(r.baseurl, b'http://testserver') |
|
264 self.assertEqual(r.advertisedurl, b'http://altserver:8000') |
|
265 self.assertEqual(r.advertisedbaseurl, b'http://altserver:8000') |
|
266 self.assertEqual(r.urlscheme, b'http') |
|
267 self.assertEqual(r.apppath, b'') |
|
268 self.assertEqual(r.dispatchparts, []) |
|
269 self.assertIsNone(r.dispatchpath) |
|
270 self.assertIsNone(r.reponame) |
|
271 |
|
272 # With a changed protocol. |
|
273 r = parse(DEFAULT_ENV, altbaseurl='https://altserver') |
|
274 self.assertEqual(r.url, b'http://testserver') |
|
275 self.assertEqual(r.baseurl, b'http://testserver') |
|
276 self.assertEqual(r.advertisedurl, b'https://altserver') |
|
277 self.assertEqual(r.advertisedbaseurl, b'https://altserver') |
|
278 # URL scheme is defined as the actual scheme, not advertised. |
|
279 self.assertEqual(r.urlscheme, b'http') |
|
280 self.assertEqual(r.apppath, b'') |
|
281 self.assertEqual(r.dispatchparts, []) |
|
282 self.assertIsNone(r.dispatchpath) |
|
283 self.assertIsNone(r.reponame) |
|
284 |
|
285 # Need to specify explicit port number for proper https:// alt URLs. |
|
286 r = parse(DEFAULT_ENV, altbaseurl='https://altserver:443') |
|
287 self.assertEqual(r.url, b'http://testserver') |
|
288 self.assertEqual(r.baseurl, b'http://testserver') |
|
289 self.assertEqual(r.advertisedurl, b'https://altserver') |
|
290 self.assertEqual(r.advertisedbaseurl, b'https://altserver') |
|
291 self.assertEqual(r.urlscheme, b'http') |
|
292 self.assertEqual(r.apppath, b'') |
|
293 self.assertEqual(r.dispatchparts, []) |
|
294 self.assertIsNone(r.dispatchpath) |
|
295 self.assertIsNone(r.reponame) |
|
296 |
|
297 # With only PATH_INFO defined. |
|
298 r = parse(DEFAULT_ENV, altbaseurl='http://altserver', extra={ |
|
299 r'PATH_INFO': r'/path1/path2', |
|
300 }) |
|
301 self.assertEqual(r.url, b'http://testserver/path1/path2') |
|
302 self.assertEqual(r.baseurl, b'http://testserver') |
|
303 self.assertEqual(r.advertisedurl, b'http://altserver/path1/path2') |
|
304 self.assertEqual(r.advertisedbaseurl, b'http://altserver') |
|
305 self.assertEqual(r.urlscheme, b'http') |
|
306 self.assertEqual(r.apppath, b'') |
|
307 self.assertEqual(r.dispatchparts, [b'path1', b'path2']) |
|
308 self.assertEqual(r.dispatchpath, b'path1/path2') |
|
309 self.assertIsNone(r.reponame) |
|
310 |
|
311 # Path on alt URL. |
|
312 r = parse(DEFAULT_ENV, altbaseurl='http://altserver/altpath') |
|
313 self.assertEqual(r.url, b'http://testserver') |
|
314 self.assertEqual(r.baseurl, b'http://testserver') |
|
315 self.assertEqual(r.advertisedurl, b'http://altserver/altpath') |
|
316 self.assertEqual(r.advertisedbaseurl, b'http://altserver') |
|
317 self.assertEqual(r.urlscheme, b'http') |
|
318 self.assertEqual(r.apppath, b'/altpath') |
|
319 self.assertEqual(r.dispatchparts, []) |
|
320 self.assertIsNone(r.dispatchpath) |
|
321 self.assertIsNone(r.reponame) |
|
322 |
|
323 # With a trailing slash. |
|
324 r = parse(DEFAULT_ENV, altbaseurl='http://altserver/altpath/') |
|
325 self.assertEqual(r.url, b'http://testserver') |
|
326 self.assertEqual(r.baseurl, b'http://testserver') |
|
327 self.assertEqual(r.advertisedurl, b'http://altserver/altpath/') |
|
328 self.assertEqual(r.advertisedbaseurl, b'http://altserver') |
|
329 self.assertEqual(r.urlscheme, b'http') |
|
330 self.assertEqual(r.apppath, b'/altpath/') |
|
331 self.assertEqual(r.dispatchparts, []) |
|
332 self.assertIsNone(r.dispatchpath) |
|
333 self.assertIsNone(r.reponame) |
|
334 |
|
335 # PATH_INFO + path on alt URL. |
|
336 r = parse(DEFAULT_ENV, altbaseurl='http://altserver/altpath', extra={ |
|
337 r'PATH_INFO': r'/path1/path2', |
|
338 }) |
|
339 self.assertEqual(r.url, b'http://testserver/path1/path2') |
|
340 self.assertEqual(r.baseurl, b'http://testserver') |
|
341 self.assertEqual(r.advertisedurl, |
|
342 b'http://altserver/altpath/path1/path2') |
|
343 self.assertEqual(r.advertisedbaseurl, b'http://altserver') |
|
344 self.assertEqual(r.urlscheme, b'http') |
|
345 self.assertEqual(r.apppath, b'/altpath') |
|
346 self.assertEqual(r.dispatchparts, [b'path1', b'path2']) |
|
347 self.assertEqual(r.dispatchpath, b'path1/path2') |
|
348 self.assertIsNone(r.reponame) |
|
349 |
|
350 # PATH_INFO + path on alt URL with trailing slash. |
|
351 r = parse(DEFAULT_ENV, altbaseurl='http://altserver/altpath/', extra={ |
|
352 r'PATH_INFO': r'/path1/path2', |
|
353 }) |
|
354 self.assertEqual(r.url, b'http://testserver/path1/path2') |
|
355 self.assertEqual(r.baseurl, b'http://testserver') |
|
356 self.assertEqual(r.advertisedurl, |
|
357 b'http://altserver/altpath//path1/path2') |
|
358 self.assertEqual(r.advertisedbaseurl, b'http://altserver') |
|
359 self.assertEqual(r.urlscheme, b'http') |
|
360 self.assertEqual(r.apppath, b'/altpath/') |
|
361 self.assertEqual(r.dispatchparts, [b'path1', b'path2']) |
|
362 self.assertEqual(r.dispatchpath, b'path1/path2') |
|
363 self.assertIsNone(r.reponame) |
|
364 |
|
365 # Local SCRIPT_NAME is ignored. |
|
366 r = parse(DEFAULT_ENV, altbaseurl='http://altserver', extra={ |
|
367 r'SCRIPT_NAME': r'/script', |
|
368 r'PATH_INFO': r'/path1/path2', |
|
369 }) |
|
370 self.assertEqual(r.url, b'http://testserver/script/path1/path2') |
|
371 self.assertEqual(r.baseurl, b'http://testserver') |
|
372 self.assertEqual(r.advertisedurl, b'http://altserver/path1/path2') |
|
373 self.assertEqual(r.advertisedbaseurl, b'http://altserver') |
|
374 self.assertEqual(r.urlscheme, b'http') |
|
375 self.assertEqual(r.apppath, b'') |
|
376 self.assertEqual(r.dispatchparts, [b'path1', b'path2']) |
|
377 self.assertEqual(r.dispatchpath, b'path1/path2') |
|
378 self.assertIsNone(r.reponame) |
|
379 |
|
380 # Use remote's path for script name, app path |
|
381 r = parse(DEFAULT_ENV, altbaseurl='http://altserver/altroot', extra={ |
|
382 r'SCRIPT_NAME': r'/script', |
|
383 r'PATH_INFO': r'/path1/path2', |
|
384 }) |
|
385 self.assertEqual(r.url, b'http://testserver/script/path1/path2') |
|
386 self.assertEqual(r.baseurl, b'http://testserver') |
|
387 self.assertEqual(r.advertisedurl, |
|
388 b'http://altserver/altroot/path1/path2') |
|
389 self.assertEqual(r.advertisedbaseurl, b'http://altserver') |
|
390 self.assertEqual(r.urlscheme, b'http') |
|
391 self.assertEqual(r.apppath, b'/altroot') |
|
392 self.assertEqual(r.dispatchparts, [b'path1', b'path2']) |
|
393 self.assertEqual(r.dispatchpath, b'path1/path2') |
|
394 self.assertIsNone(r.reponame) |
|
395 |
|
396 # reponame is factored in properly. |
|
397 r = parse(DEFAULT_ENV, reponame=b'repo', |
|
398 altbaseurl='http://altserver/altroot', |
|
399 extra={ |
|
400 r'SCRIPT_NAME': r'/script', |
|
401 r'PATH_INFO': r'/repo/path1/path2', |
|
402 }) |
|
403 |
|
404 self.assertEqual(r.url, b'http://testserver/script/repo/path1/path2') |
|
405 self.assertEqual(r.baseurl, b'http://testserver') |
|
406 self.assertEqual(r.advertisedurl, |
|
407 b'http://altserver/altroot/repo/path1/path2') |
|
408 self.assertEqual(r.advertisedbaseurl, b'http://altserver') |
|
409 self.assertEqual(r.apppath, b'/altroot/repo') |
|
410 self.assertEqual(r.dispatchparts, [b'path1', b'path2']) |
|
411 self.assertEqual(r.dispatchpath, b'path1/path2') |
|
412 self.assertEqual(r.reponame, b'repo') |
|
413 |
245 if __name__ == '__main__': |
414 if __name__ == '__main__': |
246 import silenttestrunner |
415 import silenttestrunner |
247 silenttestrunner.main(__name__) |
416 silenttestrunner.main(__name__) |