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)
Example #4
0
    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)