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]
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
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
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