Changeset 1996
- Timestamp:
- 06/29/08 01:31:48
- Files:
-
- trunk/cherrypy/process/plugins.py (modified) (2 diffs)
- trunk/cherrypy/test/test_states.py (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/cherrypy/process/plugins.py
r1989 r1996 57 57 # Set default handlers 58 58 self.handlers = {'SIGTERM': self.bus.exit, 59 'SIGHUP': self. bus.restart,59 'SIGHUP': self.handle_SIGHUP, 60 60 'SIGUSR1': self.bus.graceful, 61 61 } … … 101 101 self.bus.log("Caught signal %s." % signame) 102 102 self.bus.publish(signame) 103 103 104 def handle_SIGHUP(self): 105 if os.isatty(sys.stdin.fileno()): 106 # not daemonized (may be foreground or background) 107 self.bus.log("SIGHUP caught but not daemonized. Exiting.") 108 self.bus.exit() 109 else: 110 self.bus.log("SIGHUP caught while daemonized. Restarting.") 111 self.bus.restart() 104 112 105 113 trunk/cherrypy/test/test_states.py
r1995 r1996 376 376 377 377 378 class DaemonizeTests(helper.CPWebCase):378 class PluginTests(helper.CPWebCase): 379 379 380 380 def test_daemonize(self): … … 386 386 return 387 387 388 # Start the demo script in a new process389 388 # Spawn the process and wait, when this returns, the original process 390 389 # is finished. If it daemonized properly, we should still be able … … 415 414 416 415 416 class SignalHandlingTests(helper.CPWebCase): 417 418 def test_SIGHUP_tty(self): 419 # When not daemonized, SIGHUP should shut down the server. 420 if not self.server_class: 421 print "skipped (no server) ", 422 return 423 424 try: 425 from signal import SIGHUP 426 except ImportError: 427 print "skipped (no SIGHUP) ", 428 return 429 430 # Spawn the process. 431 write_conf(scheme=self.scheme) 432 pid = spawn_cp(wait=False, daemonize=False) 433 # Send a SIGHUP 434 os.kill(pid, signal.SIGHUP) 435 # This might hang if things aren't working right, but meh. 436 wait(pid) 437 438 def test_SIGHUP_daemonized(self): 439 # When daemonized, SIGHUP should restart the server. 440 if not self.server_class: 441 print "skipped (no server) ", 442 return 443 444 try: 445 from signal import SIGHUP 446 except ImportError: 447 print "skipped (no SIGHUP) ", 448 return 449 450 if os.name not in ['posix']: 451 print "skipped (not on posix) ", 452 return 453 454 # Spawn the process and wait, when this returns, the original process 455 # is finished. If it daemonized properly, we should still be able 456 # to access pages. 457 write_conf(scheme=self.scheme) 458 exit_code = spawn_cp(wait=True, daemonize=True) 459 460 # Give the server some time to start up 461 time.sleep(2) 462 463 # Get the PID from the file. 464 pid = int(open(PID_file_path).read()) 465 try: 466 # Send a SIGHUP 467 os.kill(pid, signal.SIGHUP) 468 # Give the server some time to restart 469 time.sleep(2) 470 self.getPage("/pid") 471 self.assertStatus(200) 472 new_pid = int(self.body) 473 self.assertNotEqual(new_pid, pid) 474 finally: 475 # Shut down the spawned process 476 self.getPage("/exit") 477 wait(new_pid) 478 479 480 481 cases = [v for v in globals().values() 482 if isinstance(v, type) and issubclass(v, helper.CPWebCase)] 483 417 484 def run(server, conf): 418 485 helper.setConfig(conf) 419 ServerStateTests.server_class = server420 DaemonizeTests.server_class = server421 suite = helper.CPTestLoader.loadTestsFromTestCase(ServerStateTests)422 daemon_suite = helper.CPTestLoader.loadTestsFromTestCase(DaemonizeTests)486 for tc in cases: 487 tc.server_class = server 488 suites = [helper.CPTestLoader.loadTestsFromTestCase(tc) for tc in 489 (ServerStateTests, PluginTests, SignalHandlingTests)] 423 490 try: 424 491 try: 425 492 import pyconquer 426 493 except ImportError: 427 helper.CPTestRunner.run(suite)428 helper.CPTestRunner.run(daemon_suite)494 for suite in suites: 495 helper.CPTestRunner.run(suite) 429 496 else: 430 497 tr = pyconquer.Logger("cherrypy") … … 432 499 try: 433 500 tr.start() 434 helper.CPTestRunner.run(suite)435 helper.CPTestRunner.run(daemon_suite)501 for suite in suites: 502 helper.CPTestRunner.run(suite) 436 503 finally: 437 504 tr.stop() … … 449 516 450 517 if host: 451 DaemonizeTests.HOST = ServerStateTests.HOST = host 518 for tc in cases: 519 tc.HOST = host 452 520 453 521 if port: 454 DaemonizeTests.PORT = ServerStateTests.PORT = port 522 for tc in cases: 523 tc.PORT = port 455 524 456 525 if ssl: … … 459 528 conf['server.ssl_certificate'] = serverpem 460 529 conf['server.ssl_private_key'] = serverpem 461 DaemonizeTests.scheme = ServerStateTests.scheme = "https" 462 DaemonizeTests.HTTP_CONN = ServerStateTests.HTTP_CONN = httplib.HTTPSConnection 530 for tc in cases: 531 tc.scheme = "https" 532 tc.HTTP_CONN = httplib.HTTPSConnection 463 533 464 534 def _run(server):

