diff options
author | Sabari Kumar Murugesan <smurugesan@vmware.com> | 2016-01-28 14:07:51 -0800 |
---|---|---|
committer | Matt Riedemann <mriedem@us.ibm.com> | 2016-02-24 17:55:12 -0500 |
commit | 7b13ce62b46c327b90e6b8c0eb85a1f2c8dec217 (patch) | |
tree | 98af6b5e1f6f4f834dadb18d0c32019841a524bd | |
parent | af44b6ef65c117a35fe2ac1bebc5b8c14d62f3fa (diff) | |
download | glance_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.py | 113 |
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([]) |