devtools/httptest.py
changeset 11015 baf463175505
parent 11014 9c9f5e913f9c
equal deleted inserted replaced
11014:9c9f5e913f9c 11015:baf463175505
    60         finally:
    60         finally:
    61             s.close()
    61             s.close()
    62     raise RuntimeError('get_available_port([ports_range]) cannot find an available port')
    62     raise RuntimeError('get_available_port([ports_range]) cannot find an available port')
    63 
    63 
    64 
    64 
    65 class CubicWebServerConfig(ApptestConfiguration):
    65 class CubicWebServerTC(CubicWebTC):
    66     """basic configuration class for configuring test server
    66     """Class for running a Twisted-based test web server.
    67 
       
    68     Class attributes:
       
    69 
       
    70     * `ports_range`: list giving range of http ports to test (range(7000, 8000)
       
    71       by default). The first port found as available in `ports_range` will be
       
    72       used to launch the test web server.
       
    73 
       
    74     """
    67     """
    75     ports_range = range(7000, 8000)
    68     ports_range = range(7000, 8000)
    76 
       
    77     def default_base_url(self):
       
    78         port = self['port'] or get_available_port(self.ports_range)
       
    79         self.global_set_option('port', port) # force rewrite here
       
    80         return 'http://127.0.0.1:%d/' % self['port']
       
    81 
       
    82 
       
    83 
       
    84 class CubicWebServerTC(CubicWebTC):
       
    85     """Class for running test web server. See :class:`CubicWebServerConfig`.
       
    86     """
       
    87     configcls = CubicWebServerConfig
       
    88 
    69 
    89     def start_server(self):
    70     def start_server(self):
    90         from twisted.internet import reactor
    71         from twisted.internet import reactor
    91         from cubicweb.etwist.server import run
    72         from cubicweb.etwist.server import run
    92         # use a semaphore to avoid starting test while the http server isn't
    73         # use a semaphore to avoid starting test while the http server isn't
   170     def web_get(self, path='', body=None, headers=None):
   151     def web_get(self, path='', body=None, headers=None):
   171         return self.web_request(path=path, body=body, headers=headers)
   152         return self.web_request(path=path, body=body, headers=headers)
   172 
   153 
   173     def setUp(self):
   154     def setUp(self):
   174         super(CubicWebServerTC, self).setUp()
   155         super(CubicWebServerTC, self).setUp()
       
   156         port = self.config['port'] or get_available_port(self.ports_range)
       
   157         self.config.global_set_option('port', port) # force rewrite here
       
   158         self.config.global_set_option('base-url', 'http://127.0.0.1:%d/' % port)
       
   159         # call load_configuration again to let the config reset its datadir_url
       
   160         self.config.load_configuration()
   175         self.start_server()
   161         self.start_server()
   176 
   162 
   177     def tearDown(self):
   163     def tearDown(self):
   178         from twisted.internet import error
   164         from twisted.internet import error
   179         try:
   165         try: