Skip to content

Commit

Permalink
Measure coverage of forked processes
Browse files Browse the repository at this point in the history
  • Loading branch information
Unrud committed Sep 9, 2018
1 parent ae99584 commit e4ee569
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 15 deletions.
30 changes: 15 additions & 15 deletions radicale/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ def finish_request_locked(self, request, client_address):
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)

Expand Down Expand Up @@ -164,22 +165,21 @@ def server_bind(self):
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):
Expand Down
22 changes: 22 additions & 0 deletions radicale/tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,28 @@
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
Expand Down

0 comments on commit e4ee569

Please sign in to comment.