diff --git a/.appveyor.yml b/.appveyor.yml index 2bbf3f12d..1fc50c516 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -17,7 +17,7 @@ install: - "pip install --user -r requirements.txt" - "python -c \"from OpenSSL import SSL; print(SSL.SSLeay_version(SSL.SSLEAY_VERSION))\"" test_script: - - "py.test -s --cov libmproxy --cov netlib --cov libpathod --timeout 30 ./test/" + - "py.test -s --cov-config .coveragerc --timeout 30 ./test/" cache: - C:\Users\appveyor\AppData\Local\pip\cache deploy_script: diff --git a/.coveragerc b/.coveragerc index f6616fb34..627a4110f 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,11 +1,11 @@ [run] branch = True +include = libmproxy netlib libpathod +omit = *contrib*, *tnetstring*, *platform*, *console*, *main.py [report] show_missing = True -include = *libmproxy* *netlib* *libpathod* exclude_lines = pragma: nocover pragma: no cover raise NotImplementedError() -omit = *contrib*, *tnetstring*, *platform*, *console*, *main.py diff --git a/.travis.yml b/.travis.yml index f9a6aa664..fd1e37917 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,7 +22,7 @@ matrix: - python: 3.5 env: SCOPE="netlib" - python: 3.5 - env: NO_ALPN=1 SCOPE="netlib" + env: SCOPE="netlib" NO_ALPN=1 - python: 2.7 env: DOCS=1 script: 'cd mitmproxy/docs && make html' @@ -44,7 +44,7 @@ before_script: - "openssl version -a" script: - - "py.test -s --cov libmproxy --cov netlib --cov libpathod --timeout 30 ./test/$SCOPE" + - "py.test -s --cov-config .coveragerc --timeout 30 ./test/$SCOPE" after_success: - coveralls diff --git a/README.rst b/README.rst new file mode 100644 index 000000000..2b4a0a8cf --- /dev/null +++ b/README.rst @@ -0,0 +1,146 @@ +|travis| |coveralls| |downloads| |latest_release| |python_versions| + +This repository contains the **mitmproxy** and **pathod** projects, as well as their shared networking library, **netlib**. + +``mitmproxy`` is an interactive, SSL-capable intercepting proxy with a console interface. + +``mitmdump`` is the command-line version of mitmproxy. Think tcpdump for HTTP. + +``pathoc`` and ``pathod`` are perverse HTTP client and server applications designed to let you craft almost any conceivable HTTP request, including ones that creatively violate the standards. + + +Documentation & Help +-------------------- + +Documentation, tutorials and precompiled binaries can be found on the mitmproxy and pathod websites. + +|mitmproxy_site| |pathod_site| + +The latest documentation for mitmproxy is also available on ReadTheDocs. + +|mitmproxy_docs| + +You can join our developer chat on Slack. + +|slack| + + +Hacking +------- + +To get started hacking on mitmproxy, make sure you have Python_ 2.7.x. with +virtualenv_ installed (you can find installation instructions for virtualenv here_). +Then do the following: + +.. code-block:: text + + git clone https://github.com/mitmproxy/mitmproxy.git + cd mitmproxy + ./dev + + +The *dev* script will create a virtualenv environment in a directory called "venv", +and install all mandatory and optional dependencies into it. +The primary mitmproxy components - mitmproxy, netlib and pathod - are installed as "editable", +so any changes to the source in the repository will be reflected live in the virtualenv. + +To confirm that you're up and running, activate the virtualenv, and run the +mitmproxy test suite: + +.. code-block:: text + + . venv/bin/activate # venv\Scripts\activate.bat on Windows + py.test --cov-config .coveragerc test + +Note that the main executables for the project - ``mitmdump``, ``mitmproxy``, +``mitmweb``, ``pathod``, and ``pathoc`` - are all created within the virtualenv. After activating the +virtualenv, they will be on your $PATH, and you can run them like any other +command: + +.. code-block:: text + + mitmdump --version + +For convenience, the project includes an autoenv_ file (`.env`_) that +auto-activates the virtualenv when you cd into the mitmproxy directory. + + +Testing +------- + +If you've followed the procedure above, you already have all the development +requirements installed, and you can simply run the test suite: + +.. code-block:: text + + py.test --cov-config .coveragerc test + +Please ensure that all patches are accompanied by matching changes in the test +suite. The project tries to maintain 100% test coverage. + + +Docs +---- + +The mitmproxy documentation is build using Sphinx_, which is installed automatically if you set up a development +environment as described above. +After installation, you can render the documentation like this: + +.. code-block:: text + + cd docs + make clean + make html + make livehtml + +The last command invokes `sphinx-autobuild`_, which watches the Sphinx directory and rebuilds +the documentation when a change is detected. + + +.. |mitmproxy_site| image:: https://img.shields.io/badge/https%3A%2F%2F-mitmproxy.org-blue.svg + :target: https://mitmproxy.org/ + :alt: mitmproxy.org + +.. |pathod_site| image:: https://img.shields.io/badge/https%3A%2F%2F-pathod.net-blue.svg + :target: https://pathod.net/ + :alt: pathod.net + +.. |mitmproxy_docs| image:: https://readthedocs.org/projects/mitmproxy/badge/ + :target: http://docs.mitmproxy.org/en/latest/ + :alt: mitmproxy documentation + +.. |pathod_docs| image:: https://readthedocs.org/projects/mitmproxy/badge/ + :target: http://pathod.net/docs/pathod + :alt: pathod documentation + +.. |slack| image:: http://slack.mitmproxy.org/badge.svg + :target: http://slack.mitmproxy.org/ + :alt: Slack Developer Chat + +.. |travis| image:: https://img.shields.io/travis/mitmproxy/mitmproxy/master.svg + :target: https://travis-ci.org/mitmproxy/mitmproxy + :alt: Build Status + +.. |coveralls| image:: https://img.shields.io/coveralls/mitmproxy/mitmproxy/master.svg + :target: https://coveralls.io/r/mitmproxy/mitmproxy + :alt: Coverage Status + +.. |downloads| image:: https://img.shields.io/pypi/dm/mitmproxy.svg?color=orange + :target: https://pypi.python.org/pypi/mitmproxy + :alt: Downloads + +.. |latest_release| image:: https://img.shields.io/pypi/v/mitmproxy.svg + :target: https://pypi.python.org/pypi/mitmproxy + :alt: Latest Version + +.. |python_versions| image:: https://img.shields.io/pypi/pyversions/mitmproxy.svg + :target: https://pypi.python.org/pypi/mitmproxy + :alt: Supported Python versions + +.. _Python: https://www.python.org/ +.. _virtualenv: http://virtualenv.readthedocs.org/en/latest/ +.. _here: http://virtualenv.readthedocs.org/en/latest/installation.html +.. _autoenv: https://github.com/kennethreitz/autoenv +.. _.env: https://github.com/mitmproxy/mitmproxy/blob/master/.env +.. _Sphinx: http://sphinx-doc.org/ +.. _sphinx-autobuild: https://pypi.python.org/pypi/sphinx-autobuild diff --git a/mitmproxy/README.rst b/mitmproxy/README.rst index e8b3c84a0..e73b5e34d 100644 --- a/mitmproxy/README.rst +++ b/mitmproxy/README.rst @@ -1,4 +1,4 @@ -|travis| |coveralls| |downloads| |latest-release| |python-versions| +|travis| |coveralls| |downloads| |latest_release| |python_versions| ``mitmproxy`` is an interactive, SSL-capable man-in-the-middle proxy for HTTP with a console interface. @@ -7,22 +7,6 @@ with a console interface. ``libmproxy`` is the library that mitmproxy and mitmdump are built on. -Documentation & Help --------------------- - -Documentation, tutorials and distribution packages can be found on the -mitmproxy website. - -|site| - -Installation Instructions are available in the docs. - -|docs| - -You can join our developer chat on Slack. - -|slack| - Features -------- @@ -39,90 +23,30 @@ Features ``mitmproxy`` is tested and developed on OSX, Linux and OpenBSD. On Windows, only mitmdump is supported, which does not have a graphical user interface. +Documentation & Help +-------------------- + +Documentation, tutorials and distribution packages can be found on the +mitmproxy website. + +|mitmproxy_site| + +Installation Instructions are available in the docs. + +|mitmproxy_docs| + +You can join our developer chat on Slack. + +|slack| -Hacking -------- - -To get started hacking on mitmproxy, make sure you have Python_ 2.7.x. with -virtualenv_ installed (you can find installation instructions for virtualenv here_). -Then do the following: - -.. code-block:: text - - git clone https://github.com/mitmproxy/mitmproxy.git - git clone https://github.com/mitmproxy/netlib.git - git clone https://github.com/mitmproxy/pathod.git - cd mitmproxy - ./dev - - -The *dev* script will create a virtualenv environment in a directory called -"venv.mitmproxy", and install all of mitmproxy's development requirements, plus -all optional modules. The primary mitmproxy components - mitmproxy, netlib and -pathod - are all installed "editable", so any changes to the source in the git -checkouts will be reflected live in the virtualenv. - -To confirm that you're up and running, activate the virtualenv, and run the -mitmproxy test suite: - -.. code-block:: text - - . ../venv.mitmproxy/bin/activate # ..\venv.mitmproxy\Scripts\activate.bat on Windows - py.test -n 4 --cov libmproxy - -Note that the main executables for the project - ``mitmdump``, ``mitmproxy`` and -``mitmweb`` - are all created within the virtualenv. After activating the -virtualenv, they will be on your $PATH, and you can run them like any other -command: - -.. code-block:: text - - mitmdump --version - -For convenience, the project includes an autoenv_ file (`.env`_) that -auto-activates the virtualenv when you cd into the mitmproxy directory. - - -Testing -------- - -If you've followed the procedure above, you already have all the development -requirements installed, and you can simply run the test suite: - -.. code-block:: text - - py.test -n 4 --cov libmproxy - -Please ensure that all patches are accompanied by matching changes in the test -suite. The project maintains 100% test coverage. - - -Docs ----- - -The mitmproxy documentation is build using Sphinx_, which is installed automatically if you set up a development -environment as described above. -After installation, you can render the documentation like this: - -.. code-block:: text - - cd docs - make clean - make html - make livehtml - -The last command invokes `sphinx-autobuild`_, which watches the Sphinx directory and rebuilds -the documentation when a change is detected. - - -.. |site| image:: https://img.shields.io/badge/https%3A%2F%2F-mitmproxy.org-blue.svg +.. |mitmproxy_site| image:: https://img.shields.io/badge/https%3A%2F%2F-mitmproxy.org-blue.svg :target: https://mitmproxy.org/ :alt: mitmproxy.org -.. |docs| image:: https://readthedocs.org/projects/mitmproxy/badge/ +.. |mitmproxy_docs| image:: https://readthedocs.org/projects/mitmproxy/badge/ :target: http://docs.mitmproxy.org/en/latest/ - :alt: Documentation + :alt: mitmproxy documentation .. |slack| image:: http://slack.mitmproxy.org/badge.svg :target: http://slack.mitmproxy.org/ @@ -140,18 +64,10 @@ the documentation when a change is detected. :target: https://pypi.python.org/pypi/mitmproxy :alt: Downloads -.. |latest-release| image:: https://img.shields.io/pypi/v/mitmproxy.svg +.. |latest_release| image:: https://img.shields.io/pypi/v/mitmproxy.svg :target: https://pypi.python.org/pypi/mitmproxy :alt: Latest Version -.. |python-versions| image:: https://img.shields.io/pypi/pyversions/mitmproxy.svg +.. |python_versions| image:: https://img.shields.io/pypi/pyversions/mitmproxy.svg :target: https://pypi.python.org/pypi/mitmproxy :alt: Supported Python versions - -.. _Python: https://www.python.org/ -.. _virtualenv: http://virtualenv.readthedocs.org/en/latest/ -.. _here: http://virtualenv.readthedocs.org/en/latest/installation.html -.. _autoenv: https://github.com/kennethreitz/autoenv -.. _.env: https://github.com/mitmproxy/mitmproxy/blob/master/.env -.. _Sphinx: http://sphinx-doc.org/ -.. _sphinx-autobuild: https://pypi.python.org/pypi/sphinx-autobuild diff --git a/test/pathod/test_pathoc.py b/test/pathod/test_pathoc.py index e1d32f798..7c9127733 100644 --- a/test/pathod/test_pathoc.py +++ b/test/pathod/test_pathoc.py @@ -2,6 +2,7 @@ import json import cStringIO import re import OpenSSL +import pytest from mock import Mock from netlib import tcp, http, socks @@ -208,6 +209,7 @@ class TestDaemon(_TestDaemon): c.request("ws:/") c.stop() + @pytest.mark.xfail def test_wait_finish(self): c = pathoc.Pathoc( ("127.0.0.1", self.d.port),