(self)
| 324 | self.assertTrue(has_ssl) |
| 325 | |
| 326 | def test_keepalive_disconnect(self): |
| 327 | class RequestHandler(http.server.BaseHTTPRequestHandler): |
| 328 | protocol_version = "HTTP/1.1" |
| 329 | handled = False |
| 330 | |
| 331 | def do_POST(self): |
| 332 | length = int(self.headers.get("Content-Length")) |
| 333 | self.rfile.read(length) |
| 334 | if self.handled: |
| 335 | self.close_connection = True |
| 336 | return |
| 337 | response = xmlrpclib.dumps((5,), methodresponse=True) |
| 338 | response = response.encode() |
| 339 | self.send_response(http.HTTPStatus.OK) |
| 340 | self.send_header("Content-Length", len(response)) |
| 341 | self.end_headers() |
| 342 | self.wfile.write(response) |
| 343 | self.handled = True |
| 344 | self.close_connection = False |
| 345 | |
| 346 | def log_message(self, format, *args): |
| 347 | # don't clobber sys.stderr |
| 348 | pass |
| 349 | |
| 350 | def run_server(): |
| 351 | server.socket.settimeout(float(1)) # Don't hang if client fails |
| 352 | server.handle_request() # First request and attempt at second |
| 353 | server.handle_request() # Retried second request |
| 354 | |
| 355 | server = http.server.HTTPServer((socket_helper.HOST, 0), RequestHandler) |
| 356 | self.addCleanup(server.server_close) |
| 357 | thread = threading.Thread(target=run_server) |
| 358 | thread.start() |
| 359 | self.addCleanup(thread.join) |
| 360 | url = "http://{}:{}/".format(*server.server_address) |
| 361 | with xmlrpclib.ServerProxy(url) as p: |
| 362 | self.assertEqual(p.method(), 5) |
| 363 | self.assertEqual(p.method(), 5) |
| 364 | |
| 365 | |
| 366 | class SimpleXMLRPCDispatcherTestCase(unittest.TestCase): |
nothing calls this directly
no test coverage detected