From b7055ee6739d8c938943bea00f82c07826ffe13a Mon Sep 17 00:00:00 2001 From: Brian Waldon Date: Wed, 12 Sep 2012 15:30:03 -0700 Subject: [PATCH] Add filesystem store driver to new func testing This also fixes bug 1050098. In order to match the existing functional store test, the filesystem backend needed to be returning the actual image size. Change-Id: If202a52a6d303ca2d07fd3abb7f9ac7fe009690e --- glance/store/filesystem.py | 6 +- .../tests/functional/store/test_filesystem.py | 66 +++++++++++++++++++ 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 glance/tests/functional/store/test_filesystem.py diff --git a/glance/store/filesystem.py b/glance/store/filesystem.py index b4055b82c7..b3ef89cb29 100644 --- a/glance/store/filesystem.py +++ b/glance/store/filesystem.py @@ -149,7 +149,11 @@ class Store(glance.store.base.Store): else: msg = _("Found image at %s. Returning in ChunkedFile.") % filepath LOG.debug(msg) - return (ChunkedFile(filepath), None) + try: + image_size = str(os.path.getsize(filepath)) + except os.error: + image_size = None + return (ChunkedFile(filepath), image_size) def delete(self, location): """ diff --git a/glance/tests/functional/store/test_filesystem.py b/glance/tests/functional/store/test_filesystem.py new file mode 100644 index 0000000000..7930ea59c2 --- /dev/null +++ b/glance/tests/functional/store/test_filesystem.py @@ -0,0 +1,66 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2012 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. +""" +Functional tests for the File store interface +""" + +import os +import os.path +import shutil +import unittest + +import glance.openstack.common.cfg +import glance.store.filesystem +import glance.tests.functional.store as store_tests +import glance.tests.utils + + +class TestFilesystemStore(store_tests.BaseTestCase, unittest.TestCase): + + store_cls = glance.store.filesystem.Store + store_name = 'filesystem' + + def setUp(self): + _, self.tmp_dir = glance.tests.utils.get_isolated_test_env() + + self.store_dir = os.path.join(self.tmp_dir, 'images') + os.mkdir(self.store_dir) + + config_file = os.path.join(self.tmp_dir, 'glance.conf') + with open(config_file, 'w') as fap: + fap.write("[DEFAULT]\n") + fap.write("filesystem_store_datadir=%s" % self.store_dir) + + glance.openstack.common.cfg.CONF(default_config_files=[config_file]) + + super(TestFilesystemStore, self).setUp() + + def tearDown(self): + shutil.rmtree(self.tmp_dir) + super(TestFilesystemStore, self).tearDown() + + def get_store(self, **kwargs): + store = glance.store.filesystem.Store(context=kwargs.get('context')) + store.configure() + store.configure_add() + return store + + def get_default_store_specs(self, image_id): + return { + 'scheme': 'file', + 'path': os.path.join(self.store_dir, image_id), + }