No description
  • Python 96.3%
  • Makefile 3.7%
Find a file
2020-10-20 11:43:14 -04:00
.github chore(deps): update actions/setup-python action to v2 2020-10-20 11:43:14 -04:00
tests fix: correctly set fixture when using markers 2020-05-31 10:54:26 -04:00
.codeclimate.yml chore: convert from pip/tox to poetry 2020-04-10 17:58:43 -04:00
.coveragerc chore: convert from pip/tox to poetry 2020-04-10 17:58:43 -04:00
.editorconfig Ensure files conform to a standard while editing 2018-06-26 09:10:00 -04:00
.flake8 test: restore flake8 testing 2020-04-10 18:15:05 -04:00
.gitignore chore: convert from pip/tox to poetry 2020-04-10 17:58:43 -04:00
CHANGELOG.rst pytest-socket, v0.3.5 2020-05-31 10:57:09 -04:00
LICENSE 🎉 Initial commit 2017-06-01 12:21:56 -04:00
Makefile chore: convert publishing to poetry 2020-04-10 18:28:25 -04:00
pyproject.toml chore(deps): update dependency pytest to v6 2020-08-22 10:28:29 -04:00
pytest.ini test: restore flake8 testing 2020-04-10 18:15:05 -04:00
pytest_socket.py fix: correctly set fixture when using markers 2020-05-31 10:54:26 -04:00
README.rst chore: convert from pip/tox to poetry 2020-04-10 17:58:43 -04:00
renovate.json Add renovate.json (#26) 2019-04-13 09:45:39 -04:00

=============
pytest-socket
=============

.. image:: https://img.shields.io/pypi/v/pytest-socket.svg
    :target: https://pypi.python.org/pypi/pytest-socket

.. image:: https://img.shields.io/pypi/pyversions/pytest-socket.svg
    :target: https://pypi.python.org/pypi/pytest-socket

.. image:: https://github.com/miketheman/pytest-socket/workflows/Python%20Tests/badge.svg
    :target: https://github.com/miketheman/pytest-socket/actions?query=workflow%3A%22Python+Tests%22
    :alt: Python Tests

.. image:: https://api.codeclimate.com/v1/badges/1608a75b1c3a20211992/maintainability
   :target: https://codeclimate.com/github/miketheman/pytest-socket/maintainability
   :alt: Maintainability

.. image:: https://app.fossa.io/api/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket.svg?type=shield
   :target: https://app.fossa.io/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket?ref=badge_shield
   :alt: FOSSA Status


A plugin to use with Pytest to disable or restrict ``socket`` calls during tests to ensure network calls are prevented.

----

This `Pytest`_ plugin was generated with `Cookiecutter`_ along with `@hackebrot`_'s `Cookiecutter-pytest-plugin`_ template.


Features
--------

* Disables all network calls flowing through Python's ``socket`` interface.


Requirements
------------

* `Pytest`_ 3.6.3 or greater


Installation
------------

You can install "pytest-socket" via `pip`_ from `PyPI`_::

    $ pip install pytest-socket


Usage
-----

* Run ``pytest --disable-socket``, tests should fail on any access to ``socket`` or libraries using
  socket with a ``SocketBlockedError``.

  To add this flag as the default behavior, add this section to your ``pytest.ini`` or ``setup.cfg``:

  .. code:: ini

    [pytest]
    addopts = --disable-socket


  or update your ``conftest.py`` to include:

  .. code:: python

    from pytest_socket import disable_socket

    def pytest_runtest_setup():
        disable_socket()


* To enable specific tests use of ``socket``, pass in the fixture to the test or use a marker:

  .. code:: python

    def test_explicitly_enable_socket(socket_enabled):
        assert socket.socket(socket.AF_INET, socket.SOCK_STREAM)


    @pytest.mark.enable_socket
    def test_explicitly_enable_socket_with_mark():
        assert socket.socket(socket.AF_INET, socket.SOCK_STREAM)

* To allow only specific hosts per-test:

  .. code:: python

    @pytest.mark.allow_hosts(['127.0.0.1'])
    def test_explicitly_enable_socket_with_mark():
        assert socket.socket.connect(('127.0.0.1', 80))

or for whole test run

  .. code:: ini

    [pytest]
    addopts = --allow-hosts=127.0.0.1,127.0.1.1


Contributing
------------
Contributions are very welcome. Tests can be run with `pytest`_, please ensure
the coverage at least stays the same before you submit a pull request.

License
-------

Distributed under the terms of the `MIT`_ license, "pytest-socket" is free and open source software

.. image:: https://app.fossa.io/api/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket.svg?type=large
   :target: https://app.fossa.io/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket?ref=badge_large
   :alt: FOSSA Status

Issues
------

If you encounter any problems, please `file an issue`_ along with a detailed description.


References
----------

This plugin came about due to the efforts by `@hangtwenty`_ solving a `StackOverflow question`_,
then converted into a pytest plugin by `@miketheman`_.


.. _`Cookiecutter`: https://github.com/audreyr/cookiecutter
.. _`@hackebrot`: https://github.com/hackebrot
.. _`MIT`: http://opensource.org/licenses/MIT
.. _`cookiecutter-pytest-plugin`: https://github.com/pytest-dev/cookiecutter-pytest-plugin
.. _`file an issue`: https://github.com/miketheman/pytest-socket/issues
.. _`pytest`: https://github.com/pytest-dev/pytest
.. _`tox`: https://tox.readthedocs.io/en/latest/
.. _`pip`: https://pypi.python.org/pypi/pip/
.. _`PyPI`: https://pypi.python.org/pypi
.. _`@hangtwenty`: https://github.com/hangtwenty
.. _`StackOverflow question`: https://stackoverflow.com/a/30064664
.. _`@miketheman`: https://github.com/miketheman