Add tests for manifest generation for missing files
This is a patch that adds test to make sure that we handle FileNotFound exceptions during walks. Change-Id: I6d3513ddb4a705a28043065b1398b75018ee3115
This commit is contained in:
parent
dd40f5ed9f
commit
f3615abc01
@ -37,6 +37,15 @@ def path_in_tree(root, path):
|
||||
return True
|
||||
|
||||
|
||||
def _get_file_info(path):
|
||||
try:
|
||||
st = os.stat(path)
|
||||
except OSError:
|
||||
return 0, 0
|
||||
|
||||
return st[stat.ST_MTIME], st[stat.ST_SIZE]
|
||||
|
||||
|
||||
def walk(root, original_root=None):
|
||||
if original_root is None:
|
||||
original_root = root
|
||||
@ -67,19 +76,14 @@ def walk(root, original_root=None):
|
||||
mime_guess, encoding = mimetypes.guess_type(path)
|
||||
if not mime_guess:
|
||||
mime_guess = 'text/plain'
|
||||
# This may fail e.g. for dangling symlinks, just ignore those
|
||||
try:
|
||||
st = os.stat(path)
|
||||
last_modified = st[stat.ST_MTIME]
|
||||
size = st[stat.ST_SIZE]
|
||||
data.append(dict(name=f,
|
||||
mimetype=mime_guess,
|
||||
encoding=encoding,
|
||||
last_modified=last_modified,
|
||||
size=size))
|
||||
except FileNotFoundError:
|
||||
last_modified, size = _get_file_info(path)
|
||||
if not last_modified and not size:
|
||||
continue
|
||||
|
||||
data.append(dict(name=f,
|
||||
mimetype=mime_guess,
|
||||
encoding=encoding,
|
||||
last_modified=last_modified,
|
||||
size=size))
|
||||
return data
|
||||
|
||||
|
||||
|
@ -19,9 +19,11 @@ from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
import os
|
||||
import stat
|
||||
import testtools
|
||||
import fixtures
|
||||
|
||||
from .generate_manifest import _get_file_info
|
||||
from .generate_manifest import walk
|
||||
|
||||
|
||||
@ -126,3 +128,18 @@ class TestFileList(testtools.TestCase):
|
||||
('controller/service_log.txt', 'text/plain', None),
|
||||
('symlink_loop/placeholder', 'text/plain', None),
|
||||
])
|
||||
|
||||
def test_get_file_info(self):
|
||||
'''Test files info'''
|
||||
path = os.path.join(FIXTURE_DIR, 'logs', 'job-output.json')
|
||||
last_modified, size = _get_file_info(path)
|
||||
|
||||
self.assertEqual(os.stat(path)[stat.ST_MTIME], last_modified)
|
||||
self.assertEqual(16, size)
|
||||
|
||||
def test_get_file_info_missing_file(self):
|
||||
'''Test files that go missing during a walk'''
|
||||
last_modified, size = _get_file_info('missing/file/that/we/cant/find')
|
||||
|
||||
self.assertEqual(0, last_modified)
|
||||
self.assertEqual(0, size)
|
||||
|
Loading…
Reference in New Issue
Block a user