def test_randomgenerator():
    g = generators.RandomGenerator("bytes", 100)
    assert repr(g)
    assert len(g[:10]) == 10
    assert len(g[1:10]) == 9
    assert len(g[:1000]) == 100
    assert len(g[1000:1001]) == 0
    assert g[0]
Example #2
0
 def handle_server_event(cls, event, h2_conn, rfile, wfile):
     if isinstance(event, h2.events.ConnectionTerminated):
         return False
     elif isinstance(event, h2.events.RequestReceived):
         data = generators.RandomGenerator("bytes", 100)[:]
         h2_conn.send_headers(event.stream_id, [(':status', '200'),
                                                ('content-length', '100')])
         h2_conn.send_data(event.stream_id, data)
         wfile.write(h2_conn.data_to_send())
         wfile.flush()
     return True
Example #3
0
    def test_request_streaming(self, streaming):
        class Stream:
            def requestheaders(self, f):
                f.request.stream = streaming

        self.master.addons.add(Stream())
        h2_conn = self.setup_connection()
        body = generators.RandomGenerator("bytes", 100)[:]
        self._send_request(self.client.wfile,
                           h2_conn,
                           headers=[
                               (':authority', "127.0.0.1:{}".format(
                                   self.server.server.address[1])),
                               (':method', 'GET'),
                               (':scheme', 'https'),
                               (':path', '/'),
                           ],
                           body=body,
                           streaming=True)
        done = False
        connection_terminated_event = None
        self.client.rfile.o.settimeout(2)
        while not done:
            try:
                _, consumed_bytes = http2.read_frame(self.client.rfile, False)
                events = h2_conn.receive_data(consumed_bytes)

                for event in events:
                    if isinstance(event, h2.events.ConnectionTerminated):
                        connection_terminated_event = event
                        done = True
            except mitmproxy.exceptions.TcpTimeout:
                if not streaming:
                    break  # this is expected for this test case
                else:
                    assert False
            except:
                print(traceback.format_exc())
                assert False

        if streaming:
            assert connection_terminated_event.additional_data == body
        else:
            assert connection_terminated_event is None
Example #4
0
    def test_request_streaming(self, streaming):
        class Stream:
            def requestheaders(self, f):
                f.request.stream = streaming

        self.master.addons.add(Stream())
        h2_conn = self.setup_connection()
        body = generators.RandomGenerator("bytes", 100)[:]
        self._send_request(
            self.client.wfile,
            h2_conn,
            headers=[
                (':authority', "127.0.0.1:{}".format(self.server.server.address[1])),
                (':method', 'GET'),
                (':scheme', 'https'),
                (':path', '/'),

            ],
            body=body,
            streaming=True
        )
        done = False
        connection_terminated_event = None
        self.client.rfile.o.settimeout(2)
        while not done:
            try:
                raw = b''.join(http2.read_raw_frame(self.client.rfile))
                events = h2_conn.receive_data(raw)

                for event in events:
                    if isinstance(event, h2.events.ConnectionTerminated):
                        connection_terminated_event = event
                        done = True
            except:
                break

        if streaming:
            assert connection_terminated_event.additional_data == body
        else:
            assert connection_terminated_event is None