Source

CherryPy / test / test_http.py

The branch 'cherrypy' does not exist.
Robert Brewer 20579f3 



Robert Brewer 17be3be 
Robert Brewer 20579f3 




Robert Brewer e08d122 
Robert Brewer 20579f3 
Robert Brewer e08d122 
Robert Brewer 20579f3 
Robert Brewer c0015bc 
Robert Brewer 20579f3 

Robert Brewer e08d122 

Robert Brewer 2d99f70 


Robert Brewer 17be3be 
Robert Brewer 2d99f70 
Robert Brewer 17be3be 

Robert Brewer e260174 
Robert Brewer 17be3be 

Robert Brewer 2d99f70 


Robert Brewer c0015bc 

Robert Brewer 2d99f70 

Robert Brewer 17be3be 
Robert Brewer 2d99f70 
Robert Brewer 17be3be 
Robert Brewer 8cd1230 


Robert Brewer 17be3be 


Robert Brewer 20579f3 





Robert Brewer 2d99f70 





Robert Brewer e08d122 









Robert Brewer 2d99f70 
Robert Brewer e08d122 






Robert Brewer 2d99f70 

Robert Brewer e08d122 

Robert Brewer 20579f3 
Robert Brewer 17be3be 
"""Tests for managing HTTP issues (malformed requests, etc).

Some of these tests check timeouts, etcetera, and therefore take a long
time to run. Therefore, this module should probably not be included in
the 'comprehensive' test suite (test.py).
"""

import test
test.prefer_parent_path()

import gc
import httplib
import threading
import cherrypy
from cherrypy import _cprequest


data = object()

def get_instances(cls):
    return [x for x in gc.get_objects() if isinstance(x, cls)]

def setup_server():
    
    class Root:
        def index(self, *args, **kwargs):
            cherrypy.request.thing = data
            return "Hello world!"
        index.exposed = True
        
        def gc_stats(self):
            return "%s %s %s %s" % (gc.collect(),
                                    len(get_instances(_cprequest.Request)),
                                    len(get_instances(_cprequest.Response)),
                                    len(gc.get_referrers(data)))
        gc_stats.exposed = True
    cherrypy.tree.mount(Root())
    
    cherrypy.config.update({
        'global': {'log_to_screen': False,
                   'environment': 'production',
                   'show_tracebacks': True,
                   },
    })


import helper

class HTTPTests(helper.CPWebCase):
    
    def test_sockets(self):
        # By not including a Content-Length header, cgi.FieldStorage
        # will hang. Verify that CP times out the socket and responds
        # with 411 Length Required.
        c = httplib.HTTPConnection("localhost:%s" % self.PORT)
        c.request("POST", "/")
        self.assertEqual(c.getresponse().status, 411)


class ReferenceTests(helper.CPWebCase):
    
    def test_threadlocal_garbage(self):
        def getpage():
            self.getPage('/')
            self.assertBody("Hello world!")
        
        ts = []
        for _ in range(25):
            t = threading.Thread(target=getpage)
            ts.append(t)
            t.start()
        
        for t in ts:
            t.join()
        
        self.getPage("/gc_stats")
        self.assertBody("0 1 1 1")


if __name__ == '__main__':
    setup_server()
    helper.testmain()