Exemple #1
0
def load_flow_from_state(state: dict) -> HTTPFlow:
    extra_state = {}
    for phase in ['request', 'response']:
        raw_attr = f'{phase}_raw'
        extra_state[raw_attr] = state.pop(raw_attr, None)
        phase_state = state.get(phase)
        extra_state[f'{phase}_match_details'] = (
            phase_state and
            phase_state.pop('match_details', None)
        )

    flow = HTTPFlow.from_state(state)

    for phase, phase_cls in [
        ('request', HTTPRequest),
        ('response', HTTPResponse),
    ]:
        raw_attr = f'{phase}_raw'
        raw = extra_state.get(raw_attr)
        if raw:
            setattr(flow, raw_attr, phase_cls.from_state(raw))
        match_details = extra_state.get(f'{phase}_match_details')
        phase_obj = getattr(flow, phase, None)
        if match_details and phase_obj:
            setattr(phase_obj, 'match_details', match_details)

    return flow
Exemple #2
0
    def test_getset_state(self):
        f = tflow(resp=True)
        state = f.get_state()
        assert f.get_state() == HTTPFlow.from_state(state).get_state()

        f.response = None
        f.error = flow.Error("error")
        state = f.get_state()
        assert f.get_state() == HTTPFlow.from_state(state).get_state()

        f2 = f.copy()
        f2.id = f.id  # copy creates a different uuid
        assert f.get_state() == f2.get_state()
        assert not f == f2
        f2.error = flow.Error("e2")
        assert not f == f2
        f2.backup()
        f2.intercept()  # to change the state
        f.set_state(f2.get_state())
        assert f.get_state() == f2.get_state()