def test_malform_frame_data(): try: Frame.load(b'\x00\x00\x02\x04\x00\x00\x00\x00\x00') # frame length is 2 but real size is 0 except: pass else: assert 0 # Exception was not raised
def test_malform_setting_frame_data(): try: # setting value is not 4 byte Frame.load(b'\x00\x00\x04\x04\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01') except: pass else: assert 0 # Exception was not raised
def test_chrom_refresh_frame_data(): frame_data = b'\x00\x00\x1e\x01%\x00\x00\x00\x07\x00\x00\x00\x00\xb6\xc7\x82\x00\x84\xb9X\xd3?\x89bQ\xf71\x0fR\xe6!\xff\x87\xbf\xc5\xc4\xc2\xbe\xc0' frame = Frame.load(frame_data) print(frame)
def test_header_frame_data(): frame = HeaderFrame(id=0x0201) frame.method = "GET" frame.scheme = 'https' frame.path = '/' frame.add('host', 'localhost') frame.add('accept', 'text/html') assert frame.type == FrameType.HEADERS read_frame = Frame.load(frame.get_frame_bin()) assert read_frame.method == "GET" assert read_frame.scheme == "https" assert read_frame.path == "/" assert read_frame.get('host') == "localhost" assert read_frame.get('accept') == "text/html"
def test_multiple_header_frame_data(): encoded_frames = [] frame = HeaderFrame(id=0x0201, end_header=False) frame.method = "GET" frame.scheme = 'https' frame.path = '/' assert frame.type == FrameType.HEADERS encoded_frames.append(Frame.load(frame.get_frame_bin())) assert encoded_frames[0].is_encoded second_frame = HeaderFrame(id=0x0201, end_header=False) second_frame.add('host', 'localhost') second_frame.add('accept', 'text/html') encoded_frames.append(Frame.load(second_frame.get_frame_bin())) last_frame = HeaderFrame(id=0x0201, end_header=True) last_frame.add('accept-language', 'ko') read_frame = Frame.load(last_frame.get_frame_bin(), None, encoded_frames) assert read_frame.method == "GET" assert read_frame.scheme == "https" assert read_frame.path == "/" assert read_frame.get('host') == "localhost" assert read_frame.get('accept') == "text/html" assert read_frame.get('accept-language') == "ko"
def test_data_frame_data(): frame = DataFrame(id=0x0201) # set data as default html format frame.set_text(u'<html><heade></heade><body></body></html>', 'utf-8') assert frame.type == FrameType.DATA read_frame = Frame.load(frame.get_frame_bin()) assert read_frame.data == frame.data # check is same data
def test_padded_data_frame_data(): frame = DataFrame(id=0x0201) # set data as default html format data = u'<html><heade></heade><body></body></html>' frame.set_text(data, 'utf-8') frame.padding(10) assert frame.type == FrameType.DATA read_frame = Frame.load(frame.get_frame_bin()) assert read_frame.data == data.encode('utf-8') # check is same data
def receive_frame(self, frame_header, frame_raw): try: frame = Frame.load(frame_raw, frame_header, decoder=self.connection.decoder) if isinstance(frame, HeaderFrame): self._last_header_raw = frame.data # get payload of frame raw self._client_headers = frame.get_all() self.state = StreamState.OPEN # if header recv, open stream if frame.is_end_header: self.is_end_header = frame.is_end_header print('is_end_stream ', frame.is_end_stream) elif isinstance(frame, DataFrame): # TODO : need test self.req_stream_io.write(frame.data) print('is_end_stream ', frame.is_end_stream) else: # ignore unknow frame return False if not isinstance(frame, PriorityFrame): # priority frame always be able to recieved if self.state == StreamState.HALF_CLOSED_REMOTE: if not(isinstance(frame.RSTFrame)): # or TODO: WINDOW_UPDATE raise ProtocolError() elif self.state == StreamState.CLOSED: if not(isinstance(frame.RSTFrame)): # or TODO: WINDOW_UPDATE raise ProtocolError() elif time() - self._closed_time > 1: # if these streams are recv after 1 sec raise ProtocolError() if hasattr(frame, 'is_end_stream') and frame.is_end_stream: # stream that can change state if self.state == StreamState.HALF_CLOSED_LOCAL: self.close() elif self.state == StreamState.OPEN: self.state = StreamState.HALF_CLOSED_REMOTE else: # it would not be occured raise ProtocolError() if isinstance(frame, RSTFrame): self.close() except: raise ProtocolError() # unknow exception occur protocol error return False return True
def test_ack_setting_frame(): frame = SettingFrame(is_ack=True) try: frame.set(SettingFrame.SETTINGS_HEADER_TABLE_SIZE, 100) except: pass else: assert 0 # Exception was not raised read_frame = Frame.load(frame.get_frame_bin()) assert read_frame.is_ack
def test_setting_frame_data(): frame = SettingFrame() frame.set(SettingFrame.SETTINGS_HEADER_TABLE_SIZE, 100) frame.set(SettingFrame.SETTINGS_ENABLE_PUSH, 1) assert frame.type == FrameType.SETTINGS read_frame = Frame.load(frame.get_frame_bin()) assert read_frame.get(SettingFrame.SETTINGS_HEADER_TABLE_SIZE) == 100 assert read_frame.get(SettingFrame.SETTINGS_ENABLE_PUSH) == 1