From e3331d6c2fa069b2f7bee2f652d5817a9a366d4a Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Wed, 24 May 2023 07:10:01 +0100 Subject: [PATCH] Fixed file client private attribute reference on `SaltMakoTemplateLookup` Fixes #64280 Signed-off-by: Pedro Algarvio --- changelog/64280.fixed.md | 1 + salt/utils/mako.py | 6 ++++-- tests/pytests/unit/utils/test_mako.py | 28 +++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 changelog/64280.fixed.md create mode 100644 tests/pytests/unit/utils/test_mako.py diff --git a/changelog/64280.fixed.md b/changelog/64280.fixed.md new file mode 100644 index 000000000000..5a9b905dd0a0 --- /dev/null +++ b/changelog/64280.fixed.md @@ -0,0 +1 @@ +Fixed file client private attribute reference on `SaltMakoTemplateLookup` diff --git a/salt/utils/mako.py b/salt/utils/mako.py index 037d5d86debf..4397ae8cc7d9 100644 --- a/salt/utils/mako.py +++ b/salt/utils/mako.py @@ -99,8 +99,10 @@ def cache_file(self, fpath): ) def destroy(self): - if self.client: + if self._file_client: + file_client = self._file_client + self._file_client = None try: - self.client.destroy() + file_client.destroy() except AttributeError: pass diff --git a/tests/pytests/unit/utils/test_mako.py b/tests/pytests/unit/utils/test_mako.py new file mode 100644 index 000000000000..952cf44652ee --- /dev/null +++ b/tests/pytests/unit/utils/test_mako.py @@ -0,0 +1,28 @@ +import pytest + +from tests.support.mock import Mock, call, patch + +pytest.importorskip("mako") + +# This import needs to be after the above importorskip so that no ImportError +# is raised if Mako is not installed +from salt.utils.mako import SaltMakoTemplateLookup + + +def test_mako_template_lookup(minion_opts): + """ + The shudown method can be called without raising an exception when the + file_client does not have a destroy method + """ + # Test SaltCacheLoader creating and destroying the file client created + file_client = Mock() + with patch("salt.fileclient.get_file_client", return_value=file_client): + loader = SaltMakoTemplateLookup(minion_opts) + assert loader._file_client is None + assert loader.file_client() is file_client + assert loader._file_client is file_client + try: + loader.destroy() + except AttributeError: + pytest.fail("Regression when calling SaltMakoTemplateLookup.destroy()") + assert file_client.mock_calls == [call.destroy()]