iotests: teach FilePath to produce multiple paths

Use "FilePaths" instead of "FilePath" to request multiple files be
cleaned up after we leave that object's scope.

This is not crucial; but it saves a little typing.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190709232550.10724-16-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
John Snow 2019-07-29 16:35:54 -04:00
parent d443b74b3d
commit de263986b5

View File

@ -358,31 +358,45 @@ class Timeout:
def timeout(self, signum, frame): def timeout(self, signum, frame):
raise Exception(self.errmsg) raise Exception(self.errmsg)
def file_pattern(name):
return "{0}-{1}".format(os.getpid(), name)
class FilePath(object): class FilePaths(object):
'''An auto-generated filename that cleans itself up. """
FilePaths is an auto-generated filename that cleans itself up.
Use this context manager to generate filenames and ensure that the file Use this context manager to generate filenames and ensure that the file
gets deleted:: gets deleted::
with TestFilePath('test.img') as img_path: with FilePaths(['test.img']) as img_path:
qemu_img('create', img_path, '1G') qemu_img('create', img_path, '1G')
# migration_sock_path is automatically deleted # migration_sock_path is automatically deleted
''' """
def __init__(self, name): def __init__(self, names):
filename = '{0}-{1}'.format(os.getpid(), name) self.paths = []
self.path = os.path.join(test_dir, filename) for name in names:
self.paths.append(os.path.join(test_dir, file_pattern(name)))
def __enter__(self): def __enter__(self):
return self.path return self.paths
def __exit__(self, exc_type, exc_val, exc_tb): def __exit__(self, exc_type, exc_val, exc_tb):
try: try:
os.remove(self.path) for path in self.paths:
os.remove(path)
except OSError: except OSError:
pass pass
return False return False
class FilePath(FilePaths):
"""
FilePath is a specialization of FilePaths that takes a single filename.
"""
def __init__(self, name):
super(FilePath, self).__init__([name])
def __enter__(self):
return self.paths[0]
def file_path_remover(): def file_path_remover():
for path in reversed(file_path_remover.paths): for path in reversed(file_path_remover.paths):
@ -407,7 +421,7 @@ def file_path(*names):
paths = [] paths = []
for name in names: for name in names:
filename = '{0}-{1}'.format(os.getpid(), name) filename = file_pattern(name)
path = os.path.join(test_dir, filename) path = os.path.join(test_dir, filename)
file_path_remover.paths.append(path) file_path_remover.paths.append(path)
paths.append(path) paths.append(path)