diff --git a/tests/unit/plugins/modules/test_nfs_exports_info.py b/tests/unit/plugins/modules/test_nfs_exports_info.py index f440ec1bf0..dc18652a07 100644 --- a/tests/unit/plugins/modules/test_nfs_exports_info.py +++ b/tests/unit/plugins/modules/test_nfs_exports_info.py @@ -1,7 +1,5 @@ # SPDX-FileCopyrightText: (c) 2025, Samaneh Yousefnezhad - # GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) - # SPDX-License-Identifier: GPL-3.0-or-later from __future__ import absolute_import, division, print_function @@ -10,13 +8,15 @@ __metaclass__ = type try: from unittest.mock import mock_open, patch, MagicMock except ImportError: + from mock import mock_open, patch, MagicMock import pytest import sys import os +import hashlib + -# Add plugins/modules to path for direct import sys.path.insert(0, os.path.abspath( os.path.join(os.path.dirname(__file__), '../../../../plugins/modules') )) @@ -33,15 +33,33 @@ def fake_exports_content(): """ +def calculate_expected_digests(content_string): + content_bytes = content_string.encode('utf-8') + digests = {} + hash_algorithms = ['sha256', 'sha1', 'md5'] + for algo in hash_algorithms: + try: + hasher = hashlib.new(algo) + hasher.update(content_bytes) + digests[algo] = hasher.hexdigest() + except ValueError: + pass + return digests + + def test_get_exports_ips_per_share(fake_exports_content): mock_module = MagicMock() - mock_module.digest_from_file.return_value = "fake_sha1_digest" + mock_module.file_exists.return_value = True + mock_module.warn.return_value = None + mock_module.fail_json.side_effect = Exception("fail_json called") + patch_target = "builtins.open" if sys.version_info[0] == 3 else "__builtin__.open" - with patch(patch_target, mock_open(read_data=fake_exports_content)): + + with patch(patch_target, mock_open(read_data=fake_exports_content.encode('utf-8'))): result = get_exports(mock_module, "ips_per_share") - expected = { + expected_exports_info = { '/srv/nfs1': [ {'ip': '192.168.1.10', 'options': ['rw', 'sync']}, {'ip': '192.168.1.20', 'options': ['ro', 'sync']} @@ -51,19 +69,28 @@ def test_get_exports_ips_per_share(fake_exports_content): ] } - assert result['exports_info'] == expected - assert result['file_digest'] == "fake_sha1_digest" + expected_file_digests = calculate_expected_digests(fake_exports_content) + + assert result['exports_info'] == expected_exports_info + assert result['file_digest'] == expected_file_digests def test_get_exports_shares_per_ip(fake_exports_content): mock_module = MagicMock() - mock_module.digest_from_file.return_value = "fake_sha1_digest" + + + + mock_module.file_exists.return_value = True + mock_module.warn.return_value = None + mock_module.fail_json.side_effect = Exception("fail_json called") + patch_target = "builtins.open" if sys.version_info[0] == 3 else "__builtin__.open" - with patch(patch_target, mock_open(read_data=fake_exports_content)): + + with patch(patch_target, mock_open(read_data=fake_exports_content.encode('utf-8'))): result = get_exports(mock_module, "shares_per_ip") - expected = { + expected_exports_info = { '192.168.1.10': [ {'folder': '/srv/nfs1', 'options': ['rw', 'sync']} ], @@ -75,5 +102,7 @@ def test_get_exports_shares_per_ip(fake_exports_content): ] } - assert result['exports_info'] == expected - assert result['file_digest'] == "fake_sha1_digest" + expected_file_digests = calculate_expected_digests(fake_exports_content) + + assert result['exports_info'] == expected_exports_info + assert result['file_digest'] == expected_file_digests