| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | """  HTTP2 Test Server. Highly experimental work in progress."""import argparseimport loggingfrom twisted.internet.protocol import Factoryfrom twisted.internet import endpoints, reactorimport http2_base_serverimport test_rst_after_headerimport test_rst_after_dataimport test_rst_during_dataimport test_goawayimport test_pingimport test_max_streamstest_case_mappings = {  'rst_after_header': test_rst_after_header.TestcaseRstStreamAfterHeader,  'rst_after_data': test_rst_after_data.TestcaseRstStreamAfterData,  'rst_during_data': test_rst_during_data.TestcaseRstStreamDuringData,  'goaway': test_goaway.TestcaseGoaway,  'ping': test_ping.TestcasePing,  'max_streams': test_max_streams.TestcaseSettingsMaxStreams,}class H2Factory(Factory):  def __init__(self, testcase):    logging.info('In H2Factory')    self._num_streams = 0    self._testcase = testcase  def buildProtocol(self, addr):    self._num_streams += 1    logging.info('New Connection: %d'%self._num_streams)    if not test_case_mappings.has_key(self._testcase):      logging.error('Unknown test case: %s'%self._testcase)      assert(0)    else:      t = test_case_mappings[self._testcase]    if self._testcase == 'goaway':      return t(self._num_streams).get_base_server()    else:      return t().get_base_server()if __name__ == "__main__":  logging.basicConfig(format = "%(levelname) -10s %(asctime)s %(module)s:%(lineno)s | %(message)s", level=logging.INFO)  parser = argparse.ArgumentParser()  parser.add_argument("test")  parser.add_argument("port")  args = parser.parse_args()  if args.test not in test_case_mappings.keys():    logging.error('unknown test: %s'%args.test)  else:    endpoint = endpoints.TCP4ServerEndpoint(reactor, int(args.port), backlog=128)    endpoint.listen(H2Factory(args.test))    reactor.run()
 |