diff options
author | Dave McCowan <dmccowan@cisco.com> | 2015-12-07 14:28:52 -0500 |
---|---|---|
committer | Dave McCowan <dmccowan@cisco.com> | 2015-12-14 17:45:33 -0500 |
commit | 676a53ce44a5624a553e80bcff339300802d5494 (patch) | |
tree | e30d58fb9ad17d38e8e5cf6f80d484be415c8e45 /nova/tests/unit/keymgr | |
parent | 3f8c69b2ef3eef886e36c0b7f397b83a36a7beb8 (diff) | |
download | nova-676a53ce44a5624a553e80bcff339300802d5494.tar.gz |
Check context before returning cached value
The key manager caches the value of barbican client to be reused,
saving an extra call to keystone. The cached value is only
applicable to the current context, so the context must be checked
before returning the cached value.
Closes-Bug: #1523646
Change-Id: I7cd7f1ba8a749b230c611e4fb20ccf4127354c35
Diffstat (limited to 'nova/tests/unit/keymgr')
-rw-r--r-- | nova/tests/unit/keymgr/test_barbican.py | 52 |
1 files changed, 51 insertions, 1 deletions
diff --git a/nova/tests/unit/keymgr/test_barbican.py b/nova/tests/unit/keymgr/test_barbican.py index 36901f3660..a1c32cfeca 100644 --- a/nova/tests/unit/keymgr/test_barbican.py +++ b/nova/tests/unit/keymgr/test_barbican.py @@ -37,8 +37,9 @@ class BarbicanKeyManagerTestCase(test_key_mgr.KeyManagerTestCase): super(BarbicanKeyManagerTestCase, self).setUp() # Create fake auth_token - self.ctxt = mock.Mock() + self.ctxt = mock.MagicMock() self.ctxt.auth_token = "fake_token" + self.ctxt.project = "fake_project" # Create mock barbican client self._build_mock_barbican() @@ -49,6 +50,7 @@ class BarbicanKeyManagerTestCase(test_key_mgr.KeyManagerTestCase): self.pre_hex = "AIDxQp2++uAbKaTVDMXFYIu8PIugJGqkK0JLqkU0rhY=" self.hex = ("0080f1429dbefae01b29a4d50cc5c5608bbc3c8ba0246aa42b424baa4" "534ae16") + self.key_mgr._current_context = self.ctxt self.key_mgr._base_url = "http://host:9311/v1" self.addCleanup(self._restore) @@ -221,3 +223,51 @@ class BarbicanKeyManagerTestCase(test_key_mgr.KeyManagerTestCase): self.key_mgr._barbican_client = None self.assertRaises(exception.Forbidden, self.key_mgr.store_key, None, None) + + @mock.patch('keystoneclient.session.Session') + @mock.patch('barbicanclient.client.Client') + def test_get_barbican_client_new(self, mock_barbican, mock_keystone): + manager = self._create_key_manager() + manager._get_barbican_client(self.ctxt) + self.assertEqual(mock_keystone.call_count, 1) + self.assertEqual(mock_barbican.call_count, 1) + + @mock.patch('keystoneclient.session.Session') + @mock.patch('barbicanclient.client.Client') + def test_get_barbican_client_reused(self, mock_barbican, mock_keystone): + manager = self._create_key_manager() + manager._get_barbican_client(self.ctxt) + self.assertEqual(mock_keystone.call_count, 1) + self.assertEqual(mock_barbican.call_count, 1) + manager._get_barbican_client(self.ctxt) + self.assertEqual(mock_keystone.call_count, 1) + self.assertEqual(mock_barbican.call_count, 1) + + @mock.patch('keystoneclient.session.Session') + @mock.patch('barbicanclient.client.Client') + def test_get_barbican_client_not_reused(self, mock_barbican, + mock_keystone): + manager = self._create_key_manager() + manager._get_barbican_client(self.ctxt) + self.assertEqual(mock_keystone.call_count, 1) + self.assertEqual(mock_barbican.call_count, 1) + ctxt2 = mock.MagicMock() + ctxt2.auth_token = "fake_token2" + ctxt2.project = "fake_project2" + manager._get_barbican_client(ctxt2) + self.assertEqual(mock_keystone.call_count, 2) + self.assertEqual(mock_barbican.call_count, 2) + + def test_get_barbican_client_null_context(self): + self.assertRaises(exception.Forbidden, + self.key_mgr._get_barbican_client, None) + + def test_get_barbican_client_missing_project(self): + del(self.ctxt.project_id) + self.assertRaises(exception.KeyManagerError, + self.key_mgr._get_barbican_client, self.ctxt) + + def test_get_barbican_client_none_project(self): + self.ctxt.project_id = None + self.assertRaises(exception.KeyManagerError, + self.key_mgr._get_barbican_client, self.ctxt) |