def test_client_did_not_complete(self): client = Client() with warnings.catch_warnings(record=True) as warn_list: warnings.simplefilter("always") with client.session() as session: request = Request(self.get_url('/')) yield From(session.fetch(request)) self.assertFalse(session.done()) for warn_obj in warn_list: print(warn_obj) # Unrelated warnings may occur in PyPy # https://travis-ci.org/chfoo/wpull/jobs/51420202 self.assertGreaterEqual(len(warn_list), 1) for warn_obj in warn_list: if str(warn_obj.message) == 'HTTP session did not complete.': break else: self.fail('Warning did not occur.') client = Client() with self.assertRaises(MyException): with client.session() as session: request = Request(self.get_url('/')) yield From(session.fetch(request)) raise MyException('Oops')
def test_basic_requests(self): proxy_http_client = Client(recorder=DebugPrintRecorder()) proxy_server = HTTPProxyServer(proxy_http_client) proxy_socket, proxy_port = tornado.testing.bind_unused_port() yield From(trollius.start_server(proxy_server, sock=proxy_socket)) connection_pool = HTTPProxyConnectionPool(('127.0.0.1', proxy_port)) http_client = Client(connection_pool=connection_pool, recorder=DebugPrintRecorder()) for dummy in range(3): with http_client.session() as session: response = yield From(session.fetch(Request(self.get_url('/')))) self.assertEqual(200, response.status_code) file = io.BytesIO() yield From(session.read_content(file=file)) data = file.getvalue().decode('ascii', 'replace') self.assertTrue(data.endswith('</html>')) with http_client.session() as session: response = yield From(session.fetch(Request( self.get_url('/always_error')))) self.assertEqual(500, response.status_code) self.assertEqual('Dragon In Data Center', response.reason) file = io.BytesIO() yield From(session.read_content(file=file)) data = file.getvalue().decode('ascii', 'replace') self.assertEqual('Error', data)
def test_client_duration_timeout(self): client = Client() with self.assertRaises(DurationTimeout), client.session() as session: request = Request(self.get_url('/sleep_long')) yield From(session.fetch(request)) yield From(session.read_content(duration_timeout=0.1))
def test_client_exception_throw(self): client = Client() with client.session() as session: request = Request('http://wpull-no-exist.invalid') with self.assertRaises(NetworkError): yield From(session.fetch(request))
def test_client_exception_recovery(self): connection_factory = functools.partial(Connection, timeout=2.0) connection_pool = ConnectionPool(connection_factory=connection_factory) client = Client(connection_pool=connection_pool) for dummy in range(7): with client.session() as session: request = Request(self.get_url('/header_early_close')) try: yield From(session.fetch(request)) except NetworkError: pass else: self.fail() # pragma: no cover for dummy in range(7): with client.session() as session: request = Request(self.get_url('/')) response = yield From(session.fetch(request)) self.assertEqual(200, response.status_code) yield From(session.read_content()) self.assertTrue(session.done())
def test_client_recorder(self): recorder = MockRecorder() client = Client(recorder=recorder) with client.session() as session: request = Request(self.get_url('/')) response = yield From(session.fetch(request)) yield From(session.read_content()) self.assertEqual(200, response.status_code) self.assertTrue(recorder.pre_request) self.assertTrue(recorder.request) self.assertTrue(recorder.pre_response) self.assertTrue(recorder.response) self.assertIn(b'GET', recorder.request_data) self.assertIn(b'hello', recorder.response_data)
def test_basic(self): client = Client() with client.session() as session: request = Request(self.get_url('/')) response = yield From(session.fetch(request)) self.assertEqual(200, response.status_code) self.assertEqual(request, response.request) file_obj = io.BytesIO() yield From(session.read_content(file_obj)) self.assertEqual(b'hello world!', file_obj.getvalue()) self.assertTrue(request.url_info) self.assertTrue(request.address) self.assertTrue(response.body)