summaryrefslogtreecommitdiff
path: root/nova/tests/unit/volume
diff options
context:
space:
mode:
authorlixipeng <lixipeng@prophetech.cn>2017-11-22 12:03:58 +0800
committerMatt Riedemann <mriedem.os@gmail.com>2018-01-24 20:53:50 -0500
commitca6daf148debb9c9646fcf6db9660c830da5a594 (patch)
tree9a8d8e95d4f9c1e2cdd8f61325c1b3bfe83d6902 /nova/tests/unit/volume
parentbb2d0e5f85509db65d2d9e48aa161eae5a5e93e5 (diff)
downloadnova-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.py16
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)