diff --git a/mitmproxy/addons/share.py b/mitmproxy/addons/share.py index 17eefadbd..81d0fc022 100644 --- a/mitmproxy/addons/share.py +++ b/mitmproxy/addons/share.py @@ -12,6 +12,10 @@ from mitmproxy import flow class Share: + def __init__(self): + self.res = None + self.u_id = None + def encode_multipart_formdata(self, filename, content): params = {"key": filename, "acl": "bucket-owner-full-control", "Content-Type": "application/octet-stream"} LIMIT = b'---------------------------198495659117975628761412556003' @@ -69,5 +73,7 @@ class Share: f.seek(0) content = f.read() res = self.post_multipart('upload.share.mitmproxy.org.s3.amazonaws.com', u_id, content) + self.res = res + self.u_id = u_id f.close() ctx.log.alert("%s" % res) diff --git a/test/mitmproxy/addons/test_share.py b/test/mitmproxy/addons/test_share.py index e09696a72..106e8f041 100644 --- a/test/mitmproxy/addons/test_share.py +++ b/test/mitmproxy/addons/test_share.py @@ -1 +1,29 @@ -# TODO: Write test +from unittest import mock +import http.client + +from mitmproxy.test import taddons +from mitmproxy.test import tflow + +from mitmproxy.addons import share +from mitmproxy.addons import view + + +def test_share_command(): + with mock.patch('mitmproxy.addons.share.http.client.HTTPConnection') as mock_http: + sh = share.Share() + with taddons.context() as tctx: + sh.share([tflow.tflow(resp=True)]) + assert sh.res == "URL: share.mitmproxy.org/%s" % sh.u_id + + mock_http.return_value.getresponse.side_effect = http.client.RemoteDisconnected + sh.share([tflow.tflow(resp=True)]) + assert sh.res == "The server couldn\'t fulfill the request." + + mock_http.return_value.request.side_effect = http.client.CannotSendRequest + sh.share([tflow.tflow(resp=True)]) + assert sh.res == "We failed to reach a server." + + v = view.View() + tctx.master.addons.add(v) + tctx.master.addons.add(sh) + tctx.master.commands.call_args("share.flows", ["@shown"]) \ No newline at end of file