salt/tests/unit/modules/test_mac_xattr.py

137 lines
5.2 KiB
Python

# -*- coding: utf-8 -*-
# Import Python libs
from __future__ import absolute_import, unicode_literals, print_function
# Import Salt Testing Libs
from tests.support.mixins import LoaderModuleMockMixin
from tests.support.unit import TestCase
from tests.support.mock import MagicMock, patch
# Import Salt Libs
from salt.exceptions import CommandExecutionError
import salt.modules.mac_xattr as xattr
import salt.utils.mac_utils
class XAttrTestCase(TestCase, LoaderModuleMockMixin):
def setup_loader_modules(self):
return {xattr: {}}
def test_list(self):
'''
Test xattr.list
'''
expected = {'spongebob': 'squarepants',
'squidward': 'patrick'}
with patch.object(xattr, 'read', MagicMock(side_effect=['squarepants',
'patrick'])), \
patch('salt.utils.mac_utils.execute_return_result',
MagicMock(return_value='spongebob\nsquidward')):
self.assertEqual(xattr.list_('path/to/file'), expected)
def test_list_missing(self):
'''
Test listing attributes of a missing file
'''
with patch('salt.utils.mac_utils.execute_return_result',
MagicMock(side_effect=CommandExecutionError('No such file'))):
self.assertRaises(CommandExecutionError, xattr.list_, '/path/to/file')
def test_read(self):
'''
Test reading a specific attribute from a file
'''
with patch('salt.utils.mac_utils.execute_return_result',
MagicMock(return_value='expected results')):
self.assertEqual(xattr.read('/path/to/file', 'com.attr'),
'expected results')
def test_read_hex(self):
'''
Test reading a specific attribute from a file
'''
with patch.object(salt.utils.mac_utils, 'execute_return_result',
MagicMock(return_value='expected results')) as mock:
self.assertEqual(
xattr.read('/path/to/file', 'com.attr', **{'hex': True}),
'expected results'
)
mock.assert_called_once_with(
['xattr', '-p', '-x', 'com.attr', '/path/to/file'])
def test_read_missing(self):
'''
Test reading a specific attribute from a file
'''
with patch('salt.utils.mac_utils.execute_return_result',
MagicMock(side_effect=CommandExecutionError('No such file'))):
self.assertRaises(CommandExecutionError,
xattr.read,
'/path/to/file',
'attribute')
def test_write(self):
'''
Test writing a specific attribute to a file
'''
mock_cmd = MagicMock(return_value='squarepants')
with patch.object(xattr, 'read', mock_cmd), \
patch('salt.utils.mac_utils.execute_return_success',
MagicMock(return_value=True)):
self.assertTrue(xattr.write('/path/to/file',
'spongebob',
'squarepants'))
def test_write_missing(self):
'''
Test writing a specific attribute to a file
'''
with patch('salt.utils.mac_utils.execute_return_success',
MagicMock(side_effect=CommandExecutionError('No such file'))):
self.assertRaises(CommandExecutionError,
xattr.write,
'/path/to/file',
'attribute',
'value')
def test_delete(self):
'''
Test deleting a specific attribute from a file
'''
mock_cmd = MagicMock(return_value={'spongebob': 'squarepants'})
with patch.object(xattr, 'list_', mock_cmd), \
patch('salt.utils.mac_utils.execute_return_success',
MagicMock(return_value=True)):
self.assertTrue(xattr.delete('/path/to/file', 'attribute'))
def test_delete_missing(self):
'''
Test deleting a specific attribute from a file
'''
with patch('salt.utils.mac_utils.execute_return_success',
MagicMock(side_effect=CommandExecutionError('No such file'))):
self.assertRaises(CommandExecutionError,
xattr.delete,
'/path/to/file',
'attribute')
def test_clear(self):
'''
Test clearing all attributes on a file
'''
mock_cmd = MagicMock(return_value={})
with patch.object(xattr, 'list_', mock_cmd), \
patch('salt.utils.mac_utils.execute_return_success',
MagicMock(return_value=True)):
self.assertTrue(xattr.clear('/path/to/file'))
def test_clear_missing(self):
'''
Test clearing all attributes on a file
'''
with patch('salt.utils.mac_utils.execute_return_success',
MagicMock(side_effect=CommandExecutionError('No such file'))):
self.assertRaises(CommandExecutionError, xattr.clear, '/path/to/file')