diff mbox series

[v2,7/8] iotests: add file_path helper

Message ID 20180312152126.286890-8-vsementsov@virtuozzo.com
State New
Headers show
Series nbd block status base:allocation | expand

Commit Message

Vladimir Sementsov-Ogievskiy March 12, 2018, 3:21 p.m. UTC
Simple way to have auto generated filenames with auto cleanup. Like
FilePath but without using 'with' statement and without additional
indentation of the whole test.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---

v2: fix type in commit message

 tests/qemu-iotests/iotests.py | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

Comments

Eric Blake March 13, 2018, 3:43 p.m. UTC | #1
On 03/12/2018 10:21 AM, Vladimir Sementsov-Ogievskiy wrote:
> Simple way to have auto generated filenames with auto cleanup. Like
> FilePath but without using 'with' statement and without additional
> indentation of the whole test.
> 
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> 

> +def file_path(*names):
> +    ''' Another way to get auto-generated filename that cleans itself up.
> +
> +    Use it as simple as:

s/it/is/

> +
> +    img_a, img_b = file_path('a.img', 'b.img')
> +    sock = file_path('socket')
> +    '''
> +
> +    if not hasattr(file_path_remover, 'paths'):
> +        file_path_remover.paths = []
> +        atexit.register(file_path_remover)
> +
> +    paths = []
> +    for name in names:
> +        filename = '{0}-{1}'.format(os.getpid(), name)
> +        path = os.path.join(test_dir, filename)
> +        file_path_remover.paths.append(path)
> +        paths.append(path)
> +
> +    return paths[0] if len(paths) == 1 else paths
> +
> +
>   class VM(qtest.QEMUQtestMachine):
>       '''A QEMU VM'''
>   

Reviewed-by: Eric Blake <eblake@redhat.com>
diff mbox series

Patch

diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
index c1302a2f9b..f2d05ca3fd 100644
--- a/tests/qemu-iotests/iotests.py
+++ b/tests/qemu-iotests/iotests.py
@@ -27,6 +27,7 @@  import struct
 import json
 import signal
 import logging
+import atexit
 
 sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'scripts'))
 import qtest
@@ -250,6 +251,37 @@  class FilePath(object):
         return False
 
 
+def file_path_remover():
+    for path in reversed(file_path_remover.paths):
+        try:
+            os.remove(path)
+        except OSError:
+            pass
+
+
+def file_path(*names):
+    ''' Another way to get auto-generated filename that cleans itself up.
+
+    Use it as simple as:
+
+    img_a, img_b = file_path('a.img', 'b.img')
+    sock = file_path('socket')
+    '''
+
+    if not hasattr(file_path_remover, 'paths'):
+        file_path_remover.paths = []
+        atexit.register(file_path_remover)
+
+    paths = []
+    for name in names:
+        filename = '{0}-{1}'.format(os.getpid(), name)
+        path = os.path.join(test_dir, filename)
+        file_path_remover.paths.append(path)
+        paths.append(path)
+
+    return paths[0] if len(paths) == 1 else paths
+
+
 class VM(qtest.QEMUQtestMachine):
     '''A QEMU VM'''