Measure coverage of forked processes
This commit is contained in:
		| @@ -133,6 +133,7 @@ class ParallelHTTPServer(ParallelizationMixIn, | |||||||
|         return super().finish_request(request, client_address) |         return super().finish_request(request, client_address) | ||||||
|  |  | ||||||
|     def finish_request(self, request, client_address): |     def finish_request(self, request, client_address): | ||||||
|  |         """Don't overwrite this! (Modified by tests.)""" | ||||||
|         with self.connections_guard: |         with self.connections_guard: | ||||||
|             return self.finish_request_locked(request, client_address) |             return self.finish_request_locked(request, client_address) | ||||||
|  |  | ||||||
| @@ -164,22 +165,21 @@ class ParallelHTTPSServer(ParallelHTTPServer): | |||||||
|             ssl_version=self.protocol, ciphers=self.ciphers, |             ssl_version=self.protocol, ciphers=self.ciphers, | ||||||
|             do_handshake_on_connect=False) |             do_handshake_on_connect=False) | ||||||
|  |  | ||||||
|     def finish_request(self, request, client_address): |     def finish_request_locked(self, request, client_address): | ||||||
|         with self.connections_guard: |         try: | ||||||
|             try: |             try: | ||||||
|                 try: |                 request.do_handshake() | ||||||
|                     request.do_handshake() |             except socket.timeout: | ||||||
|                 except socket.timeout: |                 raise | ||||||
|                     raise |             except Exception as e: | ||||||
|                 except Exception as e: |                 raise RuntimeError("SSL handshake failed: %s" % e) from e | ||||||
|                     raise RuntimeError("SSL handshake failed: %s" % e) from e |         except Exception: | ||||||
|             except Exception: |             try: | ||||||
|                 try: |                 self.handle_error(request, client_address) | ||||||
|                     self.handle_error(request, client_address) |             finally: | ||||||
|                 finally: |                 self.shutdown_request(request) | ||||||
|                     self.shutdown_request(request) |             return | ||||||
|                 return |         return super().finish_request_locked(request, client_address) | ||||||
|             return super().finish_request_locked(request, client_address) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class ServerHandler(wsgiref.simple_server.ServerHandler): | class ServerHandler(wsgiref.simple_server.ServerHandler): | ||||||
|   | |||||||
| @@ -26,6 +26,28 @@ import radicale | |||||||
| import sys | import sys | ||||||
| from io import BytesIO | from io import BytesIO | ||||||
|  |  | ||||||
|  | from pytest_cov import embed | ||||||
|  |  | ||||||
|  | from radicale import server | ||||||
|  |  | ||||||
|  | # Measure coverage of forked processes | ||||||
|  | finish_request = server.ParallelHTTPServer.finish_request | ||||||
|  | pid = os.getpid() | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def finish_request_cov(self, request, client_address): | ||||||
|  |     cov = None | ||||||
|  |     if pid != os.getpid(): | ||||||
|  |         cov = embed.init() | ||||||
|  |     try: | ||||||
|  |         return finish_request(self, request, client_address) | ||||||
|  |     finally: | ||||||
|  |         if cov: | ||||||
|  |             embed.cleanup(cov) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | server.ParallelHTTPServer.finish_request = finish_request_cov | ||||||
|  |  | ||||||
| # Allow importing of tests.custom.... | # Allow importing of tests.custom.... | ||||||
| sys.path.insert(0, os.path.dirname(os.path.dirname(__file__))) | sys.path.insert(0, os.path.dirname(os.path.dirname(__file__))) | ||||||
| # Enable debug output | # Enable debug output | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Unrud
					Unrud