diff --git a/changelog/65644.fixed.md b/changelog/65644.fixed.md new file mode 100644 index 000000000000..d68078574cdc --- /dev/null +++ b/changelog/65644.fixed.md @@ -0,0 +1 @@ +Use unittest.mock for newer Python versions. diff --git a/requirements/pytest.txt b/requirements/pytest.txt index cafa2ec25a1f..51a8f3699418 100644 --- a/requirements/pytest.txt +++ b/requirements/pytest.txt @@ -1,4 +1,4 @@ -mock >= 3.0.0 +mock >= 3.0.0; python_version < '3.8' # PyTest docker pytest >= 7.2.0 diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 956d3bf522b0..317266f6988d 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -229,8 +229,6 @@ markupsafe==2.1.2 # werkzeug mercurial==6.4.4 # via -r requirements/static/ci/darwin.in -mock==5.1.0 - # via -r requirements/pytest.txt more-itertools==9.1.0 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index ffc467b40c04..132cc504c8b0 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -232,8 +232,6 @@ markupsafe==2.1.2 # werkzeug mercurial==6.4.4 # via -r requirements/static/ci/freebsd.in -mock==5.1.0 - # via -r requirements/pytest.txt more-itertools==9.1.0 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index 4d31a8e5e295..df0fe2ddadc2 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -258,8 +258,6 @@ markupsafe==2.1.2 # werkzeug mercurial==6.4.4 # via -r requirements/static/ci/linux.in -mock==5.1.0 - # via -r requirements/pytest.txt more-itertools==9.1.0 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index 3651ed2dca33..115848134d0f 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -210,8 +210,6 @@ markupsafe==2.1.2 # jinja2 # mako # werkzeug -mock==5.1.0 - # via -r requirements/pytest.txt more-itertools==9.1.0 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt diff --git a/requirements/static/ci/py3.11/darwin.txt b/requirements/static/ci/py3.11/darwin.txt index 29f2761e139d..8b6b694887a7 100644 --- a/requirements/static/ci/py3.11/darwin.txt +++ b/requirements/static/ci/py3.11/darwin.txt @@ -227,8 +227,6 @@ markupsafe==2.1.2 # werkzeug mercurial==6.4.4 # via -r requirements/static/ci/darwin.in -mock==5.1.0 - # via -r requirements/pytest.txt more-itertools==9.1.0 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt diff --git a/requirements/static/ci/py3.11/freebsd.txt b/requirements/static/ci/py3.11/freebsd.txt index 781e6afd9c7b..7ae38ff3809b 100644 --- a/requirements/static/ci/py3.11/freebsd.txt +++ b/requirements/static/ci/py3.11/freebsd.txt @@ -230,8 +230,6 @@ markupsafe==2.1.2 # werkzeug mercurial==6.4.4 # via -r requirements/static/ci/freebsd.in -mock==5.1.0 - # via -r requirements/pytest.txt more-itertools==9.1.0 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt diff --git a/requirements/static/ci/py3.11/linux.txt b/requirements/static/ci/py3.11/linux.txt index a7f4bdf04b67..e92192d97f70 100644 --- a/requirements/static/ci/py3.11/linux.txt +++ b/requirements/static/ci/py3.11/linux.txt @@ -254,8 +254,6 @@ markupsafe==2.1.2 # werkzeug mercurial==6.4.4 # via -r requirements/static/ci/linux.in -mock==5.1.0 - # via -r requirements/pytest.txt more-itertools==9.1.0 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt diff --git a/requirements/static/ci/py3.11/windows.txt b/requirements/static/ci/py3.11/windows.txt index 099017171dee..2fd06699384f 100644 --- a/requirements/static/ci/py3.11/windows.txt +++ b/requirements/static/ci/py3.11/windows.txt @@ -208,8 +208,6 @@ markupsafe==2.1.2 # jinja2 # mako # werkzeug -mock==5.1.0 - # via -r requirements/pytest.txt more-itertools==9.1.0 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index 63e17ed9e6ac..ab2bc8fb2947 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -236,8 +236,6 @@ markupsafe==2.1.2 # werkzeug mercurial==6.4.4 # via -r requirements/static/ci/freebsd.in -mock==5.1.0 - # via -r requirements/pytest.txt more-itertools==9.1.0 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 36ee8e0b975a..e5c61a3edcfc 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -262,8 +262,6 @@ markupsafe==2.1.2 # werkzeug mercurial==6.4.4 # via -r requirements/static/ci/linux.in -mock==5.1.0 - # via -r requirements/pytest.txt more-itertools==9.1.0 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index d24ec5d31354..ab1c0bf05d61 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -214,8 +214,6 @@ markupsafe==2.1.2 # jinja2 # mako # werkzeug -mock==5.1.0 - # via -r requirements/pytest.txt more-itertools==9.1.0 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index d419d6dfb0db..2cdb57e27375 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -229,8 +229,6 @@ markupsafe==2.1.2 # werkzeug mercurial==6.4.4 # via -r requirements/static/ci/darwin.in -mock==5.1.0 - # via -r requirements/pytest.txt more-itertools==9.1.0 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index 1c2bcec7afa3..8ab4c5377ac3 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -232,8 +232,6 @@ markupsafe==2.1.2 # werkzeug mercurial==6.4.4 # via -r requirements/static/ci/freebsd.in -mock==5.1.0 - # via -r requirements/pytest.txt more-itertools==9.1.0 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index 48617bf1fcdc..673521b55d87 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -260,8 +260,6 @@ markupsafe==2.1.2 # werkzeug mercurial==6.4.4 # via -r requirements/static/ci/linux.in -mock==5.1.0 - # via -r requirements/pytest.txt more-itertools==9.1.0 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index 393205d4ef47..17f7da742553 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -210,8 +210,6 @@ markupsafe==2.1.2 # jinja2 # mako # werkzeug -mock==5.1.0 - # via -r requirements/pytest.txt more-itertools==9.1.0 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt diff --git a/tests/pytests/unit/cloud/clouds/test_dimensiondata.py b/tests/pytests/unit/cloud/clouds/test_dimensiondata.py index e19680500449..3ef2fe2ed7ac 100644 --- a/tests/pytests/unit/cloud/clouds/test_dimensiondata.py +++ b/tests/pytests/unit/cloud/clouds/test_dimensiondata.py @@ -10,9 +10,7 @@ from salt.cloud.clouds import dimensiondata from salt.exceptions import SaltCloudSystemExit from salt.utils.versions import Version -from tests.support.mock import MagicMock -from tests.support.mock import __version__ as mock_version -from tests.support.mock import patch +from tests.support.mock import MagicMock, patch try: import libcloud.security @@ -144,8 +142,7 @@ def test_import(): with patch("salt.config.check_driver_dependencies", return_value=True) as p: get_deps = dimensiondata.get_dependencies() assert get_deps is True - if Version(mock_version) >= Version("2.0.0"): - assert p.call_count >= 1 + assert p.call_count >= 1 def test_provider_matches(): diff --git a/tests/pytests/unit/cloud/clouds/test_gce.py b/tests/pytests/unit/cloud/clouds/test_gce.py index 265818016e80..d70e47d8068e 100644 --- a/tests/pytests/unit/cloud/clouds/test_gce.py +++ b/tests/pytests/unit/cloud/clouds/test_gce.py @@ -11,10 +11,7 @@ from salt.cloud.clouds import gce from salt.exceptions import SaltCloudSystemExit -from salt.utils.versions import Version -from tests.support.mock import MagicMock -from tests.support.mock import __version__ as mock_version -from tests.support.mock import call, patch +from tests.support.mock import MagicMock, call, patch @pytest.fixture @@ -281,8 +278,7 @@ def test_import(): with patch("salt.config.check_driver_dependencies", return_value=True) as p: get_deps = gce.get_dependencies() assert get_deps is True - if Version(mock_version) >= Version("2.0.0"): - p.assert_called_once() + p.assert_called_once() @pytest.mark.parametrize( diff --git a/tests/support/mock.py b/tests/support/mock.py index 2f9970d4b045..0dc16758cb0d 100644 --- a/tests/support/mock.py +++ b/tests/support/mock.py @@ -17,39 +17,35 @@ import copy import errno import fnmatch +import importlib import sys -# By these days, we should blowup if mock is not available -import mock # pylint: disable=blacklisted-external-import - -# pylint: disable=no-name-in-module,no-member -from mock import ( - ANY, - DEFAULT, - FILTER_DIR, - AsyncMock, - MagicMock, - Mock, - NonCallableMagicMock, - NonCallableMock, - PropertyMock, - __version__, - call, - create_autospec, - patch, - sentinel, -) +current_version = (sys.version_info.major, sys.version_info.minor) + +# Prefer unittest.mock for Python versions that are sufficient +if current_version >= (3, 8): + mock = importlib.import_module("unittest.mock") +else: + mock = importlib.import_module("mock") + +ANY = mock.ANY +DEFAULT = mock.DEFAULT +FILTER_DIR = mock.FILTER_DIR +MagicMock = mock.MagicMock +Mock = mock.Mock +NonCallableMagicMock = mock.NonCallableMagicMock +NonCallableMock = mock.NonCallableMock +PropertyMock = mock.PropertyMock +call = mock.call +create_autospec = mock.create_autospec +patch = mock.patch +sentinel = mock.sentinel import salt.utils.stringutils # pylint: disable=no-name-in-module,no-member -__mock_version = tuple( - int(part) for part in mock.__version__.split(".") if part.isdigit() -) # pylint: disable=no-member - - class MockFH: def __init__(self, filename, read_data, *args, **kwargs): self.filename = filename