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)
def finish_request(self, request, client_address):
"""Don't overwrite this! (Modified by tests.)"""
with self.connections_guard:
return self.finish_request_locked(request, client_address)
@ -164,22 +165,21 @@ class ParallelHTTPSServer(ParallelHTTPServer):
ssl_version=self.protocol, ciphers=self.ciphers,
do_handshake_on_connect=False)
def finish_request(self, request, client_address):
with self.connections_guard:
def finish_request_locked(self, request, client_address):
try:
try:
try:
request.do_handshake()
except socket.timeout:
raise
except Exception as e:
raise RuntimeError("SSL handshake failed: %s" % e) from e
except Exception:
try:
self.handle_error(request, client_address)
finally:
self.shutdown_request(request)
return
return super().finish_request_locked(request, client_address)
request.do_handshake()
except socket.timeout:
raise
except Exception as e:
raise RuntimeError("SSL handshake failed: %s" % e) from e
except Exception:
try:
self.handle_error(request, client_address)
finally:
self.shutdown_request(request)
return
return super().finish_request_locked(request, client_address)
class ServerHandler(wsgiref.simple_server.ServerHandler):

View File

@ -26,6 +26,28 @@ import radicale
import sys
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....
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
# Enable debug output