Metadata-Version: 1.2
Name: pytest-socket
Version: 0.4.0
Summary: Pytest Plugin to disable socket calls during tests
Home-page: https://pypi.org/project/pytest-socket/
Author: Mike Fiedler
Author-email: miketheman@gmail.com
License: UNKNOWN
Description: # pytest-socket
        
        [![PyPI current version](https://img.shields.io/pypi/v/pytest-socket.svg)](https://pypi.python.org/pypi/pytest-socket)
        [![Python Support](https://img.shields.io/pypi/pyversions/pytest-socket.svg)](https://pypi.python.org/pypi/pytest-socket)
        [![Tests](https://github.com/miketheman/pytest-socket/workflows/Python%20Tests/badge.svg)](https://github.com/miketheman/pytest-socket/actions?query=workflow%3A%22Python+Tests%22)
        [![Maintainability](https://api.codeclimate.com/v1/badges/1608a75b1c3a20211992/maintainability)](https://codeclimate.com/github/miketheman/pytest-socket/maintainability)
        [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket?ref=badge_shield)
        
        A plugin to use with Pytest to disable or restrict `socket` calls during
        tests to ensure network calls are prevented.
        
        ---
        
        ## Features
        
        - Disables all network calls flowing through Python\'s `socket` interface.
        
        ## Requirements
        
        - [Pytest](https://github.com/pytest-dev/pytest) 3.6.3 or greater
        
        ## Installation
        
        You can install `pytest-socket` via [pip](https://pypi.python.org/pypi/pip/)
        from [PyPI](https://pypi.python.org/pypi):
        
        ```console
        $ pip install pytest-socket
        ```
        
        or add to your `pyproject.toml` for [poetry](https://python-poetry.org/):
        
        ```ini
        [tool.poetry.dev-dependencies]
        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`:
        
        ```ini
        [pytest]
        addopts = --disable-socket
        ```
        
        or update your `conftest.py` to include:
        
        ```python
        from pytest_socket import disable_socket
        
        def pytest_runtest_setup():
            disable_socket()
        ```
        
        To enable Unix sockets during the test run (e.g. for async), add this option:
        
        ```ini
        [pytest]
        addopts = --disable-socket --allow-unix-socket
        ```
        
        To enable specific tests use of `socket`, pass in the fixture to the test or
        use a marker:
        
        ```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:
        
        ```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
        
        ```ini
        [pytest]
        addopts = --allow-hosts=127.0.0.1,127.0.1.1
        ```
        
        ### Frequently Asked Questions
        
        Q: Why is network access disabled in some of my tests but not others?
        
        A: pytest's default fixture scope is "function", which `socket_enabled` uses.
        If you create another fixture that creates a socket usage that has a "higher"
        instantiation order, such as at the module/class/session, then the higher order
        fixture will be resolved first, and won't be disabled during the tests.
        Read more in [this excellent example](https://github.com/miketheman/pytest-socket/issues/45#issue-679835420)
        and more about [pytest fixture order here](https://docs.pytest.org/en/stable/fixture.html#fixture-instantiation-order).
        
        This behavior may change in the future, as we learn more about pytest
        fixture order, and what users expect to happen.
        
        ## Contributing
        
        Contributions are very welcome. Tests can be run with
        [pytest](https://github.com/pytest-dev/pytest), please ensure the
        coverage at least stays the same before you submit a pull request.
        
        ## License
        
        Distributed under the terms of the
        [MIT](http://opensource.org/licenses/MIT) license, "pytest-socket" is
        free and open source software
        
        [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket?ref=badge_large)
        
        ## Issues
        
        If you encounter any problems, please [file an issue](https://github.com/miketheman/pytest-socket/issues)
        along with a detailed description.
        
        ## References
        
        This [Pytest](https://github.com/pytest-dev/pytest) plugin was generated with
        [Cookiecutter](https://github.com/audreyr/cookiecutter) along with
        [\@hackebrot](https://github.com/hackebrot)\'s
        [Cookiecutter-pytest-plugin](https://github.com/pytest-dev/cookiecutter-pytest-plugin)
        template.
        
        This plugin came about due to the efforts by
        [\@hangtwenty](https://github.com/hangtwenty) solving a [StackOverflow
        question](https://stackoverflow.com/a/30064664), then converted into a
        pytest plugin by [\@miketheman](https://github.com/miketheman).
        
Platform: UNKNOWN
Requires-Python: >=3.6,<4.0
