salt/tests/unit/modules/test_seed.py
Dmitry Kuzmenko 6b0921e5ba Py3 tests fixes: don't mock non-callable objects with return_value.
mock = MagicMock(return_value='') works for functions: here mock() will
return the value (empty string). But mock returns the MagicMock object.
Not sure why but it worked in Py2, but in Py3 os.path.join(mock,
'something'), for instance, returns an error.

Fixed the issues by avoiding of using mocks where we can use simple
strings.
2017-05-25 12:33:43 +03:00

92 lines
3.7 KiB
Python

# -*- coding: utf-8 -*-
'''
:codeauthor: :email:`Jayesh Kariya <jayeshk@saltstack.com>`
'''
# Import Python libs
from __future__ import absolute_import
import os
import shutil
import uuid
# Import Salt Testing Libs
from tests.support.mixins import LoaderModuleMockMixin
from tests.support.unit import skipIf, TestCase
from tests.support.mock import (
NO_MOCK,
NO_MOCK_REASON,
MagicMock,
patch)
# Import Salt Libs
import salt.utils
import salt.utils.odict
import salt.modules.seed as seed
@skipIf(NO_MOCK, NO_MOCK_REASON)
class SeedTestCase(TestCase, LoaderModuleMockMixin):
'''
Test cases for salt.modules.seed
'''
def setup_loader_modules(self):
return {seed: {}}
def test_mkconfig_odict(self):
with patch.dict(seed.__opts__,
{'master': 'foo'}):
ddd = salt.utils.odict.OrderedDict()
ddd['b'] = 'b'
ddd['a'] = 'b'
data = seed.mkconfig(ddd, approve_key=False)
with salt.utils.fopen(data['config']) as fic:
fdata = fic.read()
self.assertEqual(fdata, 'b: b\na: b\nmaster: foo\n')
def test_prep_bootstrap(self):
'''
Test to update and get the random script to a random place
'''
with patch.dict(seed.__salt__,
{'config.gather_bootstrap_script': MagicMock(return_value='BS_PATH/BS')}):
with patch.object(uuid, 'uuid4', return_value='UUID'):
with patch.object(os.path, 'exists', return_value=True):
with patch.object(os, 'chmod', return_value=None):
with patch.object(shutil, 'copy', return_value=None):
self.assertEqual(seed.prep_bootstrap('MPT'), ('MPT/tmp/UUID/BS', '/tmp/UUID'))
self.assertEqual(seed.prep_bootstrap('/MPT'), ('/MPT/tmp/UUID/BS', '/tmp/UUID'))
def test_apply_(self):
'''
Test to seed a location (disk image, directory, or block device)
with the minion config, approve the minion's key, and/or install
salt-minion.
'''
mock = MagicMock(side_effect=[False, {'type': 'type',
'target': 'target'},
{'type': 'type', 'target': 'target'},
{'type': 'type', 'target': 'target'}])
with patch.dict(seed.__salt__, {'file.stats': mock}):
self.assertEqual(seed.apply_('path'), 'path does not exist')
with patch.object(seed, '_mount', return_value=False):
self.assertEqual(seed.apply_('path'),
'target could not be mounted')
with patch.object(seed, '_mount', return_value=True):
with patch.object(os.path, 'join', return_value='A'):
with patch.object(os, 'makedirs',
MagicMock(side_effect=OSError('f'))):
with patch.object(os.path, 'isdir',
return_value=False):
self.assertRaises(OSError, seed.apply_, 'p')
with patch.object(os, 'makedirs', MagicMock()):
with patch.object(seed, 'mkconfig', return_value='A'):
with patch.object(seed, '_check_install',
return_value=False):
with patch.object(seed, '_umount',
return_value=None):
self.assertFalse(seed.apply_('path',
install=False))