def test_transport_handles_roundtrip(make_transport): transport = make_transport(state=1, content="socket.send(socket.recv())") request = Request('POST', '/echo.sock', body=StringIO(b"3::/echo.sock:ping")) transport.respond(request) transport.socket.tick() # do it manually request = Request('GET', '/echo.sock') response = transport.respond(request) expected = FFFD + b"18" + FFFD + b"3::/echo.sock:ping" actual = response.body.next() assert actual == expected
def serve_request(self, path): """Given an URL path, return response. """ request = Request(uri=path) request.website = self response = self.handle_safely(request) return response
def test_intercept_socket_intercepts_transported(): request = Request(uri="/foo.sock/1/websocket/46327hfjew3?foo=bar") gauntlet.intercept_socket(request) expected = ('/foo.sock', '1/websocket/46327hfjew3') actual = (request.line.uri.path.decoded, request.socket) assert actual == expected, actual
def test_intercept_socket_intercepts_handshake(): request = Request(uri="/foo.sock/1") gauntlet.intercept_socket(request) expected = ('/foo.sock', '1') actual = (request.line.uri.path.decoded, request.socket) assert actual == expected, actual
def test_transport_can_minimally_respond(make_transport): transport = make_transport() request = Request() expected = Response actual = transport.respond(request).__class__ assert actual is expected
def test_transport_starts_in_state_0(make_transport): transport = make_transport() request = Request() expected = 0 actual = transport.state assert actual == expected
def make_transport(content='', state=0): mk(('echo.sock.spt', content)) socket = make_socket() transport = XHRPollingTransport(socket) transport.timeout = 0.05 # for testing, could screw up the test if state == 1: transport.respond(Request(uri='/echo.sock')) return transport
def test_transport_goes_to_state_1_after_first_request(make_transport): transport = make_transport() request = Request() transport.respond(request) expected = 1 actual = transport.state assert actual == expected
def test_transport_POST_gives_data_to_socket(make_transport): transport = make_transport(state=1) request = Request('POST', '/echo.sock', body=StringIO(b'3::/echo.sock:Greetings, program!')) transport.respond(request) expected = deque(['Greetings, program!']) actual = transport.socket.incoming.queue assert actual == expected
def test_transport_GET_gets_data_from_socket(make_transport): transport = make_transport(state=1) message = Message.from_bytes(b"3:::Greetings, program!") transport.socket.outgoing.put(message) request = Request('GET') response = transport.respond(request) expected = FFFD + b'23' + FFFD + b'3:::Greetings, program!' actual = response.body.next() assert actual == expected
def load_simplate(self, path, request=None, return_request_too=False): """Given an URL path, return a simplate (Resource) object. """ if request is None: request = Request(uri=path) if not hasattr(request, 'website'): request.website = self self.do_inbound(request) resource = resources.get(request) if return_request_too: return resource, request else: return resource
def test_raw_is_raw(): request = Request() expected = b"GET / HTTP/1.1\r\nHost: localhost\r\n\r\n" actual = request assert actual == expected
def test_extract_path_params_complex(): request = Request(uri="/foo;a=1;b=2,3;c;a=2;b=4/bar;a=2,ab;b=1") actual = _extract_params(request.line.uri) expected = (['foo', 'bar'], [{'a':['1','2'], 'b':['2,3', '4'], 'c':['']}, {'a':[ '2,ab' ], 'b':['1']}]) assert actual == expected
def test_path_params_api(): request = Request(uri="/foo;a=1;b=2;b=3;c/bar;a=2,ab;b=1") parts, params = (['foo', 'bar'], [{'a':['1'], 'b':['2', '3'], 'c':['']}, {'a':[ '2,ab' ], 'b':['1']}]) assert request.line.uri.path.parts == parts, request.line.uri.path.parts assert request.line.uri.path.parts[0].params == params[0] assert request.line.uri.path.parts[1].params == params[1]
def test_intercept_socket_protects_direct_access(): request = Request(uri="/foo.sock") assert_raises(Response, gauntlet.intercept_socket, request)
def get_simplate_context(website, fs): request = Request() request.fs = fs request.website = website resource = resources.get(request) return {} if isinstance(resource, StaticResource) else resource.pages[0]
def test_sockets_get_nonsock_returns_None(): request = Request() request.socket = None expected = None actual = sockets.get(request) assert actual is expected, actual
def test_intercept_socket_intercepts_transported(): request = Request(uri="/foo.sock/1/websocket/46327hfjew3?foo=bar") actual = dispatcher.extract_socket_info(request.line.uri.path.decoded) expected = ('/foo.sock', '1/websocket/46327hfjew3') assert actual == expected
def test_extract_path_params_simple(): request = Request(uri="/foo;a=1;b=2;c/bar;a=2;b=1") actual = _extract_params(request.line.uri) expected = (['foo', 'bar'], [{'a':['1'], 'b':['2'], 'c':['']}, {'a':['2'], 'b':['1']}]) assert actual == expected
def test_disallows_a_bunch_of_other_stuff(self): for disallowed in ('OPTIONS', 'TRACE', 'TRACK', 'PUT', 'DELETE'): request = Request(disallowed) response = raises(Response, security.only_allow_certain_methods, request).value assert response.code == 405
def test_request_redirect_works_on_instance(): request = Request() actual = raises(Response, request.redirect, '/').value.code assert actual == 302
def test_blank_by_default(): assert_raises(AttributeError, lambda: Request().version)
def test_intercept_socket_protects_direct_access(): request = Request(uri="/foo.sock") raises(Response, dispatcher.dispatch, request)
def test_allows_certain_methods(self): for allowed in ('GEt', 'HEaD', 'PosT'): request = Request(allowed) assert security.only_allow_certain_methods(request) is None
def test_intercept_socket_intercepts_handshake(): request = Request(uri="/foo.sock/1") actual = dispatcher.extract_socket_info(request.line.uri.path.decoded) expected = ('/foo.sock', '1') assert actual == expected
def make_request(filename='echo.sock'): request = Request(uri='/echo.sock') request.website = Website([]) request.fs = fix(filename) return request
def test_extract_path_params_with_none(): request = Request(uri="/foo/bar") actual = _extract_params(request.line.uri) expected = (['foo', 'bar'], [{}, {}]) assert actual == expected