Add unit tests for OpenStackSnap.setup()

Change-Id: I35856ae3dfc2b5e8dd9e81daa96b749ed08c54cb
This commit is contained in:
Corey Bryant 2017-07-14 18:05:21 -04:00
parent 1b6970a551
commit 995054e370
2 changed files with 65 additions and 7 deletions

View File

@ -1,19 +1,20 @@
# Basic test yaml for snap-openstack
# This file is taken directly from the keystone snap, except as noted below.
setup:
dirs:
# Some dirs were trimmed from keystone's snap-openstack.yaml to minimize test code.
- "{snap_common}/etc/keystone/keystone.conf.d"
- "{snap_common}/etc/nginx/sites-enabled"
- "{snap_common}/etc/nginx/snap/sites-enabled"
- "{snap_common}/etc/uwsgi/snap"
- "{snap_common}/fernet-keys"
- "{snap_common}/lib"
- "{snap_common}/lock"
- "{snap_common}/log"
- "{snap_common}/run"
templates:
keystone-nginx.conf.j2: "{snap_common}/etc/nginx/snap/sites-enabled/keystone.conf"
keystone-snap.conf.j2: "{snap_common}/etc/keystone/keystone.conf.d/keystone-snap.conf"
nginx.conf.j2: "{snap_common}/etc/nginx/snap/nginx.conf"
chmod: # Doesn't exist in keystone's snap-openstack.yaml. Added for testing purposes.
"{snap_common}/lib": 0755
chown: # Doesn't exist in keystone's snap-openstack.yaml. Added for testing purposes.
"{snap_common}/lib": "root:root"
entry_points:
keystone-manage:
binary: "{snap}/bin/keystone-manage"

View File

@ -22,6 +22,7 @@ Tests for `snap_openstack` module.
import os
import sys
from mock import call
from mock import mock_open
from mock import patch
@ -33,6 +34,7 @@ TEST_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)),
MOCK_SNAP_ENV = {
'snap_common': '/var/snap/keystone/common',
'snap_data': '/var/snap/keystone/x1',
'snap': '/snap/keystone/current',
}
@ -64,8 +66,10 @@ class TestOpenStackSnapExecute(test_base.TestCase):
return paths.get(path, False)
def mock_snap_utils(self, mock_utils):
snap_utils = mock_utils.return_value
snap_utils.snap_env = MOCK_SNAP_ENV
'''Mock SnapUtils code'''
mock_utils_obj = mock_utils.return_value
mock_utils_obj.snap_env = MOCK_SNAP_ENV
return mock_utils_obj
@patch.object(base, 'SnapFileRenderer')
@patch('snap_openstack.base.SnapUtils')
@ -253,3 +257,56 @@ class TestOpenStackSnapExecute(test_base.TestCase):
snap.execute,
['snap-openstack',
'keystone-broken'])
class TestOpenStackSnapSetup(test_base.TestCase):
def mock_snap_utils(self, mock_utils):
'''Mock SnapUtils code'''
mock_utils_obj = mock_utils.return_value
mock_utils_obj.snap_env = MOCK_SNAP_ENV
mock_utils_obj.ensure_dir.return_value = None
mock_utils_obj.chmod.return_value = None
mock_utils_obj.chown.return_value = None
return mock_utils_obj
@patch.object(base, 'SnapFileRenderer')
@patch('snap_openstack.base.SnapUtils')
@patch('oslo_concurrency.lockutils.lock')
@patch.object(base, 'os')
def test_base_setup(self, mock_os, mock_lock, mock_utils, mock_renderer):
'''Ensure setup method handles snap-openstack.yaml keys/values'''
mock_utils_obj = self.mock_snap_utils(mock_utils)
snap = base.OpenStackSnap(os.path.join(TEST_DIR,
'snap-openstack.yaml'))
builtin = '__builtin__'
if sys.version_info > (3, 0):
builtin = 'builtins'
with patch('{}.open'.format(builtin), mock_open(), create=True):
snap.setup()
mock_lock.assert_called_once_with(
'setup.lock', external=True,
lock_path='/var/snap/keystone/x1/snap-openstack')
mock_utils_obj.chmod.assert_called_with(
'/var/snap/keystone/common/lib', 0o755)
mock_utils_obj.chown.assert_called_with(
'/var/snap/keystone/common/lib', 'root', 'root')
expected = [
call('/var/snap/keystone/common/etc/keystone/keystone.conf.d',
perms=488),
call('/var/snap/keystone/common/etc/nginx/sites-enabled',
perms=488),
call('/var/snap/keystone/common/etc/nginx/snap/sites-enabled',
perms=488),
call('/var/snap/keystone/common/etc/uwsgi/snap',
perms=488),
call('/var/snap/keystone/common/etc/keystone/keystone.conf.d/'
'keystone-snap.conf',
is_file=True),
call('/var/snap/keystone/common/etc/nginx/snap/sites-enabled/'
'keystone.conf',
is_file=True),
call('/var/snap/keystone/common/etc/nginx/snap/nginx.conf',
is_file=True)
]
mock_utils_obj.ensure_dir.assert_has_calls(expected, any_order=True)