Hello community, here is the log from the commit of package salt-shaptools for openSUSE:Factory checked in at 2020-10-16 16:16:07 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/salt-shaptools (Old) and /work/SRC/openSUSE:Factory/.salt-shaptools.new.3486 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "salt-shaptools" Fri Oct 16 16:16:07 2020 rev:21 rq:842054 version:0.3.10+git.1602832357.46de636 Changes: -------- --- /work/SRC/openSUSE:Factory/salt-shaptools/salt-shaptools.changes 2020-09-28 14:29:46.878184926 +0200 +++ /work/SRC/openSUSE:Factory/.salt-shaptools.new.3486/salt-shaptools.changes 2020-10-16 16:16:49.656737585 +0200 @@ -1,0 +2,5 @@ +Thu Oct 15 07:14:20 UTC 2020 - Xabier Arbulu <xarb...@suse.com> + +- Improve extract_pydbapi to check recursively in subfolders + +------------------------------------------------------------------- Old: ---- salt-shaptools-0.3.10+git.1601276788.1869cbd.tar.gz New: ---- salt-shaptools-0.3.10+git.1602832357.46de636.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ salt-shaptools.spec ++++++ --- /var/tmp/diff_new_pack.6FHy6L/_old 2020-10-16 16:16:50.264737772 +0200 +++ /var/tmp/diff_new_pack.6FHy6L/_new 2020-10-16 16:16:50.268737773 +0200 @@ -19,7 +19,7 @@ # See also https://en.opensuse.org/openSUSE:Specfile_guidelines Name: salt-shaptools -Version: 0.3.10+git.1601276788.1869cbd +Version: 0.3.10+git.1602832357.46de636 Release: 0 Summary: Salt modules and states for SAP Applications and SLE-HA components management ++++++ _service ++++++ --- /var/tmp/diff_new_pack.6FHy6L/_old 2020-10-16 16:16:50.316737788 +0200 +++ /var/tmp/diff_new_pack.6FHy6L/_new 2020-10-16 16:16:50.320737789 +0200 @@ -5,7 +5,7 @@ <param name="exclude">.git</param> <param name="filename">salt-shaptools</param> <param name="versionformat">0.3.10+git.%ct.%h</param> - <param name="revision">1869cbdf21cac302f9a64609ffb1c5e0916bb76c</param> + <param name="revision">46de636d92c548924276b07d94eb92677777cb25</param> </service> <service name="recompress" mode="disabled"> ++++++ salt-shaptools-0.3.10+git.1601276788.1869cbd.tar.gz -> salt-shaptools-0.3.10+git.1602832357.46de636.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/salt-shaptools-0.3.10+git.1601276788.1869cbd/salt/modules/hanamod.py new/salt-shaptools-0.3.10+git.1602832357.46de636/salt/modules/hanamod.py --- old/salt-shaptools-0.3.10+git.1601276788.1869cbd/salt/modules/hanamod.py 2020-09-28 09:06:28.000000000 +0200 +++ new/salt-shaptools-0.3.10+git.1602832357.46de636/salt/modules/hanamod.py 2020-10-16 09:12:37.000000000 +0200 @@ -27,6 +27,7 @@ import time import re import sys +import os if sys.version_info.major == 2: # pragma: no cover import imp @@ -959,9 +960,17 @@ reload_module(hdb_connector) -def _find_sap_folder(software_folders, folder_pattern): +def _find_sap_folder(software_folders, folder_pattern, recursion_level=0): ''' Find a SAP folder following a recursive approach using the LABEL and LABELIDX files + + Args: + software_folder (list): List of subfolder where the SAP folder is looked for` + folder_pattern (str): Pattern of the LABEL.ASC to look fo + recursion_level (int): Number of subfolder levels to check + Examples: + 1 means to check recursively in the subfolder present in software_folders folders + 2 means to check in the first subfolder and the folder within ''' for folder in software_folders: label = '{}/{}'.format(folder, LABEL_FILE) @@ -989,6 +998,14 @@ except IOError: LOGGER.debug('%s file not found in %s. Skipping folder', LABELIDX_FILE, folder) + if recursion_level: + subfolders = [os.path.join(folder, found_dir) for found_dir in + os.listdir(folder) if os.path.isdir(os.path.join(folder, found_dir))] + try: + return _find_sap_folder(subfolders, folder_pattern, recursion_level-1) + except SapFolderNotFoundError: + continue + raise SapFolderNotFoundError( 'SAP folder with {} pattern not found'.format(folder_pattern.pattern)) @@ -1023,7 +1040,10 @@ hana_client_pattern = re.compile('^HDB_CLIENT:{}.*:{}:.*'.format( hana_version, current_platform)) try: - hana_client_folder = _find_sap_folder(software_folders, hana_client_pattern) + # recursion_level is set to 1 because the HANA client + # is extracted in SAP_HANA_CLIENT if the file is compressed as SAR + hana_client_folder = _find_sap_folder( + software_folders, hana_client_pattern, recursion_level=1) except SapFolderNotFoundError: raise exceptions.CommandExecutionError('HANA client not found') pydbapi_file = '{}/client/{}'.format(hana_client_folder, name) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/salt-shaptools-0.3.10+git.1601276788.1869cbd/salt-shaptools.changes new/salt-shaptools-0.3.10+git.1602832357.46de636/salt-shaptools.changes --- old/salt-shaptools-0.3.10+git.1601276788.1869cbd/salt-shaptools.changes 2020-09-28 09:06:28.000000000 +0200 +++ new/salt-shaptools-0.3.10+git.1602832357.46de636/salt-shaptools.changes 2020-10-16 09:12:37.000000000 +0200 @@ -1,4 +1,9 @@ ------------------------------------------------------------------- +Thu Oct 15 07:14:20 UTC 2020 - Xabier Arbulu <xarb...@suse.com> + +- Improve extract_pydbapi to check recursively in subfolders + +------------------------------------------------------------------- Thu Sep 24 12:42:59 UTC 2020 - Xabier Arbulu <xarb...@suse.com> - Implement a new state to set the ENSA version grains data diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/modules/test_crmshmod.py new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/modules/test_crmshmod.py --- old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/modules/test_crmshmod.py 2020-09-28 09:06:28.000000000 +0200 +++ new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/modules/test_crmshmod.py 2020-10-16 09:12:37.000000000 +0200 @@ -16,16 +16,13 @@ from tests.support import mock from tests.support.mock import ( MagicMock, - patch, - NO_MOCK, - NO_MOCK_REASON + patch ) # Import Salt Libs import salt.modules.crmshmod as crmshmod -@skipIf(NO_MOCK, NO_MOCK_REASON) class CrmshModuleTest(TestCase, LoaderModuleMockMixin): ''' This class contains a set of functions that test salt.modules.crm. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/modules/test_drbdmod.py new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/modules/test_drbdmod.py --- old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/modules/test_drbdmod.py 2020-09-28 09:06:28.000000000 +0200 +++ new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/modules/test_drbdmod.py 2020-10-16 09:12:37.000000000 +0200 @@ -14,16 +14,13 @@ from tests.support.unit import TestCase, skipIf from tests.support.mock import ( MagicMock, - patch, - NO_MOCK, - NO_MOCK_REASON + patch ) # Import Salt Libs import salt.modules.drbdmod as drbd -@skipIf(NO_MOCK, NO_MOCK_REASON) class DrbdTestCase(TestCase, LoaderModuleMockMixin): ''' Test cases for salt.modules.drbd diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/modules/test_hanamod.py new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/modules/test_hanamod.py --- old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/modules/test_hanamod.py 2020-09-28 09:06:28.000000000 +0200 +++ new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/modules/test_hanamod.py 2020-10-16 09:12:37.000000000 +0200 @@ -18,16 +18,13 @@ from tests.support.mock import ( MagicMock, patch, - mock_open, - NO_MOCK, - NO_MOCK_REASON + mock_open ) # Import Salt Libs import salt.modules.hanamod as hanamod -@skipIf(NO_MOCK, NO_MOCK_REASON) class HanaModuleTest(TestCase, LoaderModuleMockMixin): ''' This class contains a set of functions that test salt.modules.hana. @@ -887,8 +884,8 @@ def test_find_sap_folder_contain_units(self, mock_debug): mock_pattern = mock.Mock(pattern='my_pattern') mock_pattern.match.side_effect = [False, True] - with patch('salt.utils.files.fopen', mock_open(read_data= - ['data\n', 'DATA_UNITS\n', 'data_2\n'])) as mock_file: + with patch('salt.utils.files.fopen', mock_open(read_data=[ + 'data\n', 'DATA_UNITS\n', 'data_2\n'])) as mock_file: folder = hanamod._find_sap_folder(['1234', '5678'], mock_pattern) mock_pattern.match.assert_has_calls([ @@ -901,13 +898,73 @@ assert folder in '1234/DATA_UNITS' @mock.patch('logging.Logger.debug') + @mock.patch('os.path.isdir') + @mock.patch('os.listdir') + def test_find_sap_folder_contain_subfolder( + self, mock_listdir, mock_isdir, mock_debug): + mock_pattern = mock.Mock(pattern='my_pattern') + mock_pattern.match.side_effect = [True] + mock_listdir.return_value = ['folder1', 'folder2', 'file1'] + mock_isdir.side_effect = [True, True, False] + + with patch('salt.utils.files.fopen', mock_open( + read_data=[IOError, IOError, 'subfolder\n'])) as mock_file: + with patch('salt.modules.hanamod._find_sap_folder', + side_effect=hanamod._find_sap_folder) as mock_find_sap_folder: + folder = mock_find_sap_folder(['1234', '5678'], mock_pattern, 2) + + mock_find_sap_folder.assert_has_calls([ + mock.call(['1234', '5678'], mock_pattern, 2), + mock.call(['1234/folder1', '1234/folder2'], mock_pattern, 1) + ]) + + mock_listdir.assert_called_once_with('1234') + + mock_isdir.assert_has_calls([ + mock.call('1234/folder1'), + mock.call('1234/folder2'), + mock.call('1234/file1') + ]) + + assert folder == '1234/folder1' + + @mock.patch('logging.Logger.debug') + @mock.patch('os.path.isdir') + @mock.patch('os.listdir') + def test_find_sap_folder_contain_subfolder_error( + self, mock_listdir, mock_isdir, mock_debug): + mock_pattern = mock.Mock(pattern='my_pattern') + mock_listdir.return_value = ['folder1', 'file1', 'file2'] + mock_isdir.side_effect = [True, False, False] + + with patch('salt.utils.files.fopen', mock_open( + read_data=[IOError, IOError, IOError, IOError])) as mock_file: + with patch('salt.modules.hanamod._find_sap_folder', + side_effect=hanamod._find_sap_folder) as mock_find_sap_folder: + with pytest.raises(hanamod.SapFolderNotFoundError) as err: + mock_find_sap_folder(['1234'], mock_pattern, 1) + + mock_find_sap_folder.assert_has_calls([ + mock.call(['1234'], mock_pattern, 1), + mock.call(['1234/folder1'], mock_pattern, 0) + ]) + + mock_listdir.assert_called_once_with('1234') + + mock_isdir.assert_has_calls([ + mock.call('1234/folder1'), + mock.call('1234/file1'), + mock.call('1234/file2') + ]) + + @mock.patch('logging.Logger.debug') def test_find_sap_folder_contain_units_error(self, mock_debug): mock_pattern = mock.Mock(pattern='my_pattern') mock_pattern.match.side_effect = [False, False] with patch('salt.utils.files.fopen', mock_open(read_data=[ 'data\n', 'DATA_UNITS\n', 'data_2\n', IOError])) as mock_file: with pytest.raises(hanamod.SapFolderNotFoundError) as err: - folder = hanamod._find_sap_folder(['1234'], mock_pattern) + hanamod._find_sap_folder(['1234'], mock_pattern) mock_pattern.match.assert_has_calls([ mock.call('data'), @@ -933,7 +990,7 @@ mock_compile.assert_called_once_with('^HDB_CLIENT:20.*:LINUX_X86_64:.*') mock_find_sap_folders.assert_called_once_with( - ['1234', '5678'], compile_mocked) + ['1234', '5678'], compile_mocked, recursion_level=1) mock_tar.assert_called_once_with( options='-l -xvf', tarfile='my_folder/client/PYDBAPI.tar.gz', cwd='/tmp/output') assert pydbapi_file == 'my_folder/client/PYDBAPI.tar.gz' @@ -952,7 +1009,7 @@ mock_compile.assert_called_once_with('^HDB_CLIENT:20.*:LINUX_X86_64:.*') mock_find_sap_folders.assert_called_once_with( - ['1234', '5678'], compile_mocked) + ['1234', '5678'], compile_mocked, recursion_level=1) assert 'HANA client not found' in str(err.value) def test_extract_pydbapi_software_folders_type_error(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/modules/test_netweavermod.py new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/modules/test_netweavermod.py --- old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/modules/test_netweavermod.py 2020-09-28 09:06:28.000000000 +0200 +++ new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/modules/test_netweavermod.py 2020-10-16 09:12:37.000000000 +0200 @@ -15,16 +15,13 @@ from tests.support import mock from tests.support.mock import ( MagicMock, - patch, - NO_MOCK, - NO_MOCK_REASON + patch ) # Import Salt Libs import salt.modules.netweavermod as netweavermod -@skipIf(NO_MOCK, NO_MOCK_REASON) class NetweaverModuleTest(TestCase, LoaderModuleMockMixin): ''' This class contains a set of functions that test salt.modules.netweavermod. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/modules/test_sapcarmod.py new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/modules/test_sapcarmod.py --- old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/modules/test_sapcarmod.py 2020-09-28 09:06:28.000000000 +0200 +++ new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/modules/test_sapcarmod.py 2020-10-16 09:12:37.000000000 +0200 @@ -17,16 +17,13 @@ from tests.support.mock import ( MagicMock, patch, - mock_open, - NO_MOCK, - NO_MOCK_REASON + mock_open ) # Import Salt Libs import salt.modules.sapcarmod as sapcarmod -@skipIf(NO_MOCK, NO_MOCK_REASON) class SapcarModuleTest(TestCase, LoaderModuleMockMixin): ''' This class contains a set of functions that test salt.modules.sapcarmod. @@ -57,4 +54,3 @@ mock_extract.assert_called_once_with( sapcar_exe='/sapmedia/SAPCAR', sar_file='/sapmedia/IMDB_SERVER_LINUX.SAR', output_dir='/sapmedia/HANA', options='-v') - \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/modules/test_saptunemod.py new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/modules/test_saptunemod.py --- old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/modules/test_saptunemod.py 2020-09-28 09:06:28.000000000 +0200 +++ new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/modules/test_saptunemod.py 2020-10-16 09:12:37.000000000 +0200 @@ -14,16 +14,13 @@ from tests.support.mock import ( MagicMock, patch, - mock_open, - NO_MOCK, - NO_MOCK_REASON + mock_open ) # Import Salt Libs import salt.modules.saptunemod as saptune -@skipIf(NO_MOCK, NO_MOCK_REASON) class SaptuneModuleTest(TestCase, LoaderModuleMockMixin): ''' This class contains a set of functions that test salt.modules.saptune. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/states/test_crmshmod.py new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/states/test_crmshmod.py --- old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/states/test_crmshmod.py 2020-09-28 09:06:28.000000000 +0200 +++ new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/states/test_crmshmod.py 2020-10-16 09:12:37.000000000 +0200 @@ -15,8 +15,6 @@ from tests.support.unit import skipIf, TestCase from tests.support import mock from tests.support.mock import ( - NO_MOCK, - NO_MOCK_REASON, mock_open, MagicMock, patch @@ -26,7 +24,6 @@ import salt.states.crmshmod as crmshmod -@skipIf(NO_MOCK, NO_MOCK_REASON) class CrmshmodTestCase(TestCase, LoaderModuleMockMixin): ''' Test cases for salt.states.crm diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/states/test_drbdmod.py new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/states/test_drbdmod.py --- old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/states/test_drbdmod.py 2020-09-28 09:06:28.000000000 +0200 +++ new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/states/test_drbdmod.py 2020-10-16 09:12:37.000000000 +0200 @@ -13,9 +13,7 @@ from tests.support.unit import TestCase, skipIf from tests.support.mock import ( MagicMock, - patch, - NO_MOCK, - NO_MOCK_REASON + patch ) # Import Salt Libs @@ -25,7 +23,6 @@ RES_NAME = 'dummy' -@skipIf(NO_MOCK, NO_MOCK_REASON) class DrbdStatesTestCase(TestCase, LoaderModuleMockMixin): ''' Test cases for salt.states.drbd diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/states/test_hanamod.py new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/states/test_hanamod.py --- old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/states/test_hanamod.py 2020-09-28 09:06:28.000000000 +0200 +++ new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/states/test_hanamod.py 2020-10-16 09:12:37.000000000 +0200 @@ -13,8 +13,6 @@ from tests.support.unit import skipIf, TestCase from tests.support import mock from tests.support.mock import ( - NO_MOCK, - NO_MOCK_REASON, MagicMock, patch ) @@ -23,7 +21,6 @@ import salt.states.hanamod as hanamod -@skipIf(NO_MOCK, NO_MOCK_REASON) class HanamodTestCase(TestCase, LoaderModuleMockMixin): ''' Test cases for salt.states.hanamod diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/states/test_netweavermod.py new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/states/test_netweavermod.py --- old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/states/test_netweavermod.py 2020-09-28 09:06:28.000000000 +0200 +++ new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/states/test_netweavermod.py 2020-10-16 09:12:37.000000000 +0200 @@ -13,8 +13,6 @@ from tests.support.unit import skipIf, TestCase from tests.support import mock from tests.support.mock import ( - NO_MOCK, - NO_MOCK_REASON, MagicMock, patch ) @@ -23,7 +21,6 @@ import salt.states.netweavermod as netweavermod -@skipIf(NO_MOCK, NO_MOCK_REASON) class NetweavermodTestCase(TestCase, LoaderModuleMockMixin): ''' Test cases for salt.states.netweavermod diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/states/test_sapcarmod.py new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/states/test_sapcarmod.py --- old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/states/test_sapcarmod.py 2020-09-28 09:06:28.000000000 +0200 +++ new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/states/test_sapcarmod.py 2020-10-16 09:12:37.000000000 +0200 @@ -13,8 +13,6 @@ from tests.support.unit import skipIf, TestCase from tests.support import mock from tests.support.mock import ( - NO_MOCK, - NO_MOCK_REASON, MagicMock, patch ) @@ -23,7 +21,6 @@ import salt.states.sapcarmod as sapcar -@skipIf(NO_MOCK, NO_MOCK_REASON) class SapcarmodTestCase(TestCase, LoaderModuleMockMixin): ''' Test cases for salt.states.sapcarmod diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/states/test_saptunemod.py new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/states/test_saptunemod.py --- old/salt-shaptools-0.3.10+git.1601276788.1869cbd/tests/unit/states/test_saptunemod.py 2020-09-28 09:06:28.000000000 +0200 +++ new/salt-shaptools-0.3.10+git.1602832357.46de636/tests/unit/states/test_saptunemod.py 2020-10-16 09:12:37.000000000 +0200 @@ -13,8 +13,6 @@ from tests.support.unit import skipIf, TestCase from tests.support import mock from tests.support.mock import ( - NO_MOCK, - NO_MOCK_REASON, MagicMock, patch ) @@ -23,7 +21,6 @@ import salt.states.saptunemod as saptune -@skipIf(NO_MOCK, NO_MOCK_REASON) class SaptunemodTestCase(TestCase, LoaderModuleMockMixin): ''' Test cases for salt.states.saptunemod