def test_http_request_full_timeout_after_first_receive(self): """ The client disconnects after the timeout even if some data has already been received. """ clock = Clock() request_started = self.set_async_render() client_done = self.with_agent( http_request_full, self.url, '', timeout=30, reactor=clock) request = yield request_started request_done = request.notifyFinish() request.write("some data") clock.advance(1) yield wait0() self.assertNoResult(client_done) self.assertNoResult(request_done) clock.advance(28) self.assertNoResult(client_done) self.assertNoResult(request_done) clock.advance(1) failure = self.failureResultOf(client_done, HttpTimeoutError) self.assertEqual( failure.getErrorMessage(), "Timeout while receiving data") yield self.assertFailure(request_done, ConnectionDone)
def test_http_request_full_timeout_after_first_receive(self): """ The client disconnects after the timeout even if some data has already been received. """ clock = Clock() request_started = self.set_async_render() client_done = self.with_agent(http_request_full, self.url, '', timeout=30, reactor=clock) request = yield request_started request_done = request.notifyFinish() request.write("some data") clock.advance(1) yield wait0() self.assertNoResult(client_done) self.assertNoResult(request_done) clock.advance(28) self.assertNoResult(client_done) self.assertNoResult(request_done) clock.advance(1) failure = self.failureResultOf(client_done, HttpTimeoutError) self.assertEqual(failure.getErrorMessage(), "Timeout while receiving data") yield self.assertFailure(request_done, ConnectionDone)
def test_async_response(self): """ FakeHttpServer supports asynchronous responses. """ requests = [] fake_http = FakeHttpServer( lambda req: requests.append(req) or NOT_DONE_YET) response1_d = fake_http.get_agent().request( "GET", "http://example.com/hello/1") response2_d = fake_http.get_agent().request( "HEAD", "http://example.com/hello/2") # Wait for the requests to arrive. yield wait0() [request1, request2] = requests self.assertNoResult(response1_d) self.assertNoResult(response2_d) self.assertEqual(request1.method, "GET") self.assertEqual(request1.path, "http://example.com/hello/1") self.assertEqual(request2.method, "HEAD") self.assertEqual(request2.path, "http://example.com/hello/2") # Send a response to the second request. request2.finish() response2 = yield response2_d self.assertNoResult(response1_d) yield self.assert_response(response2, 200, "") # Send a response to the first request. request1.write("Thank you for waiting.") request1.finish() response1 = yield response1_d yield self.assert_response(response1, 200, "Thank you for waiting.")
def test_server_abort(self): """ If the server aborts, the client's connection is also lost. """ fake_server = FakeServer(self.server_factory) conn, client = self.connect_client(fake_server) finished_d = conn.await_finished() self.assertNoResult(finished_d) # The disconnection gets scheduled, but doesn't actually happen until # the next reactor tick. conn.server_protocol.transport.abortConnection() self.assert_connected(conn, client) self.assertNoResult(finished_d) # Allow the reactor to run so the disconnection gets processed. yield wait0() self.assert_disconnected(conn, server_reason=ConnectionAborted) self.successResultOf(finished_d)
def send(self, command): self.transport.write(str(command)) self.transport.write(self.delimiter) return wait0()