|  | @@ -31,6 +31,7 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import argparse
 | 
	
		
			
				|  |  |  import logging
 | 
	
		
			
				|  |  | +import sys
 | 
	
		
			
				|  |  |  import twisted
 | 
	
		
			
				|  |  |  import twisted.internet
 | 
	
		
			
				|  |  |  import twisted.internet.endpoints
 | 
	
	
		
			
				|  | @@ -55,7 +56,7 @@ _TEST_CASE_MAPPING = {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class H2Factory(twisted.internet.protocol.Factory):
 | 
	
		
			
				|  |  |    def __init__(self, testcase):
 | 
	
		
			
				|  |  | -    logging.info('Creating H2Factory for new connection.')
 | 
	
		
			
				|  |  | +    logging.info('Creating H2Factory for new connection (%s)', testcase)
 | 
	
		
			
				|  |  |      self._num_streams = 0
 | 
	
		
			
				|  |  |      self._testcase = testcase
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -83,6 +84,19 @@ def parse_arguments():
 | 
	
		
			
				|  |  |      )
 | 
	
		
			
				|  |  |    return parser.parse_args()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +exit_code = 0
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +def listen(endpoint, test_case):
 | 
	
		
			
				|  |  | +  deferred = endpoint.listen(H2Factory(test_case))
 | 
	
		
			
				|  |  | +  def listen_error(reason):
 | 
	
		
			
				|  |  | +    # If listening fails, we stop the reactor and exit the program
 | 
	
		
			
				|  |  | +    # with exit_code = 1.
 | 
	
		
			
				|  |  | +    global exit_code
 | 
	
		
			
				|  |  | +    exit_code = 1
 | 
	
		
			
				|  |  | +    logging.error('Listening failed: %s' % reason.value)
 | 
	
		
			
				|  |  | +    twisted.internet.reactor.stop()
 | 
	
		
			
				|  |  | +  deferred.addErrback(listen_error)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  def start_test_servers(base_port):
 | 
	
		
			
				|  |  |    """ Start one server per test case on incrementing port numbers
 | 
	
		
			
				|  |  |    beginning with base_port """
 | 
	
	
		
			
				|  | @@ -92,7 +106,9 @@ def start_test_servers(base_port):
 | 
	
		
			
				|  |  |      logging.warning('serving on port %d : %s'%(portnum, test_case))
 | 
	
		
			
				|  |  |      endpoint = twisted.internet.endpoints.TCP4ServerEndpoint(
 | 
	
		
			
				|  |  |        twisted.internet.reactor, portnum, backlog=128)
 | 
	
		
			
				|  |  | -    endpoint.listen(H2Factory(test_case))
 | 
	
		
			
				|  |  | +    # Wait until the reactor is running before calling endpoint.listen().
 | 
	
		
			
				|  |  | +    twisted.internet.reactor.callWhenRunning(listen, endpoint, test_case)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      index += 1
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  if __name__ == '__main__':
 | 
	
	
		
			
				|  | @@ -102,3 +118,4 @@ if __name__ == '__main__':
 | 
	
		
			
				|  |  |    args = parse_arguments()
 | 
	
		
			
				|  |  |    start_test_servers(args.base_port)
 | 
	
		
			
				|  |  |    twisted.internet.reactor.run()
 | 
	
		
			
				|  |  | +  sys.exit(exit_code)
 |