134 lines
5.1 KiB
Python
134 lines
5.1 KiB
Python
from mock import patch, call
|
|
|
|
from testtools import TestCase
|
|
from tests.helpers import patch_open, FakeRelation
|
|
|
|
import charmhelpers.contrib.hahelpers.apache as apache_utils
|
|
|
|
cert = '''
|
|
-----BEGIN CERTIFICATE-----
|
|
MIIDXTCCAkWgAwIBAgIJAMO1fWOu8ntUMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
|
|
BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
|
|
aWRnaXRzIFB0eSBMdGQwHhcNMTQwNDIyMTUzNDA0WhcNMjQwNDE5MTUzNDA0WjBF
|
|
MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
|
|
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
|
CgKCAQEAuk6dmZnMvVxykNidNjbIwXM3ShhMpwCvUmWwpybFAIqhtNTuGJF9Ikp5
|
|
kzB+ThQV1onK8O8YarNGQx+MOISEnlJ5npj3Atp33pKGHRn69lHKGVfJvRbN4A90
|
|
1hTueYsELzfPV2YWm4c6nQiXRT6Cy0yaw/DE8fBTHzAiE9+/XGPsjn5VPv8H6Wa1
|
|
f/d5FblE+RtHP6YpRo9Jh3XAn3iC9fVr8rblS4rk7ev8LfH/yIG2wRVOEPC6lYfu
|
|
MEIwPpxKV0c3Z6lqtMOgC5dgzWjrbItnQfB0JaIzSFMMxDhNCJocQRJDQ+0jmj+K
|
|
rMGB1QRZlVLZxx0xnv38G0GyfFMv8QIDAQABo1AwTjAdBgNVHQ4EFgQUcxEj7X26
|
|
poFDa0lw40aAKIqyNp0wHwYDVR0jBBgwFoAUcxEj7X26poFDa0lw40aAKIqyNp0w
|
|
DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAQe6RUCqTYf0Ns8fKfAEb
|
|
QSxZKqCst02oC0F3Gm0opWiUetxZqmAYTAjztmlRFIw7hgF/P95SY1ujGLZmiAlU
|
|
poOTjQ/i7MvjkXPVCo92izwXi65qRmJGbjduIirOAYtBmBmm3qS9BmoDlLQMVNYn
|
|
bwFImc9ar0h+o3/VH1hry+2vEVikXiKK5uKZI6B7ejNYfAWydq6ilzfKIh75W852
|
|
OSbKt3NB/BTZZUdCvK6+B+MoeuzQHDO0/QKBEBfaKFeJki3mdyzFlNbYio1z00rM
|
|
E2zl3kh9gkZnMuV1uzHdfKJbtTcNn4hCls5x7T21jn4joADHaVez8FloykBUABu3
|
|
qw==
|
|
-----END CERTIFICATE-----
|
|
'''
|
|
|
|
IDENTITY_NEW_STYLE_CERTS = {
|
|
'identity-service:0': {
|
|
'keystone/0': {
|
|
'ssl_cert_test-cn': 'keystone_provided_cert',
|
|
'ssl_key_test-cn': 'keystone_provided_key',
|
|
}
|
|
}
|
|
}
|
|
|
|
IDENTITY_OLD_STYLE_CERTS = {
|
|
'identity-service:0': {
|
|
'keystone/0': {
|
|
'ssl_cert': 'keystone_provided_cert',
|
|
'ssl_key': 'keystone_provided_key',
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
class ApacheUtilsTests(TestCase):
|
|
def setUp(self):
|
|
super(ApacheUtilsTests, self).setUp()
|
|
[self._patch(m) for m in [
|
|
'log',
|
|
'config_get',
|
|
'relation_get',
|
|
'relation_ids',
|
|
'relation_list',
|
|
'host',
|
|
]]
|
|
|
|
def _patch(self, method):
|
|
_m = patch.object(apache_utils, method)
|
|
mock = _m.start()
|
|
self.addCleanup(_m.stop)
|
|
setattr(self, method, mock)
|
|
|
|
def test_get_cert_from_config(self):
|
|
'''Ensure cert and key from charm config override relation'''
|
|
self.config_get.side_effect = [
|
|
'some_ca_cert', # config_get('ssl_cert')
|
|
'some_ca_key', # config_Get('ssl_key')
|
|
]
|
|
result = apache_utils.get_cert('test-cn')
|
|
self.assertEquals(('some_ca_cert', 'some_ca_key'), result)
|
|
|
|
def test_get_ca_cert_from_config(self):
|
|
self.config_get.return_value = "some_ca_cert"
|
|
self.assertEquals('some_ca_cert', apache_utils.get_ca_cert())
|
|
|
|
def test_get_cert_from_relation(self):
|
|
self.config_get.return_value = None
|
|
rel = FakeRelation(IDENTITY_NEW_STYLE_CERTS)
|
|
self.relation_ids.side_effect = rel.relation_ids
|
|
self.relation_list.side_effect = rel.relation_units
|
|
self.relation_get.side_effect = rel.get
|
|
result = apache_utils.get_cert('test-cn')
|
|
self.assertEquals(('keystone_provided_cert', 'keystone_provided_key'),
|
|
result)
|
|
|
|
def test_get_cert_from_relation_deprecated(self):
|
|
self.config_get.return_value = None
|
|
rel = FakeRelation(IDENTITY_OLD_STYLE_CERTS)
|
|
self.relation_ids.side_effect = rel.relation_ids
|
|
self.relation_list.side_effect = rel.relation_units
|
|
self.relation_get.side_effect = rel.get
|
|
result = apache_utils.get_cert()
|
|
self.assertEquals(('keystone_provided_cert', 'keystone_provided_key'),
|
|
result)
|
|
|
|
def test_get_ca_cert_from_relation(self):
|
|
self.config_get.return_value = None
|
|
self.relation_ids.side_effect = [['identity-service:0'],
|
|
['identity-credentials:1']]
|
|
self.relation_list.return_value = 'keystone/0'
|
|
self.relation_get.side_effect = [
|
|
'keystone_provided_ca',
|
|
]
|
|
result = apache_utils.get_ca_cert()
|
|
self.relation_ids.assert_has_calls([call('identity-service'),
|
|
call('identity-credentials')])
|
|
self.assertEquals('keystone_provided_ca',
|
|
result)
|
|
|
|
@patch.object(apache_utils.os.path, 'isfile')
|
|
def test_retrieve_ca_cert(self, _isfile):
|
|
_isfile.return_value = True
|
|
with patch_open() as (_open, _file):
|
|
_file.read.return_value = cert
|
|
self.assertEqual(
|
|
apache_utils.retrieve_ca_cert('mycertfile'),
|
|
cert)
|
|
_open.assert_called_once_with('mycertfile', 'rb')
|
|
|
|
@patch.object(apache_utils.os.path, 'isfile')
|
|
def test_retrieve_ca_cert_no_file(self, _isfile):
|
|
_isfile.return_value = False
|
|
with patch_open() as (_open, _file):
|
|
self.assertEqual(
|
|
apache_utils.retrieve_ca_cert('mycertfile'),
|
|
None)
|
|
self.assertFalse(_open.called)
|