diff options
author | Maximilian Hils <git@maximilianhils.com> | 2019-11-16 12:06:13 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-16 12:06:13 +0100 |
commit | d1eec4d8078631c1e4a39edbef0dd07e16e9a074 (patch) | |
tree | 4bc621fbb40484735057278bffa41c18a0b1e59e /test | |
parent | 2d01c81c1f0895e74d19ca2172ebbe4450febade (diff) | |
parent | 248034c528c158c95e87f5a888176ab14e11a6dc (diff) | |
download | mitmproxy-d1eec4d8078631c1e4a39edbef0dd07e16e9a074.tar.gz mitmproxy-d1eec4d8078631c1e4a39edbef0dd07e16e9a074.tar.bz2 mitmproxy-d1eec4d8078631c1e4a39edbef0dd07e16e9a074.zip |
Merge pull request #3705 from mhils/issue-3469
Fix #3469
Diffstat (limited to 'test')
-rw-r--r-- | test/mitmproxy/addons/test_serverplayback.py | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/test/mitmproxy/addons/test_serverplayback.py b/test/mitmproxy/addons/test_serverplayback.py index c6a0c1f4..2e42fa03 100644 --- a/test/mitmproxy/addons/test_serverplayback.py +++ b/test/mitmproxy/addons/test_serverplayback.py @@ -1,13 +1,13 @@ import urllib -import pytest -from mitmproxy.test import taddons -from mitmproxy.test import tflow +import pytest import mitmproxy.test.tutils -from mitmproxy.addons import serverplayback from mitmproxy import exceptions from mitmproxy import io +from mitmproxy.addons import serverplayback +from mitmproxy.test import taddons +from mitmproxy.test import tflow def tdump(path, flows): @@ -321,7 +321,7 @@ def test_server_playback_full(): with taddons.context(s) as tctx: tctx.configure( s, - server_replay_refresh = True, + server_replay_refresh=True, ) f = tflow.tflow() @@ -345,7 +345,7 @@ def test_server_playback_kill(): with taddons.context(s) as tctx: tctx.configure( s, - server_replay_refresh = True, + server_replay_refresh=True, server_replay_kill_extra=True ) @@ -357,3 +357,25 @@ def test_server_playback_kill(): f.request.host = "nonexistent" tctx.cycle(s, f) assert f.reply.value == exceptions.Kill + + +def test_server_playback_response_deleted(): + """ + The server playback addon holds references to flows that can be modified by the user in the meantime. + One thing that can happen is that users remove the response object. This happens for example when doing a client + replay at the same time. + """ + sp = serverplayback.ServerPlayback() + with taddons.context(sp) as tctx: + tctx.configure(sp) + f1 = tflow.tflow(resp=True) + f2 = tflow.tflow(resp=True) + + assert not sp.flowmap + + sp.load_flows([f1, f2]) + assert sp.flowmap + + f1.response = f2.response = None + assert not sp.next_flow(f1) + assert not sp.flowmap |