Add backend tests from glance
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 Change-Id: I688629d37e9146aef33fbc9bb6fd8780521e06ab
This commit is contained in:
parent
9683e3bede
commit
5faadde2d6
|
@ -0,0 +1,115 @@
|
||||||
|
# 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,
|
||||||
|
verifier=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,
|
||||||
|
verifier=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([])
|
Loading…
Reference in New Issue