mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 17:09:03 +00:00
170 lines
7.0 KiB
Python
170 lines
7.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
# Import python libs
|
|
from __future__ import absolute_import, print_function, unicode_literals
|
|
import os
|
|
|
|
# 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.modules.vagrant as vagrant
|
|
import salt.exceptions
|
|
import salt.utils.platform
|
|
|
|
TEMP_DATABASE_FILE = '/tmp/salt-tests-tmpdir/test_vagrant.sqlite'
|
|
|
|
|
|
@skipIf(NO_MOCK, NO_MOCK_REASON)
|
|
class VagrantTestCase(TestCase, LoaderModuleMockMixin):
|
|
'''
|
|
Unit TestCase for the salt.modules.vagrant module.
|
|
'''
|
|
LOCAL_OPTS = {
|
|
'extension_modules': '',
|
|
'vagrant_sdb_data': {
|
|
'driver': 'sqlite3',
|
|
'database': TEMP_DATABASE_FILE,
|
|
'table': 'sdb',
|
|
'create_table': True
|
|
}
|
|
}
|
|
|
|
def setup_loader_modules(self):
|
|
vagrant_globals = {
|
|
'__opts__': self.LOCAL_OPTS,
|
|
}
|
|
return {vagrant: vagrant_globals}
|
|
|
|
def test_vagrant_get_vm_info_not_found(self):
|
|
mock_sdb = MagicMock(return_value=None)
|
|
with patch.dict(vagrant.__utils__, {'sdb.sdb_get': mock_sdb}):
|
|
with self.assertRaises(salt.exceptions.SaltInvocationError):
|
|
vagrant.get_vm_info('thisNameDoesNotExist')
|
|
|
|
def test_vagrant_init_positional(self):
|
|
path_nowhere = os.path.join(os.sep, 'tmp', 'nowhere')
|
|
if salt.utils.platform.is_windows():
|
|
path_nowhere = 'c:{0}'.format(path_nowhere)
|
|
mock_sdb = MagicMock(return_value=None)
|
|
with patch.dict(vagrant.__utils__, {'sdb.sdb_set': mock_sdb}):
|
|
resp = vagrant.init(
|
|
'test1',
|
|
path_nowhere,
|
|
'onetest',
|
|
'nobody',
|
|
False,
|
|
'french',
|
|
{'different': 'very'}
|
|
)
|
|
self.assertTrue(resp.startswith('Name test1 defined'))
|
|
expected = dict(name='test1',
|
|
cwd=path_nowhere,
|
|
machine='onetest',
|
|
runas='nobody',
|
|
vagrant_provider='french',
|
|
different='very'
|
|
)
|
|
mock_sdb.assert_called_with(
|
|
'sdb://vagrant_sdb_data/onetest?{0}'.format(path_nowhere),
|
|
'test1',
|
|
self.LOCAL_OPTS)
|
|
mock_sdb.assert_any_call(
|
|
'sdb://vagrant_sdb_data/test1',
|
|
expected,
|
|
self.LOCAL_OPTS)
|
|
|
|
def test_vagrant_get_vm_info(self):
|
|
testdict = {'testone': 'one', 'machine': 'two'}
|
|
mock_sdb = MagicMock(return_value=testdict)
|
|
with patch.dict(vagrant.__utils__, {'sdb.sdb_get': mock_sdb}):
|
|
resp = vagrant.get_vm_info('test1')
|
|
self.assertEqual(resp, testdict)
|
|
|
|
def test_vagrant_init_dict(self):
|
|
testdict = dict(cwd='/tmp/anywhere',
|
|
machine='twotest',
|
|
runas='somebody',
|
|
vagrant_provider='english')
|
|
expected = testdict.copy()
|
|
expected['name'] = 'test2'
|
|
mock_sdb = MagicMock(return_value=None)
|
|
with patch.dict(vagrant.__utils__, {'sdb.sdb_set': mock_sdb}):
|
|
vagrant.init('test2', vm=testdict)
|
|
mock_sdb.assert_any_call(
|
|
'sdb://vagrant_sdb_data/test2',
|
|
expected,
|
|
self.LOCAL_OPTS)
|
|
|
|
def test_vagrant_init_arg_override(self):
|
|
testdict = dict(cwd='/tmp/there',
|
|
machine='treetest',
|
|
runas='anybody',
|
|
vagrant_provider='spansh')
|
|
mock_sdb = MagicMock(return_value=None)
|
|
with patch.dict(vagrant.__utils__, {'sdb.sdb_set': mock_sdb}):
|
|
vagrant.init('test3',
|
|
cwd='/tmp',
|
|
machine='threetest',
|
|
runas='him',
|
|
vagrant_provider='polish',
|
|
vm=testdict)
|
|
expected = dict(name='test3',
|
|
cwd='/tmp',
|
|
machine='threetest',
|
|
runas='him',
|
|
vagrant_provider='polish')
|
|
mock_sdb.assert_any_call(
|
|
'sdb://vagrant_sdb_data/test3',
|
|
expected,
|
|
self.LOCAL_OPTS)
|
|
|
|
def test_vagrant_get_ssh_config_fails(self):
|
|
mock_sdb = MagicMock(return_value=None)
|
|
with patch.dict(vagrant.__utils__, {'sdb.sdb_set': mock_sdb}):
|
|
mock_sdb = MagicMock(return_value={})
|
|
with patch.dict(vagrant.__utils__, {'sdb.sdb_get': mock_sdb}):
|
|
vagrant.init('test3', cwd='/tmp')
|
|
with self.assertRaises(salt.exceptions.SaltInvocationError):
|
|
vagrant.get_ssh_config('test3') # has not been started
|
|
|
|
def test_vagrant_destroy(self):
|
|
path_mydir = os.path.join(os.sep, 'my', 'dir')
|
|
if salt.utils.platform.is_windows():
|
|
path_mydir = 'c:{0}'.format(path_mydir)
|
|
mock_cmd = MagicMock(return_value={'retcode': 0})
|
|
with patch.dict(vagrant.__salt__, {'cmd.run_all': mock_cmd}):
|
|
mock_sdb = MagicMock(return_value=None)
|
|
with patch.dict(vagrant.__utils__, {'sdb.sdb_delete': mock_sdb}):
|
|
mock_sdb_get = MagicMock(return_value={
|
|
'machine': 'macfour', 'cwd': path_mydir})
|
|
with patch.dict(vagrant.__utils__, {'sdb.sdb_get': mock_sdb_get}):
|
|
self.assertTrue(vagrant.destroy('test4'))
|
|
mock_sdb.assert_any_call(
|
|
'sdb://vagrant_sdb_data/macfour?{0}'.format(path_mydir),
|
|
self.LOCAL_OPTS)
|
|
mock_sdb.assert_any_call(
|
|
'sdb://vagrant_sdb_data/test4',
|
|
self.LOCAL_OPTS)
|
|
cmd = 'vagrant destroy -f macfour'
|
|
mock_cmd.assert_called_with(cmd,
|
|
runas=None,
|
|
cwd=path_mydir,
|
|
output_loglevel='info')
|
|
|
|
def test_vagrant_start(self):
|
|
mock_cmd = MagicMock(return_value={'retcode': 0})
|
|
with patch.dict(vagrant.__salt__, {'cmd.run_all': mock_cmd}):
|
|
mock_sdb_get = MagicMock(return_value={
|
|
'machine': 'five', 'cwd': '/the/dir', 'runas': 'me',
|
|
'vagrant_provider': 'him'})
|
|
with patch.dict(vagrant.__utils__, {'sdb.sdb_get': mock_sdb_get}):
|
|
self.assertTrue(vagrant.start('test5'))
|
|
cmd = 'vagrant up five --provider=him'
|
|
mock_cmd.assert_called_with(cmd,
|
|
runas='me',
|
|
cwd='/the/dir',
|
|
output_loglevel='info')
|