| 92 | | # Write the .py file to import testmod and run setup_server |
|---|
| 93 | | # Import it immediately so we get a .pyc file. |
|---|
| 94 | | f = open(os.path.join(curdir, 'fastcgi.py'), 'wb') |
|---|
| 95 | | try: |
|---|
| 96 | | f.write("""import cherrypy |
|---|
| 97 | | from cherrypy.process import plugins, servers |
|---|
| 98 | | from cherrypy.test import %s |
|---|
| 99 | | |
|---|
| 100 | | if hasattr(%s, 'setup_server'): |
|---|
| 101 | | %s.setup_server() |
|---|
| 102 | | |
|---|
| 103 | | def run(): |
|---|
| 104 | | cherrypy.config.update(%r) |
|---|
| 105 | | |
|---|
| 106 | | engine = cherrypy.engine |
|---|
| 107 | | cherrypy.config.update({'environment': 'test_suite'}) |
|---|
| 108 | | |
|---|
| 109 | | if hasattr(engine, "signal_handler"): |
|---|
| 110 | | engine.signal_handler.subscribe() |
|---|
| 111 | | if hasattr(engine, "console_control_handler"): |
|---|
| 112 | | engine.console_control_handler.subscribe() |
|---|
| 113 | | |
|---|
| 114 | | # Turn off autoreload when using fastcgi. |
|---|
| 115 | | cherrypy.config.update({'engine.autoreload_on': False}) |
|---|
| 116 | | cherrypy.server.unsubscribe() |
|---|
| 117 | | bindAddress = ('127.0.0.1', 4000) |
|---|
| 118 | | f = servers.FlupFCGIServer(application=cherrypy.tree, bindAddress=bindAddress) |
|---|
| 119 | | s = servers.ServerAdapter(engine, httpserver=f, bind_addr=bindAddress) |
|---|
| 120 | | s.subscribe() |
|---|
| 121 | | |
|---|
| 122 | | # Always start the engine; this will start all other services |
|---|
| 123 | | try: |
|---|
| 124 | | engine.start() |
|---|
| 125 | | except: |
|---|
| 126 | | # Assume the error has been logged already via bus.log. |
|---|
| 127 | | sys.exit(1) |
|---|
| 128 | | else: |
|---|
| 129 | | engine.block() |
|---|
| 130 | | |
|---|
| 131 | | if __name__ == '__main__': |
|---|
| 132 | | run() |
|---|
| 133 | | """ % (testmod, testmod, testmod, os.path.join(curdir, 'test.conf'))) |
|---|
| 134 | | finally: |
|---|
| 135 | | f.close() |
|---|
| 136 | | from cherrypy.test import fastcgi |
|---|
| 137 | | reload(fastcgi) |
|---|
| 138 | | |
|---|
| 152 | | from cherrypy.test import webtest |
|---|
| 153 | | webtest.WebCase.PORT = self.port |
|---|
| 154 | | webtest.WebCase.harness = self |
|---|
| 155 | | webtest.WebCase.scheme = "http" |
|---|
| 156 | | webtest.WebCase.interactive = self.interactive |
|---|
| 157 | | print |
|---|
| 158 | | print "Running tests:", self.server |
|---|
| 159 | | |
|---|
| 160 | | conf_template = conf_fcgid |
|---|
| 161 | | |
|---|
| 162 | | # Since cherryd is run by the Apache process, Apache must be |
|---|
| 163 | | # started separately for each test. |
|---|
| 164 | | success = True |
|---|
| 165 | | for testmod in self.tests: |
|---|
| 166 | | try: |
|---|
| 167 | | start(testmod, self.host, self.port, conf_template) |
|---|
| 168 | | suite = webtest.ReloadingTestLoader().loadTestsFromName(testmod) |
|---|
| 169 | | result = webtest.TerseTestRunner(verbosity=2).run(suite) |
|---|
| 170 | | success &= result.wasSuccessful() |
|---|
| 171 | | finally: |
|---|
| 172 | | stop() |
|---|
| 173 | | if success: |
|---|
| 174 | | return 0 |
|---|
| 175 | | else: |
|---|
| 176 | | return 1 |
|---|
| | 107 | cherrypy.server.httpserver = servers.FlupFCGIServer( |
|---|
| | 108 | application=cherrypy.tree, bindAddress=('127.0.0.1', 4000)) |
|---|
| | 109 | cherrypy.server.httpserver.bind_addr = ('127.0.0.1', 4000) |
|---|
| | 110 | try: |
|---|
| | 111 | start_apache(self.host, self.port, conf_fcgid) |
|---|
| | 112 | return test.TestHarness._run(self, conf) |
|---|
| | 113 | finally: |
|---|
| | 114 | stop() |
|---|