summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSabari Kumar Murugesan <smurugesan@vmware.com>2016-01-28 14:07:51 -0800
committerMatt Riedemann <mriedem@us.ibm.com>2016-02-24 17:55:12 -0500
commit7b13ce62b46c327b90e6b8c0eb85a1f2c8dec217 (patch)
tree98af6b5e1f6f4f834dadb18d0c32019841a524bd
parentaf44b6ef65c117a35fe2ac1bebc5b8c14d62f3fa (diff)
downloadglance_store-7b13ce62b46c327b90e6b8c0eb85a1f2c8dec217.tar.gz
Add backend tests from glance0.9.2
Moves some unit tests that were part of glance but should have belonged to glance_store. These tests are ported from glance/tests/unit/test_store_image.py Related-Bug: #1548902 NOTE(mriedem): As part of the backport we have to remove the verifier=None kwargs from the assertions made in test_backend since the verifier code didn't exist in stable/liberty. Change-Id: I688629d37e9146aef33fbc9bb6fd8780521e06ab (cherry picked from commit 5faadde2d63d0bb7de12958c6e79040d6cc0448c)
-rw-r--r--glance_store/tests/unit/test_backend.py113
1 files changed, 113 insertions, 0 deletions
diff --git a/glance_store/tests/unit/test_backend.py b/glance_store/tests/unit/test_backend.py
new file mode 100644
index 0000000..e1963ef
--- /dev/null
+++ b/glance_store/tests/unit/test_backend.py
@@ -0,0 +1,113 @@
+# Copyright 2016 OpenStack, LLC
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+"""Tests the backend store API's"""
+
+import mock
+
+from glance_store import backend
+from glance_store import exceptions
+from glance_store.tests import base
+
+
+class TestStoreAddToBackend(base.StoreBaseTest):
+
+ def setUp(self):
+ super(TestStoreAddToBackend, self).setUp()
+ self.image_id = "animage"
+ self.data = "dataandstuff"
+ self.size = len(self.data)
+ self.location = "file:///ab/cde/fgh"
+ self.checksum = "md5"
+
+ def _bad_metadata(self, in_metadata):
+ mstore = mock.Mock()
+ mstore.add.return_value = (self.location, self.size,
+ self.checksum, in_metadata)
+ mstore.__str__ = lambda self: "hello"
+ mstore.__unicode__ = lambda self: "hello"
+
+ self.assertRaises(exceptions.BackendException,
+ backend.store_add_to_backend,
+ self.image_id,
+ self.data,
+ self.size,
+ mstore)
+
+ mstore.add.assert_called_once_with(self.image_id, mock.ANY,
+ self.size, context=None)
+
+ def _good_metadata(self, in_metadata):
+ mstore = mock.Mock()
+ mstore.add.return_value = (self.location, self.size,
+ self.checksum, in_metadata)
+
+ (location,
+ size,
+ checksum,
+ metadata) = backend.store_add_to_backend(self.image_id,
+ self.data,
+ self.size,
+ mstore)
+
+ mstore.add.assert_called_once_with(self.image_id, mock.ANY,
+ self.size, context=None)
+
+ self.assertEqual(self.location, location)
+ self.assertEqual(self.size, size)
+ self.assertEqual(self.checksum, checksum)
+ self.assertEqual(in_metadata, metadata)
+
+ def test_empty(self):
+ metadata = {}
+ self._good_metadata(metadata)
+
+ def test_string(self):
+ metadata = {'key': u'somevalue'}
+ self._good_metadata(metadata)
+
+ def test_list(self):
+ m = {'key': [u'somevalue', u'2']}
+ self._good_metadata(m)
+
+ def test_unicode_dict(self):
+ inner = {'key1': u'somevalue', 'key2': u'somevalue'}
+ m = {'topkey': inner}
+ self._good_metadata(m)
+
+ def test_unicode_dict_list(self):
+ inner = {'key1': u'somevalue', 'key2': u'somevalue'}
+ m = {'topkey': inner, 'list': [u'somevalue', u'2'], 'u': u'2'}
+ self._good_metadata(m)
+
+ def test_nested_dict(self):
+ inner = {'key1': u'somevalue', 'key2': u'somevalue'}
+ inner = {'newkey': inner}
+ inner = {'anotherkey': inner}
+ m = {'topkey': inner}
+ self._good_metadata(m)
+
+ def test_bad_top_level_nonunicode(self):
+ metadata = {'key': b'a string'}
+ self._bad_metadata(metadata)
+
+ def test_bad_nonunicode_dict_list(self):
+ inner = {'key1': u'somevalue', 'key2': u'somevalue',
+ 'k3': [1, object()]}
+ m = {'topkey': inner, 'list': [u'somevalue', u'2'], 'u': u'2'}
+ self._bad_metadata(m)
+
+ def test_bad_metadata_not_dict(self):
+ self._bad_metadata([])