diff options
author | lixipeng <lixipeng@prophetech.cn> | 2017-11-22 12:03:58 +0800 |
---|---|---|
committer | Matt Riedemann <mriedem.os@gmail.com> | 2018-01-24 20:53:50 -0500 |
commit | ca6daf148debb9c9646fcf6db9660c830da5a594 (patch) | |
tree | 9a8d8e95d4f9c1e2cdd8f61325c1b3bfe83d6902 /nova/tests/unit/volume | |
parent | bb2d0e5f85509db65d2d9e48aa161eae5a5e93e5 (diff) | |
download | nova-ca6daf148debb9c9646fcf6db9660c830da5a594.tar.gz |
Fix bug case by none token context
When set reclaim_instance_interval > 0, and then delete an
instance which booted from volume with `delete_on_termination`
set as true. After reclaim_instance_interval time pass,
all volumes boot instance will with state: attached and in-use,
but attached instances was deleted.
This bug case as admin context from
`nova.compute.manager._reclaim_queued_deletes` did not have
any token info, then call cinder api would be failed.
So add user/project CONF with admin role at cinder group,
and when determine context is_admin and without token, do
authenticaion with user/project info to call cinder api.
Change-Id: I3c35bba43fee81baebe8261f546c1424ce3a3383
Closes-Bug: #1733736
Closes-Bug: #1734025
Partial-Bug: #1736773
Diffstat (limited to 'nova/tests/unit/volume')
-rw-r--r-- | nova/tests/unit/volume/test_cinder.py | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/nova/tests/unit/volume/test_cinder.py b/nova/tests/unit/volume/test_cinder.py index 8131eb01e5..60b5a47500 100644 --- a/nova/tests/unit/volume/test_cinder.py +++ b/nova/tests/unit/volume/test_cinder.py @@ -15,6 +15,7 @@ from cinderclient import api_versions as cinder_api_versions from cinderclient import exceptions as cinder_exception +from keystoneauth1 import loading as ks_loading from keystoneclient import exceptions as keystone_exception import mock from oslo_utils import timeutils @@ -934,3 +935,18 @@ class CinderClientTestCase(test.NoDBTestCase): client.api_version) get_volume_api.assert_called_once_with( self.mock_session.get_endpoint.return_value) + + @mock.patch.object(ks_loading, 'load_auth_from_conf_options') + def test_load_auth_plugin_failed(self, mock_load_from_conf): + mock_load_from_conf.return_value = None + self.assertRaises(cinder_exception.Unauthorized, + cinder._load_auth_plugin, CONF) + + @mock.patch('nova.volume.cinder._ADMIN_AUTH') + def test_admin_context_without_token(self, + mock_admin_auth): + + mock_admin_auth.return_value = '_FAKE_ADMIN_AUTH' + admin_ctx = context.get_admin_context() + params = cinder._get_cinderclient_parameters(admin_ctx) + self.assertEqual(params[0], mock_admin_auth) |