def performance(duration=10, print_output=True): parser = RequestParser(ParserDelegate()) runs = 0 then = time.time() while time.time() - then < duration: parser.execute(NORMAL_REQUEST) runs += 1 if print_output: print('Ran {} times in {} seconds for {} runs per second.'.format( runs, duration, runs / float(duration)))
def test_reading_chunked_request(self): tracker = TrackingDelegate(ValidatingDelegate(self)) parser = RequestParser(tracker) chunk_message(CHUNKED_REQUEST, parser) tracker.validate_hits( { REQUEST_METHOD_SLOT: 1, REQUEST_URI_SLOT: 1, REQUEST_HTTP_VERSION_SLOT: 1, HEADER_FIELD_SLOT: 2, HEADER_VALUE_SLOT: 2, BODY_SLOT: 4, BODY_COMPLETE_SLOT: 1 }, self)
def test_reading_request_with_content_length(self): tracker = TrackingDelegate(NonChunkedValidatingDelegate(self)) parser = RequestParser(tracker) chunk_message(NORMAL_REQUEST, parser) tracker.validate_hits( { REQUEST_METHOD_SLOT: 1, REQUEST_URI_SLOT: 1, REQUEST_HTTP_VERSION_SLOT: 1, HEADER_FIELD_SLOT: 2, HEADER_VALUE_SLOT: 2, BODY_SLOT: 2, BODY_COMPLETE_SLOT: 1 }, self)
def __init__(self, us_filter_pl, ds_filter_pl, downstream, router): self._ds_filter_pl = ds_filter_pl self._us_filter_pl = us_filter_pl self._router = router self._upstream_parser = None self._upstream_tracker = ConnectionTracker( self._on_upstream_live, self._on_upstream_close, self._on_upstream_error) # Setup all of the wiring for downstream self._downstream = downstream self._downstream_handler = DownstreamHandler( self._downstream, self._ds_filter_pl, self._connect_upstream) self._downstream_parser = RequestParser(self._downstream_handler) self._downstream.on_close(self._on_downstream_close) self._downstream.read(self._on_downstream_read)
def test_exception_propagation(self): tracker = TrackingDelegate(ValidatingDelegate(self)) parser = RequestParser(tracker) with self.assertRaises(Exception): chunk_message(UNEXPECTED_HEADER_REQUEST, parser)