def test_can_read_multiple_frames_from_streams(self): out_frames = [] in_frames = [] def send_cb(frame): out_frames.append(frame) def recv_cb(s): def inner(): s.receive_frame(in_frames.pop(0)) return inner s = Stream(1, send_cb, None, None, None) s._recv_cb = recv_cb(s) s.state = STATE_HALF_CLOSED_LOCAL # Provide two data frames to read. f = DataFrame(1) f.data = b'hi there!' in_frames.append(f) f = DataFrame(1) f.data = b'hi there again!' f.flags.add('END_STREAM') in_frames.append(f) data = s._read() assert data == b'hi there!hi there again!' assert len(out_frames) == 1 assert isinstance(out_frames[0], WindowUpdateFrame) assert out_frames[0].window_increment == len(b'hi there!')
def test_stream_reading_works(self): out_frames = [] in_frames = [] def send_cb(frame): out_frames.append(frame) def recv_cb(s): def inner(): s.receive_frame(in_frames.pop(0)) return inner s = Stream(1, send_cb, None, None, None) s._recv_cb = recv_cb(s) s.state = STATE_HALF_CLOSED_LOCAL # Provide a data frame to read. f = DataFrame(1) f.data = b'hi there!' f.flags.add('END_STREAM') in_frames.append(f) data = s._read() assert data == b'hi there!' assert len(out_frames) == 0
def test_flow_control_manager_update_includes_padding(self): out_frames = [] in_frames = [] def send_cb(frame): out_frames.append(frame) def recv_cb(s): def inner(): s.receive_frame(in_frames.pop(0)) return inner start_window = 65535 s = Stream(1, send_cb, None, None, None, None, FlowControlManager(start_window)) s._recv_cb = recv_cb(s) s.state = STATE_HALF_CLOSED_LOCAL # Provide two data frames to read. f = DataFrame(1) f.data = b'hi there!' f.pad_length = 10 f.flags.add('END_STREAM') in_frames.append(f) data = s._read() assert data == b'hi there!' assert s._in_window_manager.window_size == start_window - f.pad_length - len(data) - 1
def test_flow_control_manager_update_includes_padding(self): out_frames = [] in_frames = [] def send_cb(frame): out_frames.append(frame) def recv_cb(s): def inner(): s.receive_frame(in_frames.pop(0)) return inner start_window = 65535 s = Stream(1, send_cb, None, None, None, None, FlowControlManager(start_window)) s._recv_cb = recv_cb(s) s.state = STATE_HALF_CLOSED_LOCAL # Provide two data frames to read. f = DataFrame(1) f.data = b'hi there!' f.pad_length = 10 f.flags.add('END_STREAM') in_frames.append(f) data = s._read() assert data == b'hi there!' assert s._in_window_manager.window_size == start_window - f.pad_length - len( data) - 1
def test_partial_reads_from_streams(self): out_frames = [] in_frames = [] def send_cb(frame): out_frames.append(frame) def recv_cb(s): def inner(): s.receive_frame(in_frames.pop(0)) return inner s = Stream(1, send_cb, None, None, None, None, FlowControlManager(65535)) s._recv_cb = recv_cb(s) s.state = STATE_HALF_CLOSED_LOCAL # Provide two data frames to read. f = DataFrame(1) f.data = b'hi there!' in_frames.append(f) f = DataFrame(1) f.data = b'hi there again!' f.flags.add('END_STREAM') in_frames.append(f) # We'll get the entire first frame. data = s._read(4) assert data == b'hi there!' assert len(out_frames) == 1 # Now we'll get the entire of the second frame. data = s._read(4) assert data == b'hi there again!' assert len(out_frames) == 1 assert s.state == STATE_CLOSED
def test_partial_reads_from_streams(self): out_frames = [] in_frames = [] def send_cb(frame): out_frames.append(frame) def recv_cb(s): def inner(): s.receive_frame(in_frames.pop(0)) return inner s = Stream(1, send_cb, None, None, None, None, FlowControlManager(65535)) s._recv_cb = recv_cb(s) s.state = STATE_HALF_CLOSED_LOCAL # Provide two data frames to read. f = DataFrame(1) f.data = b"hi there!" in_frames.append(f) f = DataFrame(1) f.data = b"hi there again!" f.flags.add("END_STREAM") in_frames.append(f) # We'll get the entire first frame. data = s._read(4) assert data == b"hi there!" assert len(out_frames) == 1 # Now we'll get the entire of the second frame. data = s._read(4) assert data == b"hi there again!" assert len(out_frames) == 1 assert s.state == STATE_CLOSED
def test_can_read_single_frames_from_streams(self): out_frames = [] in_frames = [] def send_cb(frame, tolerate_peer_gone=False): out_frames.append(frame) def recv_cb(s): def inner(): s.receive_frame(in_frames.pop(0)) return inner s = Stream(1, send_cb, None, None, None, None, FlowControlManager(800)) s._recv_cb = recv_cb(s) s.state = STATE_HALF_CLOSED_LOCAL # Provide two data frames to read. f = DataFrame(1) f.data = b'hi there!' in_frames.append(f) f = DataFrame(1) f.data = b'hi there again!' f.flags.add('END_STREAM') in_frames.append(f) data = s._read_one_frame() assert data == b'hi there!' data = s._read_one_frame() assert data == b'hi there again!' data = s._read_one_frame() assert data is None data = s._read() assert data == b''