From 4ede2f126a1b753d7a56dea67e0e098441d4ff23 Mon Sep 17 00:00:00 2001 From: Kyle Manna Date: Tue, 13 Aug 2013 15:35:33 -0700 Subject: [PATCH 01/16] utils: Add missing "B" for pretty_size() * Add missing unit for megabytes, should print "MB". --- libmproxy/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libmproxy/utils.py b/libmproxy/utils.py index 258626dbb..961c6618b 100644 --- a/libmproxy/utils.py +++ b/libmproxy/utils.py @@ -74,7 +74,7 @@ def pretty_size(size): suffixes = [ ("B", 2**10), ("kB", 2**20), - ("M", 2**30), + ("MB", 2**30), ] for suf, lim in suffixes: if size >= lim: From ea28496beab48a1fcca58184b73b24af491d4704 Mon Sep 17 00:00:00 2001 From: Kyle Manna Date: Tue, 13 Aug 2013 12:02:49 -0700 Subject: [PATCH 02/16] console: Add support for displaying elapsed time * Display the elapsed time in the the response row. * Very handy for passive performance analysis. --- libmproxy/console/common.py | 9 ++++++++- libmproxy/console/palettes.py | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/libmproxy/console/common.py b/libmproxy/console/common.py index 187a755f0..90a23eaaa 100644 --- a/libmproxy/console/common.py +++ b/libmproxy/console/common.py @@ -144,6 +144,9 @@ def raw_format_flow(f, focus, extended, padding): if f["resp_ctype"]: resp.append(fcol(f["resp_ctype"], rc)) resp.append(fcol(f["resp_clen"], rc)) + + resp.append(fcol(f["resp_et"], "time")) + elif f["err_msg"]: resp.append(fcol(SYMBOL_RETURN, "error")) resp.append( @@ -185,11 +188,15 @@ def format_flow(f, focus, extended=False, hostheader=False, padding=2): contentdesc = "[content missing]" else: contentdesc = "[no content]" + + delta = f.response.timestamp_end - f.request.timestamp_start + d.update(dict( resp_code = f.response.code, resp_is_replay = f.response.is_replay(), resp_acked = f.response.reply.acked, - resp_clen = contentdesc + resp_clen = contentdesc, + resp_et = "{0:2.0f}ms".format(delta * 1000), )) t = f.response.headers["content-type"] if t: diff --git a/libmproxy/console/palettes.py b/libmproxy/console/palettes.py index 650cf2618..df84a1e4f 100644 --- a/libmproxy/console/palettes.py +++ b/libmproxy/console/palettes.py @@ -35,6 +35,7 @@ palettes = { ('header', 'dark cyan', 'default'), ('highlight', 'white,bold', 'default'), + ('time', 'light red', 'default'), ('intercept', 'brown', 'default', None, '#f60', 'default'), ('replay', 'light green', 'default', None, '#0f0', 'default'), ('ack', 'light red', 'default'), From 41041159f6d9b260d0d1c95d42b1dd4f14b7f0cb Mon Sep 17 00:00:00 2001 From: Kyle Manna Date: Tue, 13 Aug 2013 16:29:57 -0700 Subject: [PATCH 03/16] console: Add support for displaying transfer rate * Display the rate in the the response row. * Very handy for passive performance analysis. --- libmproxy/console/common.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libmproxy/console/common.py b/libmproxy/console/common.py index 90a23eaaa..748302377 100644 --- a/libmproxy/console/common.py +++ b/libmproxy/console/common.py @@ -146,6 +146,7 @@ def raw_format_flow(f, focus, extended, padding): resp.append(fcol(f["resp_clen"], rc)) resp.append(fcol(f["resp_et"], "time")) + resp.append(fcol(f["resp_rate"], "highlight")) elif f["err_msg"]: resp.append(fcol(SYMBOL_RETURN, "error")) @@ -190,6 +191,7 @@ def format_flow(f, focus, extended=False, hostheader=False, padding=2): contentdesc = "[no content]" delta = f.response.timestamp_end - f.request.timestamp_start + rate = utils.pretty_size(len(f.response.content) / delta) d.update(dict( resp_code = f.response.code, @@ -197,6 +199,7 @@ def format_flow(f, focus, extended=False, hostheader=False, padding=2): resp_acked = f.response.reply.acked, resp_clen = contentdesc, resp_et = "{0:2.0f}ms".format(delta * 1000), + resp_rate = "{0}/s".format(rate), )) t = f.response.headers["content-type"] if t: From 4790399041215ce05fa5496782822b5c2ef4a2a7 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Tue, 20 Aug 2013 13:25:47 +0200 Subject: [PATCH 04/16] add travis ci --- .travis.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..153322a6b --- /dev/null +++ b/.travis.yml @@ -0,0 +1,7 @@ +language: python +python: + - "2.7" +# command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors +install: "pip install -r requirements.txt --use-mirrors" +# command to run tests, e.g. python setup.py test +script: nosetests \ No newline at end of file From 4bbcf795e3a8148219125f1b72359cae47e74d69 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Tue, 20 Aug 2013 13:32:18 +0200 Subject: [PATCH 05/16] travis ci: make sure that netlib is installed from head --- .travis.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 153322a6b..d3519b7f0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,9 @@ language: python python: - "2.7" # command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors -install: "pip install -r requirements.txt --use-mirrors" +install: + - "pip install --upgrade git+https://github.com/mitmproxy/netlib.git" + - "pip install --upgrade git+https://github.com/mitmproxy/pathod.git" + - "pip install -r requirements.txt --use-mirrors" # command to run tests, e.g. python setup.py test script: nosetests \ No newline at end of file From 02120eb5c85f02c2053c6a6449dccb720485e185 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Tue, 20 Aug 2013 13:42:25 +0200 Subject: [PATCH 06/16] travis ci: fix pip install order --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d3519b7f0..5f4a36020 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,8 +3,8 @@ python: - "2.7" # command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors install: + - "pip install -r requirements.txt --use-mirrors" - "pip install --upgrade git+https://github.com/mitmproxy/netlib.git" - "pip install --upgrade git+https://github.com/mitmproxy/pathod.git" - - "pip install -r requirements.txt --use-mirrors" # command to run tests, e.g. python setup.py test script: nosetests \ No newline at end of file From fa3dce9e11a3cb97c48d5fc8ef4325b7ed5280db Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Tue, 20 Aug 2013 13:47:34 +0200 Subject: [PATCH 07/16] add jsbeautifier to requirements.txt --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index ce1659aad..ad61de60d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,3 +12,4 @@ pyasn1==0.1.7 requests==1.2.2 urwid==1.1.1 wsgiref==0.1.2 +jsbeautifier==1.4.0 From a2643b52f909719d4e0fe97e17d3d30f43669341 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Fri, 23 Aug 2013 10:01:19 +1200 Subject: [PATCH 08/16] Tweak timing display - Remove elapsed time. Space is at a premium here, and this is somewhat redundant with the rate figure. We should display complete timing information somewhere in the detailed flow view. - Tone down the colour. Reserve highlights for stuff that should really pop out to the user. - Make rate calculation more acurate. Include header sizes. Use response start and end time, rather than request end and response end. This means that we show actual transfer rates, not including DNS requests and so forth. --- libmproxy/console/common.py | 10 ++++------ libmproxy/console/palettes.py | 1 - libmproxy/flow.py | 2 +- libmproxy/proxy.py | 7 +++++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/libmproxy/console/common.py b/libmproxy/console/common.py index 748302377..006303a76 100644 --- a/libmproxy/console/common.py +++ b/libmproxy/console/common.py @@ -144,9 +144,7 @@ def raw_format_flow(f, focus, extended, padding): if f["resp_ctype"]: resp.append(fcol(f["resp_ctype"], rc)) resp.append(fcol(f["resp_clen"], rc)) - - resp.append(fcol(f["resp_et"], "time")) - resp.append(fcol(f["resp_rate"], "highlight")) + resp.append(fcol(f["resp_rate"], rc)) elif f["err_msg"]: resp.append(fcol(SYMBOL_RETURN, "error")) @@ -190,15 +188,15 @@ def format_flow(f, focus, extended=False, hostheader=False, padding=2): else: contentdesc = "[no content]" - delta = f.response.timestamp_end - f.request.timestamp_start - rate = utils.pretty_size(len(f.response.content) / delta) + delta = f.response.timestamp_end - f.response.timestamp_start + size = len(f.response.content) + f.response.get_header_size() + rate = utils.pretty_size(size / delta) d.update(dict( resp_code = f.response.code, resp_is_replay = f.response.is_replay(), resp_acked = f.response.reply.acked, resp_clen = contentdesc, - resp_et = "{0:2.0f}ms".format(delta * 1000), resp_rate = "{0}/s".format(rate), )) t = f.response.headers["content-type"] diff --git a/libmproxy/console/palettes.py b/libmproxy/console/palettes.py index df84a1e4f..650cf2618 100644 --- a/libmproxy/console/palettes.py +++ b/libmproxy/console/palettes.py @@ -35,7 +35,6 @@ palettes = { ('header', 'dark cyan', 'default'), ('highlight', 'white,bold', 'default'), - ('time', 'light red', 'default'), ('intercept', 'brown', 'default', None, '#f60', 'default'), ('replay', 'light green', 'default', None, '#0f0', 'default'), ('ack', 'light red', 'default'), diff --git a/libmproxy/flow.py b/libmproxy/flow.py index 84836d111..240428126 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -618,7 +618,7 @@ class Response(HTTPMsg): self.headers, self.content = headers, content self.cert = cert self.timestamp_start = timestamp_start or utils.timestamp() - self.timestamp_end = max(timestamp_end or utils.timestamp(), timestamp_start) + self.timestamp_end = timestamp_end or utils.timestamp() self.replay = False def _refresh_cookie(self, c, delta): diff --git a/libmproxy/proxy.py b/libmproxy/proxy.py index b0c154631..75a541920 100644 --- a/libmproxy/proxy.py +++ b/libmproxy/proxy.py @@ -88,11 +88,13 @@ class RequestReplayThread(threading.Thread): server = ServerConnection(self.config, r.scheme, r.host, r.port, r.host) server.connect() server.send(r) + tsstart = utils.timestamp() httpversion, code, msg, headers, content = http.read_response( server.rfile, r.method, self.config.body_size_limit ) response = flow.Response( - self.flow.request, httpversion, code, msg, headers, content, server.cert + self.flow.request, httpversion, code, msg, headers, content, server.cert, + server.rfile.first_byte_timestamp ) self.channel.ask(response) except (ProxyError, http.HttpError, tcp.NetLibError), v: @@ -224,6 +226,7 @@ class ProxyHandler(tcp.BaseHandler): request.ssl_setup_timestamp = sc.ssl_setup_timestamp sc.rfile.reset_timestamps() try: + tsstart = utils.timestamp() httpversion, code, msg, headers, content = http.read_response( sc.rfile, request.method, @@ -242,7 +245,7 @@ class ProxyHandler(tcp.BaseHandler): response = flow.Response( request, httpversion, code, msg, headers, content, sc.cert, - sc.rfile.first_byte_timestamp, utils.timestamp() + sc.rfile.first_byte_timestamp ) response_reply = self.channel.ask(response) # Not replying to the server invalidates the server From aaba940dea8f148db953c50c3f8259154b8f3bcc Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Fri, 23 Aug 2013 10:28:16 +1200 Subject: [PATCH 09/16] Fix pretty_size unit tests. --- test/test_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_utils.py b/test/test_utils.py index db6feb4da..f40e0a31c 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -38,7 +38,7 @@ def test_pretty_size(): assert utils.pretty_size(100) == "100B" assert utils.pretty_size(1024) == "1kB" assert utils.pretty_size(1024 + (1024/2.0)) == "1.5kB" - assert utils.pretty_size(1024*1024) == "1M" + assert utils.pretty_size(1024*1024) == "1MB" def test_pkg_data(): From 789700ade2204570b37c096011bf4ecc0174eb73 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sun, 25 Aug 2013 10:28:15 +1200 Subject: [PATCH 10/16] Prep for release: CHANGELOG and CONTRIBUTORS --- CHANGELOG | 22 ++++++++++++++++++++++ CONTRIBUTORS | 43 +++++++++++++++++++++++-------------------- release/osx-binaries | 11 +++++++++-- requirements.txt | 15 --------------- 4 files changed, 54 insertions(+), 37 deletions(-) delete mode 100644 requirements.txt diff --git a/CHANGELOG b/CHANGELOG index c1cd94363..441474f34 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,25 @@ +25 August 2013: mitmproxy 0.9.2: + + * Improvements to the mitmproxywrapper.py helper script for OSX. + + * Don't take minor version into account when checking for serialized file + compatibility. + + * Fix a bug causing resource exhaustion under some circumstances for SSL + connections. + + * Revamp the way we store interception certificates. We used to store these + on disk, they're now in-memory. This fixes a race condition related to + cert handling, and improves compatibility with Windows, where the rules + governing permitted file names are weird, resulting in errors for some + valid IDNA-encoded names. + + * Display transfer rates for responses in the flow list. + + * Many other small bugfixes and improvements. + + + 16 June 2013: mitmproxy 0.9.1: diff --git a/CONTRIBUTORS b/CONTRIBUTORS index e7ea1fb7b..5ad5d1352 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1,39 +1,42 @@ - 777 Aldo Cortesi + 801 Aldo Cortesi 18 Henrik Nordstrom 13 Thomas Roth + 13 Maximilian Hils 11 Stephen Altamirano 10 András Veres-Szentkirályi - 8 Rouli 8 Jason A. Novak + 8 Rouli 7 Alexis Hildebrandt - 6 Maximilian Hils + 4 Marc Liyanage 4 Valtteri Virtanen 4 Bryan Bishop 3 Chris Neasbitt - 2 Heikki Hannikainen + 3 Kyle Manna 2 Jim Lloyd - 2 Mark E. Haase + 2 Matthias Urlichs 2 Michael Frister - 2 Rob Wills 2 alts + 2 Rob Wills 2 israel - 1 Mathieu Mitchell - 1 Michael Bisbjerg - 1 capt8bit - 1 Nicolas Esteves + 2 Mark E. Haase + 2 Heikki Hannikainen + 1 Oleksandr Sheremet 1 Paul - 1 phil plante 1 Rory McCann - 1 Jakub Nawalaniec 1 Rune Halvorsen 1 Sahn Lam - 1 Ivaylo Popov - 1 Andy Smith - 1 Ulrich Petri - 1 Henrik Nordström 1 Felix Wolfsteller - 1 Yuangxuan Wang - 1 Kit Randel - 1 Marc Liyanage - 1 meeee 1 Eric Entzel + 1 Ulrich Petri + 1 Andy Smith + 1 Yuangxuan Wang + 1 capt8bit + 1 meeee + 1 Jakub Nawalaniec + 1 Kit Randel + 1 phil plante + 1 Ivaylo Popov + 1 Mathieu Mitchell + 1 Henrik Nordström + 1 Michael Bisbjerg + 1 Nicolas Esteves diff --git a/release/osx-binaries b/release/osx-binaries index a5f17ba5e..4be85800e 100755 --- a/release/osx-binaries +++ b/release/osx-binaries @@ -2,8 +2,15 @@ # Quick and dangerous script for building OSX binaries. -# First, have a recent checkout of the dev version of pyinstaller. Change into -# the pyinstaller directory, and then run this script. +# A few quirks to note, which should be re-checked every release: +# - We require the latest development version of PyInstaller. + +# - PyInstaller has trouble detecting the zope.interfaces package. This is +# required by Twisted, which for mysterious reasons is required by Urwid. The +# answer is to touch the __init__.py file in the zope directory. On my system: +# touch /Library/Python/2.7/site-packages/zope/__init__.py + +# To run, change into the pyinstaller directory, and then run this script. DST=/tmp/osx-mitmproxy MITMPROXY=~/mitmproxy/mitmproxy diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index ad61de60d..000000000 --- a/requirements.txt +++ /dev/null @@ -1,15 +0,0 @@ -Flask==0.9 -Jinja2==2.7 -MarkupSafe==0.18 -PIL==1.1.7 -Werkzeug==0.8.3 -lxml==3.2.1 -netlib==0.9 -nose==1.3.0 -pathod==0.9 -pyOpenSSL==0.13 -pyasn1==0.1.7 -requests==1.2.2 -urwid==1.1.1 -wsgiref==0.1.2 -jsbeautifier==1.4.0 From 8d954d9965b35eec2e54996c0d6ef5bcc0d40cd6 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sun, 25 Aug 2013 10:37:35 +1200 Subject: [PATCH 11/16] Version bump. --- libmproxy/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libmproxy/version.py b/libmproxy/version.py index b3a9bd958..02d68411d 100644 --- a/libmproxy/version.py +++ b/libmproxy/version.py @@ -1,4 +1,4 @@ -IVERSION = (0, 9, 1) +IVERSION = (0, 9, 2) VERSION = ".".join(str(i) for i in IVERSION) NAME = "mitmproxy" NAMEVERSION = NAME + " " + VERSION From 63ece45de528a41d4ca4e9eefbda731b2a225f9e Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Sun, 25 Aug 2013 03:45:32 +0200 Subject: [PATCH 12/16] add coveralls.io --- .travis.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 5f4a36020..cecfce12d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,8 +3,12 @@ python: - "2.7" # command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors install: + - "pip install coveralls --use-mirrors" - "pip install -r requirements.txt --use-mirrors" - "pip install --upgrade git+https://github.com/mitmproxy/netlib.git" - "pip install --upgrade git+https://github.com/mitmproxy/pathod.git" # command to run tests, e.g. python setup.py test -script: nosetests \ No newline at end of file +script: + - "nosetests --with-cov --cov-report term-missing" +after_success: + - coveralls \ No newline at end of file From 08a26337a0f45ea24f0f118614c38ebd8e68b8b4 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Sun, 25 Aug 2013 03:53:19 +0200 Subject: [PATCH 13/16] re-add requirements.txt --- requirements.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..72b01ce76 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,15 @@ +Flask==0.9 +Jinja2==2.7 +MarkupSafe==0.18 +PIL==1.1.7 +Werkzeug==0.8.3 +lxml==3.2.1 +netlib==0.9.2 +nose==1.3.0 +pathod==0.9.2 +pyOpenSSL==0.13 +pyasn1==0.1.7 +requests==1.2.2 +urwid==1.1.1 +wsgiref==0.1.2 +jsbeautifier==1.4.0 \ No newline at end of file From 62fa2e6c07d66057984b33222069f14dfe856091 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Sun, 25 Aug 2013 04:03:53 +0200 Subject: [PATCH 14/16] fix travis, loose requirements.txt --- .travis.yml | 1 + requirements.txt | 30 +++++++++++++++--------------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/.travis.yml b/.travis.yml index cecfce12d..c10843199 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,7 @@ python: # command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors install: - "pip install coveralls --use-mirrors" + - "pip install nose-cov --use-mirrors" - "pip install -r requirements.txt --use-mirrors" - "pip install --upgrade git+https://github.com/mitmproxy/netlib.git" - "pip install --upgrade git+https://github.com/mitmproxy/pathod.git" diff --git a/requirements.txt b/requirements.txt index 72b01ce76..3ecd8ed4e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,15 +1,15 @@ -Flask==0.9 -Jinja2==2.7 -MarkupSafe==0.18 -PIL==1.1.7 -Werkzeug==0.8.3 -lxml==3.2.1 -netlib==0.9.2 -nose==1.3.0 -pathod==0.9.2 -pyOpenSSL==0.13 -pyasn1==0.1.7 -requests==1.2.2 -urwid==1.1.1 -wsgiref==0.1.2 -jsbeautifier==1.4.0 \ No newline at end of file +Flask>=0.9 +Jinja2>=2.7 +MarkupSafe>=0.18 +PIL>=1.1.7 +Werkzeug>=0.8.3 +lxml>=3.2.1 +netlib>=0.9.2 +nose>=1.3.0 +pathod>=0.9.2 +pyOpenSSL>=0.13 +pyasn1>=0.1.7 +requests>=1.2.2 +urwid>=1.1.1 +wsgiref>=0.1.2 +jsbeautifier>=1.4.0 \ No newline at end of file From 404445cbdff3528b0b8b45a759e5b2f2c161ae2a Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Sun, 25 Aug 2013 04:19:43 +0200 Subject: [PATCH 15/16] exclude TestHTTPS for testing travis/coverage --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c10843199..61dfe73f0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,6 @@ install: - "pip install --upgrade git+https://github.com/mitmproxy/pathod.git" # command to run tests, e.g. python setup.py test script: - - "nosetests --with-cov --cov-report term-missing" + - "nosetests -e TestHTTPS --with-cov --cov-report term-missing" after_success: - coveralls \ No newline at end of file From 38a1135ab8f3ab2e97d07fa8e339067c67722e16 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Sun, 25 Aug 2013 04:31:35 +0200 Subject: [PATCH 16/16] add status images to README, include TestHTTPS again --- .travis.yml | 2 +- README.mkd | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 61dfe73f0..c10843199 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,6 @@ install: - "pip install --upgrade git+https://github.com/mitmproxy/pathod.git" # command to run tests, e.g. python setup.py test script: - - "nosetests -e TestHTTPS --with-cov --cov-report term-missing" + - "nosetests --with-cov --cov-report term-missing" after_success: - coveralls \ No newline at end of file diff --git a/README.mkd b/README.mkd index 8f564d7ff..35b41413d 100644 --- a/README.mkd +++ b/README.mkd @@ -1,3 +1,5 @@ +[![Build Status](https://travis-ci.org/mitmproxy/mitmproxy.png)](https://travis-ci.org/mitmproxy/mitmproxy) [![Coverage Status](https://coveralls.io/repos/mitmproxy/mitmproxy/badge.png)](https://coveralls.io/r/mitmproxy/mitmproxy) + __mitmproxy__ is an interactive, SSL-capable man-in-the-middle proxy for HTTP with a console interface.