salt/tests/unit/modules/test_win_pki.py
2017-03-28 19:04:01 +01:00

185 lines
5.5 KiB
Python

# -*- coding: utf-8 -*-
'''
:synopsis: Unit Tests for Windows PKI Module 'module.win_pki'
:platform: Windows
:maturity: develop
.. versionadded:: Nitrogen
'''
# Import Python Libs
from __future__ import absolute_import
# Import Salt Libs
import salt.modules.win_pki as win_pki
# Import Salt Testing Libs
from tests.support.mixins import LoaderModuleMockMixin
from tests.support.unit import TestCase, skipIf
from tests.support.mock import (
MagicMock,
patch,
NO_MOCK,
NO_MOCK_REASON,
)
CERT_PATH = r'C:\certs\testdomain.local.cer'
THUMBPRINT = '9988776655443322111000AAABBBCCCDDDEEEFFF'
CERTS = {
THUMBPRINT: {
'dnsnames': ['testdomain.local'],
'serialnumber': '0123456789AABBCCDD',
'subject': 'CN=testdomain.local, OU=testou, O=testorg, S=California, C=US',
'thumbprint': THUMBPRINT,
'version': 3
}
}
STORES = {
'CurrentUser': [
'AuthRoot',
'CA',
'ClientAuthIssuer',
'Disallowed',
'MSIEHistoryJournal',
'My',
'Root',
'SmartCardRoot',
'Trust',
'TrustedPeople',
'TrustedPublisher',
'UserDS'
],
'LocalMachine': [
'AuthRoot',
'CA',
'ClientAuthIssuer',
'Disallowed',
'My',
'Remote Desktop',
'Root',
'SmartCardRoot',
'Trust',
'TrustedDevices',
'TrustedPeople',
'TrustedPublisher',
'WebHosting'
]
}
JSON_CERTS = [{
'DnsNameList': [{
'Punycode': 'testdomain.local',
'Unicode': 'testdomain.local'
}],
'SerialNumber': '0123456789AABBCCDD',
'Subject': 'CN=testdomain.local, OU=testou, O=testorg, S=California, C=US',
'Thumbprint': '9988776655443322111000AAABBBCCCDDDEEEFFF',
'Version': 3
}]
JSON_STORES = [{
'LocationName': 'CurrentUser',
'StoreNames': STORES['CurrentUser']
}, {
'LocationName': 'LocalMachine',
'StoreNames': STORES['LocalMachine']
}]
@skipIf(NO_MOCK, NO_MOCK_REASON)
class WinPkiTestCase(TestCase, LoaderModuleMockMixin):
'''
Test cases for salt.modules.win_pki
'''
def setup_loader_modules(self):
return {win_pki: {}}
@patch('salt.modules.win_pki._cmd_run',
MagicMock(return_value=JSON_STORES))
def test_get_stores(self):
'''
Test - Get the certificate location contexts and their corresponding stores.
'''
with patch.dict(win_pki.__salt__):
self.assertEqual(win_pki.get_stores(), STORES)
@patch('salt.modules.win_pki._cmd_run',
MagicMock(return_value=JSON_CERTS))
@patch('salt.modules.win_pki._validate_cert_path',
MagicMock(return_value=None))
def test_get_certs(self):
'''
Test - Get the available certificates in the given store.
'''
with patch.dict(win_pki.__salt__):
self.assertEqual(win_pki.get_certs(), CERTS)
@patch('os.path.isfile',
MagicMock(return_value=True))
@patch('salt.modules.win_pki._cmd_run',
MagicMock(return_value=JSON_CERTS))
def test_get_cert_file(self):
'''
Test - Get the details of the certificate file.
'''
kwargs = {'name': CERT_PATH}
with patch.dict(win_pki.__salt__):
self.assertEqual(win_pki.get_cert_file(**kwargs), CERTS[THUMBPRINT])
@patch('salt.modules.win_pki._cmd_run',
MagicMock(return_value=JSON_CERTS))
@patch('salt.modules.win_pki._validate_cert_path',
MagicMock(return_value=None))
@patch('salt.modules.win_pki.get_cert_file',
MagicMock(return_value=CERTS[THUMBPRINT]))
@patch('salt.modules.win_pki.get_certs',
MagicMock(return_value=CERTS))
def test_import_cert(self):
'''
Test - Import the certificate file into the given certificate store.
'''
kwargs = {'name': CERT_PATH}
mock_value = MagicMock(return_value=CERT_PATH)
with patch.dict(win_pki.__salt__, {'cp.cache_file': mock_value}):
self.assertTrue(win_pki.import_cert(**kwargs))
@patch('salt.modules.win_pki._cmd_run',
MagicMock(return_value='True'))
@patch('salt.modules.win_pki._validate_cert_format',
MagicMock(return_value=None))
@patch('salt.modules.win_pki._validate_cert_path',
MagicMock(return_value=None))
def test_export_cert(self):
'''
Test - Export the certificate to a file from the given certificate store.
'''
kwargs = {'name': CERT_PATH,
'thumbprint': THUMBPRINT}
with patch.dict(win_pki.__salt__):
self.assertTrue(win_pki.export_cert(**kwargs))
@patch('salt.modules.win_pki._cmd_run',
MagicMock(return_value='True'))
@patch('salt.modules.win_pki._validate_cert_path',
MagicMock(return_value=None))
def test_test_cert(self):
'''
Test - Check the certificate for validity.
'''
with patch.dict(win_pki.__salt__):
self.assertTrue(win_pki.test_cert(thumbprint=THUMBPRINT))
@patch('salt.modules.win_pki._cmd_run',
MagicMock(return_value=None))
@patch('salt.modules.win_pki._validate_cert_path',
MagicMock(return_value=None))
@patch('salt.modules.win_pki.get_certs',
MagicMock(return_value=CERTS))
def test_remove_cert(self):
'''
Test - Remove the certificate from the given certificate store.
'''
with patch.dict(win_pki.__salt__):
self.assertTrue(win_pki.remove_cert(thumbprint=THUMBPRINT[::-1]))