From 152c5422f1bfce18392dd8d33c54aaa17b5a661c Mon Sep 17 00:00:00 2001 From: Maxwell G <9920591+gotmax23@users.noreply.github.com> Date: Sun, 4 Sep 2022 15:21:31 -0500 Subject: [PATCH] Prefer unitest.mock by universally using compat.mock (#506) * tests.unit.compat.mock: Remove legacy compat code This removes old Python 3.4 compatibility code that is no longer needed. * Prefer unitest.mock by universally using compat.mock `mock` is a backport of the `unittest.mock` module from the stdlib, and there's no reason to use it on newer Python versions. --- tests/unit/compat/mock.py | 79 ------------------- .../acme/test_backend_cryptography.py | 2 +- .../acme/test_backend_openssl_cli.py | 2 +- .../module_utils/acme/test_challenges.py | 2 +- .../plugins/module_utils/acme/test_errors.py | 2 +- .../unit/plugins/module_utils/acme/test_io.py | 2 +- .../plugins/module_utils/acme/test_orders.py | 2 +- 7 files changed, 6 insertions(+), 85 deletions(-) diff --git a/tests/unit/compat/mock.py b/tests/unit/compat/mock.py index f8f565dc..515b94a3 100644 --- a/tests/unit/compat/mock.py +++ b/tests/unit/compat/mock.py @@ -28,82 +28,3 @@ except ImportError: from mock import * except ImportError: print('You need the mock library installed on python2.x to run tests') - - -# Prior to 3.4.4, mock_open cannot handle binary read_data -if sys.version_info >= (3,) and sys.version_info < (3, 4, 4): - file_spec = None - - def _iterate_read_data(read_data): - # Helper for mock_open: - # Retrieve lines from read_data via a generator so that separate calls to - # readline, read, and readlines are properly interleaved - sep = b'\n' if isinstance(read_data, bytes) else '\n' - data_as_list = [l + sep for l in read_data.split(sep)] - - if data_as_list[-1] == sep: - # If the last line ended in a newline, the list comprehension will have an - # extra entry that's just a newline. Remove this. - data_as_list = data_as_list[:-1] - else: - # If there wasn't an extra newline by itself, then the file being - # emulated doesn't have a newline to end the last line remove the - # newline that our naive format() added - data_as_list[-1] = data_as_list[-1][:-1] - - for line in data_as_list: - yield line - - def mock_open(mock=None, read_data=''): - """ - A helper function to create a mock to replace the use of `open`. It works - for `open` called directly or used as a context manager. - - The `mock` argument is the mock object to configure. If `None` (the - default) then a `MagicMock` will be created for you, with the API limited - to methods or attributes available on standard file handles. - - `read_data` is a string for the `read` methoddline`, and `readlines` of the - file handle to return. This is an empty string by default. - """ - def _readlines_side_effect(*args, **kwargs): - if handle.readlines.return_value is not None: - return handle.readlines.return_value - return list(_data) - - def _read_side_effect(*args, **kwargs): - if handle.read.return_value is not None: - return handle.read.return_value - return type(read_data)().join(_data) - - def _readline_side_effect(): - if handle.readline.return_value is not None: - while True: - yield handle.readline.return_value - for line in _data: - yield line - - global file_spec - if file_spec is None: - import _io - file_spec = list(set(dir(_io.TextIOWrapper)).union(set(dir(_io.BytesIO)))) - - if mock is None: - mock = MagicMock(name='open', spec=open) - - handle = MagicMock(spec=file_spec) - handle.__enter__.return_value = handle - - _data = _iterate_read_data(read_data) - - handle.write.return_value = None - handle.read.return_value = None - handle.readline.return_value = None - handle.readlines.return_value = None - - handle.read.side_effect = _read_side_effect - handle.readline.side_effect = _readline_side_effect() - handle.readlines.side_effect = _readlines_side_effect - - mock.return_value = handle - return mock diff --git a/tests/unit/plugins/module_utils/acme/test_backend_cryptography.py b/tests/unit/plugins/module_utils/acme/test_backend_cryptography.py index 0fd4f3a3..59da68a3 100644 --- a/tests/unit/plugins/module_utils/acme/test_backend_cryptography.py +++ b/tests/unit/plugins/module_utils/acme/test_backend_cryptography.py @@ -8,7 +8,7 @@ __metaclass__ = type import pytest -from mock import MagicMock +from ansible_collections.community.crypto.tests.unit.compat.mock import MagicMock from ansible_collections.community.crypto.plugins.module_utils.acme.backend_cryptography import ( diff --git a/tests/unit/plugins/module_utils/acme/test_backend_openssl_cli.py b/tests/unit/plugins/module_utils/acme/test_backend_openssl_cli.py index 2fb85340..dd30cf79 100644 --- a/tests/unit/plugins/module_utils/acme/test_backend_openssl_cli.py +++ b/tests/unit/plugins/module_utils/acme/test_backend_openssl_cli.py @@ -8,7 +8,7 @@ __metaclass__ = type import pytest -from mock import MagicMock +from ansible_collections.community.crypto.tests.unit.compat.mock import MagicMock from ansible_collections.community.crypto.plugins.module_utils.acme.backend_openssl_cli import ( diff --git a/tests/unit/plugins/module_utils/acme/test_challenges.py b/tests/unit/plugins/module_utils/acme/test_challenges.py index 83c8d7da..18e4118f 100644 --- a/tests/unit/plugins/module_utils/acme/test_challenges.py +++ b/tests/unit/plugins/module_utils/acme/test_challenges.py @@ -8,7 +8,7 @@ __metaclass__ = type import pytest -from mock import MagicMock +from ansible_collections.community.crypto.tests.unit.compat.mock import MagicMock from ansible_collections.community.crypto.plugins.module_utils.acme.challenges import ( diff --git a/tests/unit/plugins/module_utils/acme/test_errors.py b/tests/unit/plugins/module_utils/acme/test_errors.py index a6771bc1..7285b7c3 100644 --- a/tests/unit/plugins/module_utils/acme/test_errors.py +++ b/tests/unit/plugins/module_utils/acme/test_errors.py @@ -8,7 +8,7 @@ __metaclass__ = type import pytest -from mock import MagicMock +from ansible_collections.community.crypto.tests.unit.compat.mock import MagicMock from ansible_collections.community.crypto.plugins.module_utils.acme.errors import ( diff --git a/tests/unit/plugins/module_utils/acme/test_io.py b/tests/unit/plugins/module_utils/acme/test_io.py index a2a04bb6..818a5fe8 100644 --- a/tests/unit/plugins/module_utils/acme/test_io.py +++ b/tests/unit/plugins/module_utils/acme/test_io.py @@ -6,7 +6,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from mock import MagicMock +from ansible_collections.community.crypto.tests.unit.compat.mock import MagicMock from ansible_collections.community.crypto.plugins.module_utils.acme.io import ( diff --git a/tests/unit/plugins/module_utils/acme/test_orders.py b/tests/unit/plugins/module_utils/acme/test_orders.py index bbd23ee5..a25f9e16 100644 --- a/tests/unit/plugins/module_utils/acme/test_orders.py +++ b/tests/unit/plugins/module_utils/acme/test_orders.py @@ -8,7 +8,7 @@ __metaclass__ = type import pytest -from mock import MagicMock +from ansible_collections.community.crypto.tests.unit.compat.mock import MagicMock from ansible_collections.community.crypto.plugins.module_utils.acme.orders import (