tests/test-wsgirequest.py
changeset 45942 89a2afe31e82
parent 45004 2632c1ed8f34
child 48875 6000f5b25c9b
equal deleted inserted replaced
45941:346af7687c6f 45942:89a2afe31e82
    47         self.assertEqual(r.querystring, b'')
    47         self.assertEqual(r.querystring, b'')
    48         self.assertEqual(len(r.qsparams), 0)
    48         self.assertEqual(len(r.qsparams), 0)
    49         self.assertEqual(len(r.headers), 0)
    49         self.assertEqual(len(r.headers), 0)
    50 
    50 
    51     def testcustomport(self):
    51     def testcustomport(self):
    52         r = parse(DEFAULT_ENV, extra={'SERVER_PORT': '8000',})
    52         r = parse(
       
    53             DEFAULT_ENV,
       
    54             extra={
       
    55                 'SERVER_PORT': '8000',
       
    56             },
       
    57         )
    53 
    58 
    54         self.assertEqual(r.url, b'http://testserver:8000')
    59         self.assertEqual(r.url, b'http://testserver:8000')
    55         self.assertEqual(r.baseurl, b'http://testserver:8000')
    60         self.assertEqual(r.baseurl, b'http://testserver:8000')
    56         self.assertEqual(r.advertisedurl, b'http://testserver:8000')
    61         self.assertEqual(r.advertisedurl, b'http://testserver:8000')
    57         self.assertEqual(r.advertisedbaseurl, b'http://testserver:8000')
    62         self.assertEqual(r.advertisedbaseurl, b'http://testserver:8000')
    58 
    63 
    59         r = parse(
    64         r = parse(
    60             DEFAULT_ENV,
    65             DEFAULT_ENV,
    61             extra={'SERVER_PORT': '4000', 'wsgi.url_scheme': 'https',},
    66             extra={
       
    67                 'SERVER_PORT': '4000',
       
    68                 'wsgi.url_scheme': 'https',
       
    69             },
    62         )
    70         )
    63 
    71 
    64         self.assertEqual(r.url, b'https://testserver:4000')
    72         self.assertEqual(r.url, b'https://testserver:4000')
    65         self.assertEqual(r.baseurl, b'https://testserver:4000')
    73         self.assertEqual(r.baseurl, b'https://testserver:4000')
    66         self.assertEqual(r.advertisedurl, b'https://testserver:4000')
    74         self.assertEqual(r.advertisedurl, b'https://testserver:4000')
    67         self.assertEqual(r.advertisedbaseurl, b'https://testserver:4000')
    75         self.assertEqual(r.advertisedbaseurl, b'https://testserver:4000')
    68 
    76 
    69     def testhttphost(self):
    77     def testhttphost(self):
    70         r = parse(DEFAULT_ENV, extra={'HTTP_HOST': 'altserver',})
    78         r = parse(
       
    79             DEFAULT_ENV,
       
    80             extra={
       
    81                 'HTTP_HOST': 'altserver',
       
    82             },
       
    83         )
    71 
    84 
    72         self.assertEqual(r.url, b'http://altserver')
    85         self.assertEqual(r.url, b'http://altserver')
    73         self.assertEqual(r.baseurl, b'http://altserver')
    86         self.assertEqual(r.baseurl, b'http://altserver')
    74         self.assertEqual(r.advertisedurl, b'http://testserver')
    87         self.assertEqual(r.advertisedurl, b'http://testserver')
    75         self.assertEqual(r.advertisedbaseurl, b'http://testserver')
    88         self.assertEqual(r.advertisedbaseurl, b'http://testserver')
    76 
    89 
    77     def testscriptname(self):
    90     def testscriptname(self):
    78         r = parse(DEFAULT_ENV, extra={'SCRIPT_NAME': '',})
    91         r = parse(
       
    92             DEFAULT_ENV,
       
    93             extra={
       
    94                 'SCRIPT_NAME': '',
       
    95             },
       
    96         )
    79 
    97 
    80         self.assertEqual(r.url, b'http://testserver')
    98         self.assertEqual(r.url, b'http://testserver')
    81         self.assertEqual(r.baseurl, b'http://testserver')
    99         self.assertEqual(r.baseurl, b'http://testserver')
    82         self.assertEqual(r.advertisedurl, b'http://testserver')
   100         self.assertEqual(r.advertisedurl, b'http://testserver')
    83         self.assertEqual(r.advertisedbaseurl, b'http://testserver')
   101         self.assertEqual(r.advertisedbaseurl, b'http://testserver')
    84         self.assertEqual(r.apppath, b'')
   102         self.assertEqual(r.apppath, b'')
    85         self.assertEqual(r.dispatchparts, [])
   103         self.assertEqual(r.dispatchparts, [])
    86         self.assertIsNone(r.dispatchpath)
   104         self.assertIsNone(r.dispatchpath)
    87 
   105 
    88         r = parse(DEFAULT_ENV, extra={'SCRIPT_NAME': '/script',})
   106         r = parse(
       
   107             DEFAULT_ENV,
       
   108             extra={
       
   109                 'SCRIPT_NAME': '/script',
       
   110             },
       
   111         )
    89 
   112 
    90         self.assertEqual(r.url, b'http://testserver/script')
   113         self.assertEqual(r.url, b'http://testserver/script')
    91         self.assertEqual(r.baseurl, b'http://testserver')
   114         self.assertEqual(r.baseurl, b'http://testserver')
    92         self.assertEqual(r.advertisedurl, b'http://testserver/script')
   115         self.assertEqual(r.advertisedurl, b'http://testserver/script')
    93         self.assertEqual(r.advertisedbaseurl, b'http://testserver')
   116         self.assertEqual(r.advertisedbaseurl, b'http://testserver')
    94         self.assertEqual(r.apppath, b'/script')
   117         self.assertEqual(r.apppath, b'/script')
    95         self.assertEqual(r.dispatchparts, [])
   118         self.assertEqual(r.dispatchparts, [])
    96         self.assertIsNone(r.dispatchpath)
   119         self.assertIsNone(r.dispatchpath)
    97 
   120 
    98         r = parse(DEFAULT_ENV, extra={'SCRIPT_NAME': '/multiple words',})
   121         r = parse(
       
   122             DEFAULT_ENV,
       
   123             extra={
       
   124                 'SCRIPT_NAME': '/multiple words',
       
   125             },
       
   126         )
    99 
   127 
   100         self.assertEqual(r.url, b'http://testserver/multiple%20words')
   128         self.assertEqual(r.url, b'http://testserver/multiple%20words')
   101         self.assertEqual(r.baseurl, b'http://testserver')
   129         self.assertEqual(r.baseurl, b'http://testserver')
   102         self.assertEqual(r.advertisedurl, b'http://testserver/multiple%20words')
   130         self.assertEqual(r.advertisedurl, b'http://testserver/multiple%20words')
   103         self.assertEqual(r.advertisedbaseurl, b'http://testserver')
   131         self.assertEqual(r.advertisedbaseurl, b'http://testserver')
   104         self.assertEqual(r.apppath, b'/multiple words')
   132         self.assertEqual(r.apppath, b'/multiple words')
   105         self.assertEqual(r.dispatchparts, [])
   133         self.assertEqual(r.dispatchparts, [])
   106         self.assertIsNone(r.dispatchpath)
   134         self.assertIsNone(r.dispatchpath)
   107 
   135 
   108     def testpathinfo(self):
   136     def testpathinfo(self):
   109         r = parse(DEFAULT_ENV, extra={'PATH_INFO': '',})
   137         r = parse(
       
   138             DEFAULT_ENV,
       
   139             extra={
       
   140                 'PATH_INFO': '',
       
   141             },
       
   142         )
   110 
   143 
   111         self.assertEqual(r.url, b'http://testserver')
   144         self.assertEqual(r.url, b'http://testserver')
   112         self.assertEqual(r.baseurl, b'http://testserver')
   145         self.assertEqual(r.baseurl, b'http://testserver')
   113         self.assertEqual(r.advertisedurl, b'http://testserver')
   146         self.assertEqual(r.advertisedurl, b'http://testserver')
   114         self.assertEqual(r.advertisedbaseurl, b'http://testserver')
   147         self.assertEqual(r.advertisedbaseurl, b'http://testserver')
   115         self.assertEqual(r.apppath, b'')
   148         self.assertEqual(r.apppath, b'')
   116         self.assertEqual(r.dispatchparts, [])
   149         self.assertEqual(r.dispatchparts, [])
   117         self.assertEqual(r.dispatchpath, b'')
   150         self.assertEqual(r.dispatchpath, b'')
   118 
   151 
   119         r = parse(DEFAULT_ENV, extra={'PATH_INFO': '/pathinfo',})
   152         r = parse(
       
   153             DEFAULT_ENV,
       
   154             extra={
       
   155                 'PATH_INFO': '/pathinfo',
       
   156             },
       
   157         )
   120 
   158 
   121         self.assertEqual(r.url, b'http://testserver/pathinfo')
   159         self.assertEqual(r.url, b'http://testserver/pathinfo')
   122         self.assertEqual(r.baseurl, b'http://testserver')
   160         self.assertEqual(r.baseurl, b'http://testserver')
   123         self.assertEqual(r.advertisedurl, b'http://testserver/pathinfo')
   161         self.assertEqual(r.advertisedurl, b'http://testserver/pathinfo')
   124         self.assertEqual(r.advertisedbaseurl, b'http://testserver')
   162         self.assertEqual(r.advertisedbaseurl, b'http://testserver')
   125         self.assertEqual(r.apppath, b'')
   163         self.assertEqual(r.apppath, b'')
   126         self.assertEqual(r.dispatchparts, [b'pathinfo'])
   164         self.assertEqual(r.dispatchparts, [b'pathinfo'])
   127         self.assertEqual(r.dispatchpath, b'pathinfo')
   165         self.assertEqual(r.dispatchpath, b'pathinfo')
   128 
   166 
   129         r = parse(DEFAULT_ENV, extra={'PATH_INFO': '/one/two/',})
   167         r = parse(
       
   168             DEFAULT_ENV,
       
   169             extra={
       
   170                 'PATH_INFO': '/one/two/',
       
   171             },
       
   172         )
   130 
   173 
   131         self.assertEqual(r.url, b'http://testserver/one/two/')
   174         self.assertEqual(r.url, b'http://testserver/one/two/')
   132         self.assertEqual(r.baseurl, b'http://testserver')
   175         self.assertEqual(r.baseurl, b'http://testserver')
   133         self.assertEqual(r.advertisedurl, b'http://testserver/one/two/')
   176         self.assertEqual(r.advertisedurl, b'http://testserver/one/two/')
   134         self.assertEqual(r.advertisedbaseurl, b'http://testserver')
   177         self.assertEqual(r.advertisedbaseurl, b'http://testserver')
   137         self.assertEqual(r.dispatchpath, b'one/two')
   180         self.assertEqual(r.dispatchpath, b'one/two')
   138 
   181 
   139     def testscriptandpathinfo(self):
   182     def testscriptandpathinfo(self):
   140         r = parse(
   183         r = parse(
   141             DEFAULT_ENV,
   184             DEFAULT_ENV,
   142             extra={'SCRIPT_NAME': '/script', 'PATH_INFO': '/pathinfo',},
   185             extra={
       
   186                 'SCRIPT_NAME': '/script',
       
   187                 'PATH_INFO': '/pathinfo',
       
   188             },
   143         )
   189         )
   144 
   190 
   145         self.assertEqual(r.url, b'http://testserver/script/pathinfo')
   191         self.assertEqual(r.url, b'http://testserver/script/pathinfo')
   146         self.assertEqual(r.baseurl, b'http://testserver')
   192         self.assertEqual(r.baseurl, b'http://testserver')
   147         self.assertEqual(r.advertisedurl, b'http://testserver/script/pathinfo')
   193         self.assertEqual(r.advertisedurl, b'http://testserver/script/pathinfo')
   206             error.ProgrammingError, 'PATH_INFO does not begin with repo ' 'name'
   252             error.ProgrammingError, 'PATH_INFO does not begin with repo ' 'name'
   207         ):
   253         ):
   208             parse(
   254             parse(
   209                 DEFAULT_ENV,
   255                 DEFAULT_ENV,
   210                 reponame=b'repo',
   256                 reponame=b'repo',
   211                 extra={'PATH_INFO': '/pathinfo',},
   257                 extra={
       
   258                     'PATH_INFO': '/pathinfo',
       
   259                 },
   212             )
   260             )
   213 
   261 
   214         with self.assertRaisesRegex(
   262         with self.assertRaisesRegex(
   215             error.ProgrammingError, 'reponame prefix of PATH_INFO'
   263             error.ProgrammingError, 'reponame prefix of PATH_INFO'
   216         ):
   264         ):
   217             parse(
   265             parse(
   218                 DEFAULT_ENV,
   266                 DEFAULT_ENV,
   219                 reponame=b'repo',
   267                 reponame=b'repo',
   220                 extra={'PATH_INFO': '/repoextra/path',},
   268                 extra={
       
   269                     'PATH_INFO': '/repoextra/path',
       
   270                 },
   221             )
   271             )
   222 
   272 
   223         r = parse(
   273         r = parse(
   224             DEFAULT_ENV,
   274             DEFAULT_ENV,
   225             reponame=b'repo',
   275             reponame=b'repo',
   226             extra={'PATH_INFO': '/repo/path1/path2',},
   276             extra={
       
   277                 'PATH_INFO': '/repo/path1/path2',
       
   278             },
   227         )
   279         )
   228 
   280 
   229         self.assertEqual(r.url, b'http://testserver/repo/path1/path2')
   281         self.assertEqual(r.url, b'http://testserver/repo/path1/path2')
   230         self.assertEqual(r.baseurl, b'http://testserver')
   282         self.assertEqual(r.baseurl, b'http://testserver')
   231         self.assertEqual(r.advertisedurl, b'http://testserver/repo/path1/path2')
   283         self.assertEqual(r.advertisedurl, b'http://testserver/repo/path1/path2')
   236         self.assertEqual(r.reponame, b'repo')
   288         self.assertEqual(r.reponame, b'repo')
   237 
   289 
   238         r = parse(
   290         r = parse(
   239             DEFAULT_ENV,
   291             DEFAULT_ENV,
   240             reponame=b'prefix/repo',
   292             reponame=b'prefix/repo',
   241             extra={'PATH_INFO': '/prefix/repo/path1/path2',},
   293             extra={
       
   294                 'PATH_INFO': '/prefix/repo/path1/path2',
       
   295             },
   242         )
   296         )
   243 
   297 
   244         self.assertEqual(r.url, b'http://testserver/prefix/repo/path1/path2')
   298         self.assertEqual(r.url, b'http://testserver/prefix/repo/path1/path2')
   245         self.assertEqual(r.baseurl, b'http://testserver')
   299         self.assertEqual(r.baseurl, b'http://testserver')
   246         self.assertEqual(
   300         self.assertEqual(
   305 
   359 
   306         # With only PATH_INFO defined.
   360         # With only PATH_INFO defined.
   307         r = parse(
   361         r = parse(
   308             DEFAULT_ENV,
   362             DEFAULT_ENV,
   309             altbaseurl=b'http://altserver',
   363             altbaseurl=b'http://altserver',
   310             extra={'PATH_INFO': '/path1/path2',},
   364             extra={
       
   365                 'PATH_INFO': '/path1/path2',
       
   366             },
   311         )
   367         )
   312         self.assertEqual(r.url, b'http://testserver/path1/path2')
   368         self.assertEqual(r.url, b'http://testserver/path1/path2')
   313         self.assertEqual(r.baseurl, b'http://testserver')
   369         self.assertEqual(r.baseurl, b'http://testserver')
   314         self.assertEqual(r.advertisedurl, b'http://altserver/path1/path2')
   370         self.assertEqual(r.advertisedurl, b'http://altserver/path1/path2')
   315         self.assertEqual(r.advertisedbaseurl, b'http://altserver')
   371         self.assertEqual(r.advertisedbaseurl, b'http://altserver')
   345 
   401 
   346         # PATH_INFO + path on alt URL.
   402         # PATH_INFO + path on alt URL.
   347         r = parse(
   403         r = parse(
   348             DEFAULT_ENV,
   404             DEFAULT_ENV,
   349             altbaseurl=b'http://altserver/altpath',
   405             altbaseurl=b'http://altserver/altpath',
   350             extra={'PATH_INFO': '/path1/path2',},
   406             extra={
       
   407                 'PATH_INFO': '/path1/path2',
       
   408             },
   351         )
   409         )
   352         self.assertEqual(r.url, b'http://testserver/path1/path2')
   410         self.assertEqual(r.url, b'http://testserver/path1/path2')
   353         self.assertEqual(r.baseurl, b'http://testserver')
   411         self.assertEqual(r.baseurl, b'http://testserver')
   354         self.assertEqual(
   412         self.assertEqual(
   355             r.advertisedurl, b'http://altserver/altpath/path1/path2'
   413             r.advertisedurl, b'http://altserver/altpath/path1/path2'
   363 
   421 
   364         # PATH_INFO + path on alt URL with trailing slash.
   422         # PATH_INFO + path on alt URL with trailing slash.
   365         r = parse(
   423         r = parse(
   366             DEFAULT_ENV,
   424             DEFAULT_ENV,
   367             altbaseurl=b'http://altserver/altpath/',
   425             altbaseurl=b'http://altserver/altpath/',
   368             extra={'PATH_INFO': '/path1/path2',},
   426             extra={
       
   427                 'PATH_INFO': '/path1/path2',
       
   428             },
   369         )
   429         )
   370         self.assertEqual(r.url, b'http://testserver/path1/path2')
   430         self.assertEqual(r.url, b'http://testserver/path1/path2')
   371         self.assertEqual(r.baseurl, b'http://testserver')
   431         self.assertEqual(r.baseurl, b'http://testserver')
   372         self.assertEqual(
   432         self.assertEqual(
   373             r.advertisedurl, b'http://altserver/altpath//path1/path2'
   433             r.advertisedurl, b'http://altserver/altpath//path1/path2'
   381 
   441 
   382         # Local SCRIPT_NAME is ignored.
   442         # Local SCRIPT_NAME is ignored.
   383         r = parse(
   443         r = parse(
   384             DEFAULT_ENV,
   444             DEFAULT_ENV,
   385             altbaseurl=b'http://altserver',
   445             altbaseurl=b'http://altserver',
   386             extra={'SCRIPT_NAME': '/script', 'PATH_INFO': '/path1/path2',},
   446             extra={
       
   447                 'SCRIPT_NAME': '/script',
       
   448                 'PATH_INFO': '/path1/path2',
       
   449             },
   387         )
   450         )
   388         self.assertEqual(r.url, b'http://testserver/script/path1/path2')
   451         self.assertEqual(r.url, b'http://testserver/script/path1/path2')
   389         self.assertEqual(r.baseurl, b'http://testserver')
   452         self.assertEqual(r.baseurl, b'http://testserver')
   390         self.assertEqual(r.advertisedurl, b'http://altserver/path1/path2')
   453         self.assertEqual(r.advertisedurl, b'http://altserver/path1/path2')
   391         self.assertEqual(r.advertisedbaseurl, b'http://altserver')
   454         self.assertEqual(r.advertisedbaseurl, b'http://altserver')
   397 
   460 
   398         # Use remote's path for script name, app path
   461         # Use remote's path for script name, app path
   399         r = parse(
   462         r = parse(
   400             DEFAULT_ENV,
   463             DEFAULT_ENV,
   401             altbaseurl=b'http://altserver/altroot',
   464             altbaseurl=b'http://altserver/altroot',
   402             extra={'SCRIPT_NAME': '/script', 'PATH_INFO': '/path1/path2',},
   465             extra={
       
   466                 'SCRIPT_NAME': '/script',
       
   467                 'PATH_INFO': '/path1/path2',
       
   468             },
   403         )
   469         )
   404         self.assertEqual(r.url, b'http://testserver/script/path1/path2')
   470         self.assertEqual(r.url, b'http://testserver/script/path1/path2')
   405         self.assertEqual(r.baseurl, b'http://testserver')
   471         self.assertEqual(r.baseurl, b'http://testserver')
   406         self.assertEqual(
   472         self.assertEqual(
   407             r.advertisedurl, b'http://altserver/altroot/path1/path2'
   473             r.advertisedurl, b'http://altserver/altroot/path1/path2'
   416         # reponame is factored in properly.
   482         # reponame is factored in properly.
   417         r = parse(
   483         r = parse(
   418             DEFAULT_ENV,
   484             DEFAULT_ENV,
   419             reponame=b'repo',
   485             reponame=b'repo',
   420             altbaseurl=b'http://altserver/altroot',
   486             altbaseurl=b'http://altserver/altroot',
   421             extra={'SCRIPT_NAME': '/script', 'PATH_INFO': '/repo/path1/path2',},
   487             extra={
       
   488                 'SCRIPT_NAME': '/script',
       
   489                 'PATH_INFO': '/repo/path1/path2',
       
   490             },
   422         )
   491         )
   423 
   492 
   424         self.assertEqual(r.url, b'http://testserver/script/repo/path1/path2')
   493         self.assertEqual(r.url, b'http://testserver/script/repo/path1/path2')
   425         self.assertEqual(r.baseurl, b'http://testserver')
   494         self.assertEqual(r.baseurl, b'http://testserver')
   426         self.assertEqual(
   495         self.assertEqual(