Improve unit test coverage per bug/934566.
bug/934566 identified an error which should have been caught by more complete unit test coverage. This review extends unit test coverage and is one of a series I will be sending. Change-Id: I76b966fc2bf18940d0dc0475f3776f8a3148a78d
This commit is contained in:
@@ -17,7 +17,9 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
|
||||||
|
import cStringIO
|
||||||
import hashlib
|
import hashlib
|
||||||
|
import logging
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
@@ -27,7 +29,7 @@ from nova import test
|
|||||||
|
|
||||||
from nova import db
|
from nova import db
|
||||||
from nova import flags
|
from nova import flags
|
||||||
from nova import log as logging
|
from nova import log
|
||||||
from nova.virt.libvirt import imagecache
|
from nova.virt.libvirt import imagecache
|
||||||
from nova.virt.libvirt import utils as virtutils
|
from nova.virt.libvirt import utils as virtutils
|
||||||
|
|
||||||
@@ -35,7 +37,7 @@ from nova.virt.libvirt import utils as virtutils
|
|||||||
flags.DECLARE('instances_path', 'nova.compute.manager')
|
flags.DECLARE('instances_path', 'nova.compute.manager')
|
||||||
FLAGS = flags.FLAGS
|
FLAGS = flags.FLAGS
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class ImageCacheManagerTestCase(test.TestCase):
|
class ImageCacheManagerTestCase(test.TestCase):
|
||||||
@@ -319,18 +321,25 @@ class ImageCacheManagerTestCase(test.TestCase):
|
|||||||
finally:
|
finally:
|
||||||
shutil.rmtree(dirname)
|
shutil.rmtree(dirname)
|
||||||
|
|
||||||
def test_remove_base_file(self):
|
def _make_base_file(checksum=True):
|
||||||
try:
|
"""Make a base file for testing."""
|
||||||
dirname = tempfile.mkdtemp()
|
|
||||||
fname = os.path.join(dirname, 'aaa')
|
|
||||||
|
|
||||||
f = open(fname, 'w')
|
dirname = tempfile.mkdtemp()
|
||||||
f.write('data')
|
fname = os.path.join(dirname, 'aaa')
|
||||||
f.close()
|
|
||||||
|
|
||||||
|
f = open(fname, 'w')
|
||||||
|
f.write('data')
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
if checksum:
|
||||||
f = open('%s.sha1' % fname, 'w')
|
f = open('%s.sha1' % fname, 'w')
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
|
return dirname, fname
|
||||||
|
|
||||||
|
def test_remove_base_file(self):
|
||||||
|
dirname, fname = self._make_base_file()
|
||||||
|
try:
|
||||||
image_cache_manager = imagecache.ImageCacheManager()
|
image_cache_manager = imagecache.ImageCacheManager()
|
||||||
image_cache_manager._remove_base_file(fname)
|
image_cache_manager._remove_base_file(fname)
|
||||||
|
|
||||||
@@ -339,7 +348,7 @@ class ImageCacheManagerTestCase(test.TestCase):
|
|||||||
self.assertTrue(os.path.exists('%s.sha1' % fname))
|
self.assertTrue(os.path.exists('%s.sha1' % fname))
|
||||||
|
|
||||||
# Old files get cleaned up though
|
# Old files get cleaned up though
|
||||||
os.utime(fname, (-1, time.time() - 100000))
|
os.utime(fname, (-1, time.time() - 3601))
|
||||||
image_cache_manager._remove_base_file(fname)
|
image_cache_manager._remove_base_file(fname)
|
||||||
|
|
||||||
self.assertFalse(os.path.exists(fname))
|
self.assertFalse(os.path.exists(fname))
|
||||||
@@ -347,3 +356,71 @@ class ImageCacheManagerTestCase(test.TestCase):
|
|||||||
|
|
||||||
finally:
|
finally:
|
||||||
shutil.rmtree(dirname)
|
shutil.rmtree(dirname)
|
||||||
|
|
||||||
|
def test_remove_base_file_original(self):
|
||||||
|
dirname, fname = self._make_base_file()
|
||||||
|
try:
|
||||||
|
image_cache_manager = imagecache.ImageCacheManager()
|
||||||
|
image_cache_manager.originals = [fname]
|
||||||
|
image_cache_manager._remove_base_file(fname)
|
||||||
|
|
||||||
|
# Files are initially too new to delete
|
||||||
|
self.assertTrue(os.path.exists(fname))
|
||||||
|
self.assertTrue(os.path.exists('%s.sha1' % fname))
|
||||||
|
|
||||||
|
# This file should stay longer than a resized image
|
||||||
|
os.utime(fname, (-1, time.time() - 3601))
|
||||||
|
image_cache_manager._remove_base_file(fname)
|
||||||
|
|
||||||
|
self.assertTrue(os.path.exists(fname))
|
||||||
|
self.assertTrue(os.path.exists('%s.sha1' % fname))
|
||||||
|
|
||||||
|
# Originals don't stay forever though
|
||||||
|
os.utime(fname, (-1, time.time() - 3600 * 25))
|
||||||
|
image_cache_manager._remove_base_file(fname)
|
||||||
|
|
||||||
|
self.assertFalse(os.path.exists(fname))
|
||||||
|
self.assertFalse(os.path.exists('%s.sha1' % fname))
|
||||||
|
|
||||||
|
finally:
|
||||||
|
shutil.rmtree(dirname)
|
||||||
|
|
||||||
|
def test_remove_base_file_dne(self):
|
||||||
|
# This test is solely to execute the "does not exist" code path. We
|
||||||
|
# don't expect the method being tested to do anything in this case.
|
||||||
|
dirname = tempfile.mkdtemp()
|
||||||
|
try:
|
||||||
|
fname = os.path.join(dirname, 'aaa')
|
||||||
|
image_cache_manager = imagecache.ImageCacheManager()
|
||||||
|
image_cache_manager._remove_base_file(fname)
|
||||||
|
|
||||||
|
finally:
|
||||||
|
shutil.rmtree(dirname)
|
||||||
|
|
||||||
|
def test_remove_base_file_oserror(self):
|
||||||
|
dirname = tempfile.mkdtemp()
|
||||||
|
|
||||||
|
# Intercept log messages
|
||||||
|
mylog = log.getLogger()
|
||||||
|
stream = cStringIO.StringIO()
|
||||||
|
handler = logging.StreamHandler(stream)
|
||||||
|
handler.setFormatter(log.LegacyNovaFormatter())
|
||||||
|
mylog.logger.addHandler(handler)
|
||||||
|
|
||||||
|
fname = os.path.join(dirname, 'aaa')
|
||||||
|
|
||||||
|
try:
|
||||||
|
os.mkdir(fname)
|
||||||
|
os.utime(fname, (-1, time.time() - 3601))
|
||||||
|
|
||||||
|
# This will raise an OSError because of file permissions
|
||||||
|
image_cache_manager = imagecache.ImageCacheManager()
|
||||||
|
image_cache_manager._remove_base_file(fname)
|
||||||
|
|
||||||
|
self.assertTrue(os.path.exists(fname))
|
||||||
|
self.assertNotEqual(stream.getvalue().find('Failed to remove'),
|
||||||
|
-1)
|
||||||
|
|
||||||
|
finally:
|
||||||
|
shutil.rmtree(dirname)
|
||||||
|
mylog.logger.removeHandler(handler)
|
||||||
|
|||||||
Reference in New Issue
Block a user