2016-01-29 14:01:40 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
# Import Python libs
|
|
|
|
from __future__ import absolute_import
|
|
|
|
|
|
|
|
# Import Salt Libs
|
|
|
|
from salt.states import mac_xattr as xattr
|
|
|
|
|
|
|
|
# Import Salt Testing Libs
|
|
|
|
from salttesting import TestCase
|
|
|
|
from salttesting.helpers import ensure_in_syspath
|
|
|
|
from salttesting.mock import (
|
|
|
|
MagicMock,
|
2016-01-29 14:29:06 +00:00
|
|
|
patch
|
2016-01-29 14:01:40 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
ensure_in_syspath('../../')
|
|
|
|
|
|
|
|
xattr.__salt__ = {}
|
|
|
|
|
|
|
|
|
|
|
|
class XAttrTestCase(TestCase):
|
|
|
|
|
|
|
|
@patch('os.path.exists')
|
|
|
|
def test_exists_not(self, exists_mock):
|
|
|
|
'''
|
|
|
|
Test adding an attribute when it doesn't exist
|
|
|
|
'''
|
|
|
|
expected = {
|
|
|
|
'changes': {'key': 'value'},
|
|
|
|
'comment': '',
|
|
|
|
'name': '/path/to/file',
|
|
|
|
'result': True
|
|
|
|
}
|
|
|
|
|
|
|
|
exists_mock.return_value = True
|
|
|
|
|
|
|
|
list_mock = MagicMock(return_value={'other.id': 'value2'})
|
|
|
|
write_mock = MagicMock()
|
|
|
|
with patch.dict(xattr.__salt__, {'xattr.list': list_mock,
|
|
|
|
'xattr.write': write_mock}):
|
|
|
|
out = xattr.exists('/path/to/file', ['key=value'])
|
|
|
|
|
|
|
|
list_mock.assert_called_once_with('/path/to/file')
|
|
|
|
write_mock.assert_called_once_with('/path/to/file', 'key', 'value', False)
|
|
|
|
self.assertEqual(out, expected)
|
|
|
|
|
|
|
|
@patch('os.path.exists')
|
|
|
|
def test_exists_change(self, exists_mock):
|
|
|
|
'''
|
|
|
|
Test changing and attribute value
|
|
|
|
'''
|
|
|
|
expected = {
|
|
|
|
'changes': {'key': 'other_value'},
|
|
|
|
'comment': '',
|
|
|
|
'name': '/path/to/file',
|
|
|
|
'result': True
|
|
|
|
}
|
|
|
|
|
|
|
|
exists_mock.return_value = True
|
|
|
|
|
|
|
|
list_mock = MagicMock(return_value={'key': 'value'})
|
|
|
|
write_mock = MagicMock()
|
|
|
|
with patch.dict(xattr.__salt__, {'xattr.list': list_mock,
|
|
|
|
'xattr.write': write_mock}):
|
|
|
|
out = xattr.exists('/path/to/file', ['key=other_value'])
|
|
|
|
|
|
|
|
list_mock.assert_called_once_with('/path/to/file')
|
|
|
|
write_mock.assert_called_once_with('/path/to/file', 'key', 'other_value', False)
|
|
|
|
self.assertEqual(out, expected)
|
|
|
|
|
|
|
|
@patch('os.path.exists')
|
|
|
|
def test_exists_already(self, exists_mock):
|
|
|
|
'''
|
|
|
|
Test that having the same value does nothing
|
|
|
|
'''
|
|
|
|
expected = {
|
|
|
|
'changes': {},
|
|
|
|
'comment': 'All values existed correctly.',
|
|
|
|
'name': '/path/to/file',
|
|
|
|
'result': True
|
|
|
|
}
|
|
|
|
|
|
|
|
exists_mock.return_value = True
|
|
|
|
|
|
|
|
list_mock = MagicMock(return_value={'key': 'value'})
|
|
|
|
write_mock = MagicMock()
|
|
|
|
with patch.dict(xattr.__salt__, {'xattr.list': list_mock,
|
|
|
|
'xattr.write': write_mock}):
|
|
|
|
out = xattr.exists('/path/to/file', ['key=value'])
|
|
|
|
|
|
|
|
list_mock.assert_called_once_with('/path/to/file')
|
|
|
|
assert not write_mock.called
|
|
|
|
self.assertEqual(out, expected)
|
|
|
|
|
|
|
|
@patch('os.path.exists')
|
|
|
|
def test_delete(self, exists_mock):
|
|
|
|
'''
|
|
|
|
Test deleting an attribute from a file
|
|
|
|
'''
|
|
|
|
expected = {
|
|
|
|
'changes': {'key': 'delete'},
|
|
|
|
'comment': '',
|
|
|
|
'name': '/path/to/file',
|
|
|
|
'result': True
|
|
|
|
}
|
|
|
|
|
|
|
|
exists_mock.return_value = True
|
|
|
|
|
|
|
|
list_mock = MagicMock(return_value={'key': 'value2'})
|
|
|
|
delete_mock = MagicMock()
|
|
|
|
with patch.dict(xattr.__salt__, {'xattr.list': list_mock,
|
|
|
|
'xattr.delete': delete_mock}):
|
|
|
|
out = xattr.delete('/path/to/file', ['key'])
|
|
|
|
|
|
|
|
list_mock.assert_called_once_with('/path/to/file')
|
|
|
|
delete_mock.assert_called_once_with('/path/to/file', 'key')
|
|
|
|
self.assertEqual(out, expected)
|
|
|
|
|
|
|
|
@patch('os.path.exists')
|
|
|
|
def test_delete_not(self, exists_mock):
|
|
|
|
'''
|
|
|
|
Test deleting an attribute that doesn't exist from a file
|
|
|
|
'''
|
|
|
|
expected = {
|
|
|
|
'changes': {},
|
|
|
|
'comment': 'All attributes were already deleted.',
|
|
|
|
'name': '/path/to/file',
|
|
|
|
'result': True
|
|
|
|
}
|
|
|
|
|
|
|
|
exists_mock.return_value = True
|
|
|
|
|
|
|
|
list_mock = MagicMock(return_value={'other.key': 'value2'})
|
|
|
|
delete_mock = MagicMock()
|
|
|
|
with patch.dict(xattr.__salt__, {'xattr.list': list_mock,
|
|
|
|
'xattr.delete': delete_mock}):
|
|
|
|
out = xattr.delete('/path/to/file', ['key'])
|
|
|
|
|
|
|
|
list_mock.assert_called_once_with('/path/to/file')
|
|
|
|
assert not delete_mock.called
|
|
|
|
self.assertEqual(out, expected)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
from integration import run_tests
|
|
|
|
run_tests(XAttrTestCase, needs_daemon=False)
|