Beispiel #1
0
 def run_handler(self, headers):
     self.response = wsgi_apps._Response(None, False)
     self.response.headers.update(headers)
     kernels.run(
         self.handler(None, wsgi_apps.Response(self.response)),
         timeout=0.01,
     )
Beispiel #2
0
 def run_handler(self, method):
     self.set_request(REQUEST_METHOD=method)
     self.response = wsgi_apps._Response(None, False)
     self.calls.clear()
     kernels.run(
         self.handler(self.request, wsgi_apps.Response(self.response)),
         timeout=0.01,
     )
Beispiel #3
0
 def run_handler(self, path):
     self.set_request(PATH_INFO=path)
     self.response = wsgi_apps._Response(None, False)
     self.calls.clear()
     kernels.run(
         self.handler(self.request, wsgi_apps.Response(self.response)),
         timeout=0.01,
     )
Beispiel #4
0
 def run_handler(self):
     self.response = wsgi_apps._Response(unittest.mock.Mock(), True)
     kernels.run(
         self.handler(self.request, wsgi_apps.Response(self.response)),
         timeout=0.01,
     )
     self.response.close()
     if self.response.file is not None:
         self.response.file.close()
Beispiel #5
0
    def test_router(self):
        self.handler = composers.PathPatternRouter([
            (r'/a/p', self.make_noop_handler('/a/p')),
            (r'/a/q', self.make_noop_handler('/a/q')),
            (r'/a', self.make_noop_handler('/a')),
        ])
        self.set_request()
        self.assertEqual(self.request.context.asdict(), {})
        self.assertIsNone(composers.group(self.request))
        self.assertIsNone(self.request.context.get(composers.PATH_MATCH))
        self.assertEqual(composers.get_path_str(self.request), '/foo/bar')

        self.run_handler('/a/p/x')
        self.assertEqual(self.calls, ['/a/p'])
        self.assert_context_keys([composers.PATH_MATCH])
        self.assertEqual(composers.get_path_str(self.request), '/x')
        self.assert_response(consts.Statuses.OK, {})

        self.run_handler('/a/q')
        self.assertEqual(self.calls, ['/a/q'])
        self.assert_context_keys([composers.PATH_MATCH])
        self.assertEqual(composers.get_path_str(self.request), '')
        self.assert_response(consts.Statuses.OK, {})

        self.run_handler('/a/q/')
        self.assertEqual(self.calls, ['/a/q'])
        self.assert_context_keys([composers.PATH_MATCH])
        self.assertEqual(composers.get_path_str(self.request), '/')
        self.assert_response(consts.Statuses.OK, {})

        self.run_handler('/a/r/foo/bar')
        self.assertEqual(self.calls, ['/a'])
        self.assert_context_keys([composers.PATH_MATCH])
        self.assertEqual(composers.get_path_str(self.request), '/r/foo/bar')
        self.assert_response(consts.Statuses.OK, {})

        with self.assertRaisesRegex(
                wsgi_apps.HttpError,
                r'path does not match any pattern: /foo/bar',
        ) as cm:
            self.run_handler('/foo/bar')
        self.assertEqual(self.calls, [])
        self.assert_http_error(cm.exception, consts.Statuses.NOT_FOUND, {})

        # You cannot override a PATH_MATCH entry in context.
        self.run_handler('/a/p/x')
        self.assertIn(composers.PATH_MATCH, self.request.context.asdict())
        with self.assertRaisesRegex(AssertionError, r'expect.*not in'):
            kernels.run(
                self.handler(self.request, wsgi_apps.Response(self.response)),
                timeout=0.01,
            )
Beispiel #6
0
 def make_response(etag):
     response = wsgi_apps.Response(wsgi_apps._Response(None, False))
     response.headers[consts.HEADER_ETAG] = etag
     return response