Exemple #1
0
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"
Exemple #6
0
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
Exemple #7
0
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
Exemple #8
0
    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