From 995054e370229b2386522a460c11c14e548c8e00 Mon Sep 17 00:00:00 2001 From: Corey Bryant Date: Fri, 14 Jul 2017 18:05:21 -0400 Subject: [PATCH] Add unit tests for OpenStackSnap.setup() Change-Id: I35856ae3dfc2b5e8dd9e81daa96b749ed08c54cb --- snap_openstack/tests/data/snap-openstack.yaml | 11 ++-- snap_openstack/tests/test_snap_openstack.py | 61 ++++++++++++++++++- 2 files changed, 65 insertions(+), 7 deletions(-) diff --git a/snap_openstack/tests/data/snap-openstack.yaml b/snap_openstack/tests/data/snap-openstack.yaml index 82c44d8..9c013b4 100644 --- a/snap_openstack/tests/data/snap-openstack.yaml +++ b/snap_openstack/tests/data/snap-openstack.yaml @@ -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" diff --git a/snap_openstack/tests/test_snap_openstack.py b/snap_openstack/tests/test_snap_openstack.py index edcf3ba..cf6cc8b 100644 --- a/snap_openstack/tests/test_snap_openstack.py +++ b/snap_openstack/tests/test_snap_openstack.py @@ -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)