mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 00:55:19 +00:00
77fd1acb7f
According to http://docs.python.org/2/library/unittest.html#deprecated-aliases assertEquals is a deprecated alias of assertEqual.
116 lines
3.5 KiB
Python
116 lines
3.5 KiB
Python
# Import python libs
|
|
import json
|
|
import pprint
|
|
|
|
# Import Salt Testing libs
|
|
from salttesting import skipIf, TestCase
|
|
from salttesting.helpers import ensure_in_syspath
|
|
from salttesting.mock import NO_MOCK, NO_MOCK_REASON, MagicMock, patch
|
|
ensure_in_syspath('../../')
|
|
|
|
# Import third party libs
|
|
import yaml
|
|
|
|
# Import salt libs
|
|
import salt.states.file as filestate
|
|
|
|
filestate.__salt__ = {'file.manage_file': False}
|
|
filestate.__opts__ = {'test': False}
|
|
|
|
|
|
@skipIf(NO_MOCK, NO_MOCK_REASON)
|
|
class TestFileState(TestCase):
|
|
|
|
def test_serialize(self):
|
|
def returner(contents, *args, **kwargs):
|
|
returner.returned = contents
|
|
returner.returned = None
|
|
|
|
|
|
filestate.__salt__ = {
|
|
'file.manage_file': returner
|
|
}
|
|
|
|
dataset = {
|
|
"foo": True,
|
|
"bar": 42,
|
|
"baz": [1, 2, 3],
|
|
"qux": 2.0
|
|
}
|
|
|
|
filestate.serialize('/tmp', dataset)
|
|
self.assertEqual(yaml.load(returner.returned), dataset)
|
|
|
|
filestate.serialize('/tmp', dataset, formatter="yaml")
|
|
self.assertEqual(yaml.load(returner.returned), dataset)
|
|
|
|
filestate.serialize('/tmp', dataset, formatter="json")
|
|
self.assertEqual(json.loads(returner.returned), dataset)
|
|
|
|
filestate.serialize('/tmp', dataset, formatter="python")
|
|
self.assertEqual(returner.returned, pprint.pformat(dataset))
|
|
|
|
def test_contents_and_contents_pillar(self):
|
|
def returner(contents, *args, **kwargs):
|
|
returner.returned = contents
|
|
returner.returned = None
|
|
|
|
filestate.__salt__ = {
|
|
'file.manage_file': returner
|
|
}
|
|
|
|
manage_mode_mock = MagicMock()
|
|
filestate.__salt__['config.manage_mode'] = manage_mode_mock
|
|
|
|
ret = filestate.managed('/tmp/foo', contents='hi', contents_pillar='foo:bar')
|
|
self.assertEqual(False, ret['result'])
|
|
|
|
def test_contents_pillar_adds_newline(self):
|
|
# make sure the newline
|
|
pillar_value = 'i am the pillar value'
|
|
expected = '{0}\n'.format(pillar_value)
|
|
|
|
self.run_contents_pillar(pillar_value, expected)
|
|
|
|
def test_contents_pillar_doesnt_add_more_newlines(self):
|
|
# make sure the newline
|
|
pillar_value = 'i am the pillar value\n'
|
|
|
|
self.run_contents_pillar(pillar_value, expected=pillar_value)
|
|
|
|
def run_contents_pillar(self, pillar_value, expected):
|
|
def returner(contents, *args, **kwargs):
|
|
returner.returned = (contents, args, kwargs)
|
|
returner.returned = None
|
|
|
|
filestate.__salt__ = {
|
|
'file.manage_file': returner
|
|
}
|
|
|
|
path = '/tmp/foo'
|
|
pillar_path = 'foo:bar'
|
|
|
|
# the values don't matter here
|
|
filestate.__salt__['config.manage_mode'] = MagicMock()
|
|
filestate.__salt__['file.source_list'] = MagicMock(return_value=[None, None])
|
|
filestate.__salt__['file.get_managed'] = MagicMock(return_value=[None, None, None])
|
|
|
|
# pillar.get should return the pillar_value
|
|
pillar_mock = MagicMock(return_value=pillar_value)
|
|
filestate.__salt__['pillar.get'] = pillar_mock
|
|
|
|
ret = filestate.managed(path, contents_pillar=pillar_path)
|
|
|
|
# make sure the pillar_mock is called with the given path
|
|
pillar_mock.assert_called_once_with(pillar_path)
|
|
|
|
# make sure no errors are returned
|
|
self.assertEqual(None, ret)
|
|
|
|
# make sure the value is correct
|
|
self.assertEqual(expected, returner.returned[1][-1])
|
|
|
|
if __name__ == '__main__':
|
|
from integration import run_tests
|
|
run_tests(TestFileState, needs_daemon=False)
|