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
1 changed files with 24 additions and 10 deletions

View File

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