¡@

Home 

OpenStack Study: __init__.py

OpenStack Index

**** CubicPower OpenStack Study ****

# Copyright 2012 OpenStack Foundation

# 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.

import uuid

from oslo.config import cfg

import six

#NOTE(bcwaldon): importing this to get the default_store option

import glance.api.v1.images

from glance.common import exception

import glance.store.location

CONF = cfg.CONF

**** CubicPower OpenStack Study ****

class BaseTestCase(object):

"""

Basic test cases for glance image stores.

To run these tests on a new store X, create a test case like

class TestXStore(BaseTestCase, testtools.TestCase):

(MULTIPLE INHERITANCE REQUIRED)

**** CubicPower OpenStack Study ****

    def setUp(self):

        super(BaseTestCase, self).setUp()

**** CubicPower OpenStack Study ****

    def tearDown(self):

        CONF.reset()

        super(BaseTestCase, self).tearDown()

**** CubicPower OpenStack Study ****

    def config(self, **kw):

        for k, v in kw.iteritems():

            CONF.set_override(k, v, group=None)

**** CubicPower OpenStack Study ****

    def get_store(self, **kwargs):

        raise NotImplementedError('get_store() must be implemented')

**** CubicPower OpenStack Study ****

    def stash_image(self, image_id, image_data):

        """Store image data in the backend manually

        :param image_id: image identifier

        :param image_data: string representing image data fixture

        :return URI referencing newly-created backend object

        """

        raise NotImplementedError('stash_image is not implemented')

**** CubicPower OpenStack Study ****

    def test_create_store(self):

        self.config(known_stores=[self.store_cls_path])

        count = glance.store.create_stores()

        self.assertEqual(8, count)

**** CubicPower OpenStack Study ****

    def test_lifecycle(self):

        """Add, get and delete an image"""

        store = self.get_store()

        image_id = str(uuid.uuid4())

        image_data = six.StringIO('XXX')

        image_checksum = 'bc9189406be84ec297464a514221406d'

        try:

            uri, add_size, add_checksum, _ = store.add(image_id, image_data, 3)

        except NotImplementedError:

            msg = 'Configured store can not add images'

            self.skipTest(msg)

        self.assertEqual(3, add_size)

        self.assertEqual(image_checksum, add_checksum)

        store = self.get_store()

        location = glance.store.location.Location(

            self.store_name,

            store.get_store_location_class(),

            uri=uri,

            image_id=image_id)

        (get_iter, get_size) = store.get(location)

        self.assertEqual(3, get_size)

        self.assertEqual('XXX', ''.join(get_iter))

        image_size = store.get_size(location)

        self.assertEqual(3, image_size)

        store.delete(location)

        self.assertRaises(exception.NotFound, store.get, location)

**** CubicPower OpenStack Study ****

    def test_get_remote_image(self):

        """Get an image that was created externally to Glance"""

        image_id = str(uuid.uuid4())

        try:

            image_uri = self.stash_image(image_id, 'XXX')

        except NotImplementedError:

            msg = 'Configured store can not stash images'

            self.skipTest(msg)

        store = self.get_store()

        location = glance.store.location.Location(

            self.store_name,

            store.get_store_location_class(),

            uri=image_uri)

        (get_iter, get_size) = store.get(location)

        self.assertEqual(3, get_size)

        self.assertEqual('XXX', ''.join(get_iter))

        image_size = store.get_size(location)

        self.assertEqual(3, image_size)