Source code for cherrypy.test.test_refleaks

"""Tests for refleaks."""

import itertools
import platform
import threading
from http.client import HTTPConnection

import cherrypy
from cherrypy._cpcompat import HTTPSConnection
from cherrypy.test import helper


data = object()


[docs]class ReferenceTests(helper.CPWebCase):
[docs] @staticmethod def setup_server(): class Root: @cherrypy.expose def index(self, *args, **kwargs): cherrypy.request.thing = data return 'Hello world!' cherrypy.tree.mount(Root())
[docs] def test_threadlocal_garbage(self): if platform.system() == 'Darwin': self.skip('queue issues; see #1474') success = itertools.count() def getpage(): host = '%s:%s' % (self.interface(), self.PORT) if self.scheme == 'https': c = HTTPSConnection(host) else: c = HTTPConnection(host) try: c.putrequest('GET', '/') c.endheaders() response = c.getresponse() body = response.read() self.assertEqual(response.status, 200) self.assertEqual(body, b'Hello world!') finally: c.close() next(success) ITERATIONS = 25 ts = [ threading.Thread(target=getpage) for _ in range(ITERATIONS) ] for t in ts: t.start() for t in ts: t.join() self.assertEqual(next(success), ITERATIONS)