Measure coverage of forked processes

This commit is contained in:
Unrud 2018-09-09 07:28:36 +02:00
parent ae99584a7b
commit e4ee569bd2
2 changed files with 37 additions and 15 deletions

View File

@ -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):

View File

@ -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