From 9926ec7ff6d51a3c60d5f3a874340f82b7a7e8a8 Mon Sep 17 00:00:00 2001 From: Philippe Proulx Date: Wed, 19 Nov 2014 21:41:02 -0500 Subject: [PATCH] Refactor test infrastructure for metadata stress Signed-off-by: Philippe Proulx --- .gitignore | 2 + .../metadata/pass/large-metadata/test.py | 109 +++++------------ .../metadata/pass/long-identifier/test.py | 111 ++++++----------- .../metadata/pass/many-callsites/test.py | 113 ++++++------------ .../metadata/pass/many-stream-class/test.py | 103 +++++----------- .../metadata/pass/many-typealias/test.py | 96 +++++---------- .../stress/metadata/pass/many-typedef/test.py | 96 +++++---------- tests/1.8/stress/metadata/pass/test.sh | 7 +- utils/python/ctftestsuite/__init__.py | 0 utils/python/ctftestsuite/stress.py | 78 ++++++++++++ 10 files changed, 279 insertions(+), 436 deletions(-) create mode 100644 .gitignore create mode 100644 utils/python/ctftestsuite/__init__.py create mode 100644 utils/python/ctftestsuite/stress.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..43ae0e2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +__pycache__/ +*.py[cod] diff --git a/tests/1.8/stress/metadata/pass/large-metadata/test.py b/tests/1.8/stress/metadata/pass/large-metadata/test.py index 38224ff..5fb7a60 100755 --- a/tests/1.8/stress/metadata/pass/large-metadata/test.py +++ b/tests/1.8/stress/metadata/pass/large-metadata/test.py @@ -1,90 +1,43 @@ #!/usr/bin/env python3 +from ctftestsuite.stress import MetadataTest -# Expects either "prepare" or "clean" argument -import sys -import os -import struct +class Test(MetadataTest): + what = 'large metadata with {size} extra chars' -def arg_err(): - print('Please specify "prepare " or "clean " as first argument.') - sys.exit(-1) + def write_metadata(self, f): + p1 = '''/* CTF 1.8 */ -if (len(sys.argv) <= 1): - arg_err() -mode = sys.argv[1] -if (len(sys.argv) <= 2): - arg_err() -array_len = int(sys.argv[2]) +typealias integer { size = 8; align = 8; signed = false; base = 10; } := uint8_t; +typealias integer { size = 32; align = 8; signed = false; base = hex; } := uint32_t; -tracedir_name = './trace-' + str(array_len) + '/' -output_metadata = tracedir_name + 'metadata' -output_stream = tracedir_name + 'stream' +trace { + major = 0; + minor = 0; + uuid = "2a6422d0-6cee-11e0-8c08-cb07d7b3a564"; + byte_order = le; + packet.header := struct { + uint32_t magic; + uint8_t uuid[16]; + }; +}; +event { + name = myevent; + fields := struct { + uint8_t f; + }; +''' + p2 = '\n};\n' -def write_binary(f, arr): - f.write(bytes(arr)) + f.write(p1) -def generate_metadata(array_len): - # Generate metadata - metadata_str1 = \ - ('/* CTF 1.8 */\n' - '\n' - 'typealias integer {{ size = 8; align = 8; signed = false; base = 10; }} := uint8_t;\n' - 'typealias integer {{ size = 32; align = 8; signed = false; base = hex; }} := uint32_t;\n' - '\n' - 'trace {{\n' - ' major = 0;\n' - ' minor = 0;\n' - ' uuid = "2a6422d0-6cee-11e0-8c08-cb07d7b3a564";\n' - ' byte_order = le;\n' - ' packet.header := struct {{\n' - ' uint32_t magic;\n' - ' uint8_t uuid[16];\n' - ' }};\n' - '}};\n' - '\n' - 'event {{\n' - ' name = myevent;\n' - ' fields := struct {{\n' - ' uint8_t f;\n' - ' }};\n').format() + for i in range(self.size): + f.write(' ') - metadata_char = \ - (' ') + f.write(p2) - metadata_str2 = \ - ('\n' - '}};\n' - '\n').format() - metadata_f = open(output_metadata, 'w') - metadata_f.write(metadata_str1) - for i in range(array_len): - metadata_f.write(metadata_char.format()) - metadata_f.write(metadata_str2) - metadata_f.close() - -def test_prepare(): - print('Preparing test for large metadata ' + str(array_len) + ' chars') - os.mkdir(tracedir_name) - generate_metadata(array_len) - -def test_clean(): - print('Cleaning up test for large metadata ' + str(array_len) + ' chars') - try: - os.remove(output_metadata) - except: - pass - try: - os.rmdir(tracedir_name) - except: - pass - -if (mode == "prepare"): - test_clean() - test_prepare() -elif (mode == "clean"): - test_clean() -else: - arg_err() +if __name__ == '__main__': + test = Test() + test.main() diff --git a/tests/1.8/stress/metadata/pass/long-identifier/test.py b/tests/1.8/stress/metadata/pass/long-identifier/test.py index 34c5f4e..b2a7c9a 100755 --- a/tests/1.8/stress/metadata/pass/long-identifier/test.py +++ b/tests/1.8/stress/metadata/pass/long-identifier/test.py @@ -1,90 +1,47 @@ #!/usr/bin/env python3 +from ctftestsuite.stress import MetadataTest -# Expects either "prepare" or "clean" argument -import sys -import os -import struct +class Test(MetadataTest): + what = 'long identifier of {size} chars' -def arg_err(): - print('Please specify "prepare " or "clean " as first argument.') - sys.exit(-1) + def write_metadata(self, f): + p1 = \ +'''/* CTF 1.8 */ -if (len(sys.argv) <= 1): - arg_err() -mode = sys.argv[1] -if (len(sys.argv) <= 2): - arg_err() -array_len = int(sys.argv[2]) +typealias integer { size = 8; align = 8; signed = false; base = 10; } := uint8_t; +typealias integer { size = 32; align = 8; signed = false; base = hex; } := uint32_t; -tracedir_name = './trace-' + str(array_len) + '/' -output_metadata = tracedir_name + 'metadata' -output_stream = tracedir_name + 'stream' +trace { + major = 0; + minor = 0; + uuid = "2a6422d0-6cee-11e0-8c08-cb07d7b3a564"; + byte_order = le; + packet.header := struct { + uint32_t magic; + uint8_t uuid[16]; + }; +}; +event { + name = myevent; + fields := struct { + uint8_t ''' -def write_binary(f, arr): - f.write(bytes(arr)) + p2 = \ +'''; + }; +}; +''' -def generate_metadata(array_len): - # Generate metadata - metadata_str1 = \ - ('/* CTF 1.8 */\n' - '\n' - 'typealias integer {{ size = 8; align = 8; signed = false; base = 10; }} := uint8_t;\n' - 'typealias integer {{ size = 32; align = 8; signed = false; base = hex; }} := uint32_t;\n' - '\n' - 'trace {{\n' - ' major = 0;\n' - ' minor = 0;\n' - ' uuid = "2a6422d0-6cee-11e0-8c08-cb07d7b3a564";\n' - ' byte_order = le;\n' - ' packet.header := struct {{\n' - ' uint32_t magic;\n' - ' uint8_t uuid[16];\n' - ' }};\n' - '}};\n' - '\n' - 'event {{\n' - ' name = myevent;\n' - ' fields := struct {{\n' - ' uint8_t ').format() + f.write(p1) - metadata_char = \ - ('A') + for i in range(self.size): + f.write('A') - metadata_str2 = \ - (';\n' - ' }};\n' - '}};\n' - '\n').format() + f.write(p2) - metadata_f = open(output_metadata, 'w') - metadata_f.write(metadata_str1) - for i in range(array_len): - metadata_f.write(metadata_char.format()) - metadata_f.write(metadata_str2) - metadata_f.close() -def test_prepare(): - print('Preparing test for long identifier ' + str(array_len) + ' chars') - os.mkdir(tracedir_name) - generate_metadata(array_len) - -def test_clean(): - print('Cleaning up test for long identifier ' + str(array_len) + ' chars') - try: - os.remove(output_metadata) - except: - pass - try: - os.rmdir(tracedir_name) - except: - pass - -if (mode == "prepare"): - test_clean() - test_prepare() -elif (mode == "clean"): - test_clean() -else: - arg_err() +if __name__ == '__main__': + test = Test() + test.main() diff --git a/tests/1.8/stress/metadata/pass/many-callsites/test.py b/tests/1.8/stress/metadata/pass/many-callsites/test.py index c7b5341..bc02a55 100755 --- a/tests/1.8/stress/metadata/pass/many-callsites/test.py +++ b/tests/1.8/stress/metadata/pass/many-callsites/test.py @@ -1,89 +1,52 @@ #!/usr/bin/env python3 +from ctftestsuite.stress import MetadataTest -# Expects either "prepare" or "clean" argument -import sys -import os -import struct +class Test(MetadataTest): + what = '{size} callsites' -def arg_err(): - print('Please specify "prepare " or "clean " as first argument.') - sys.exit(-1) + def write_metadata(self, f): + p1 = \ +'''/* CTF 1.8 */ -if (len(sys.argv) <= 1): - arg_err() -mode = sys.argv[1] -if (len(sys.argv) <= 2): - arg_err() -array_len = int(sys.argv[2]) +typealias integer { size = 8; align = 8; signed = false; base = 10; } := uint8_t; +typealias integer { size = 32; align = 8; signed = false; base = hex; } := uint32_t; -tracedir_name = './trace-' + str(array_len) + '/' -output_metadata = tracedir_name + 'metadata' -output_stream = tracedir_name + 'stream' +trace { + major = 0; + minor = 0; + uuid = "2a6422d0-6cee-11e0-8c08-cb07d7b3a564"; + byte_order = le; + packet.header := struct { + uint32_t magic; + uint8_t uuid[16]; + }; +}; +event { + name = myevent; +}; -def write_binary(f, arr): - f.write(bytes(arr)) +''' -def generate_metadata(array_len): - # Generate metadata - metadata_str = \ - ( '/* CTF 1.8 */\n' - '\n' - 'typealias integer {{ size = 8; align = 8; signed = false; base = 10; }} := uint8_t;\n' - 'typealias integer {{ size = 32; align = 8; signed = false; base = hex; }} := uint32_t;\n' - '\n' - 'trace {{\n' - ' major = 0;\n' - ' minor = 0;\n' - ' uuid = "2a6422d0-6cee-11e0-8c08-cb07d7b3a564";\n' - ' byte_order = le;\n' - ' packet.header := struct {{\n' - ' uint32_t magic;\n' - ' uint8_t uuid[16];\n' - ' }};\n' - '}};\n' - '\n' - 'event {{\n' - ' name = myevent;\n' - '}};\n' - '\n').format() + callsite_fmt = \ +'''callsite {{ + name = "myevent"; + func = "myfunc{i}"; + file = "myfile{i}"; + line = {i}; + ip = 0x{i}; +}}; - metadata_callsite = \ - ('callsite {{\n' - ' name = "myevent";\n' - ' func = "myfunc{}";\n' - ' file = "myfile{}";\n' - ' line = {};\n' - ' ip = 0x{};\n' - '}};\n') +''' - metadata_f = open(output_metadata, 'w') - metadata_f.write(metadata_str) - for i in range(array_len): - metadata_f.write(metadata_callsite.format(i, i, i, i)) - metadata_f.close() + f.write(p1) -def test_prepare(): - print('Preparing test for ' + str(array_len) + ' callsites') - os.mkdir(tracedir_name) - generate_metadata(array_len) + for i in range(self.size): + callsite = callsite_fmt.format(i=i) + f.write(callsite) -def test_clean(): - print('Cleaning up test for ' + str(array_len) + ' callsites') - try: - os.remove(output_metadata) - except: - pass - try: - os.rmdir(tracedir_name) - except: - pass -if (mode == "prepare"): - test_clean() - test_prepare() -elif (mode == "clean"): - test_clean() -else: - arg_err() +if __name__ == '__main__': + test = Test() + test.main() diff --git a/tests/1.8/stress/metadata/pass/many-stream-class/test.py b/tests/1.8/stress/metadata/pass/many-stream-class/test.py index 0633440..ea7556f 100755 --- a/tests/1.8/stress/metadata/pass/many-stream-class/test.py +++ b/tests/1.8/stress/metadata/pass/many-stream-class/test.py @@ -1,83 +1,46 @@ #!/usr/bin/env python3 +from ctftestsuite.stress import MetadataTest -# Expects either "prepare" or "clean" argument -import sys -import os -import struct +class Test(MetadataTest): + what = '{size} stream classes' -def arg_err(): - print('Please specify "prepare " or "clean " as first argument.') - sys.exit(-1) + def write_metadata(self, f): + p1 = \ +'''/* CTF 1.8 */ -if (len(sys.argv) <= 1): - arg_err() -mode = sys.argv[1] -if (len(sys.argv) <= 2): - arg_err() -array_len = int(sys.argv[2]) +typealias integer { size = 8; align = 8; signed = false; base = 10; } := uint8_t; +typealias integer { size = 32; align = 8; signed = false; base = hex; } := uint32_t; +typealias integer { size = 64; align = 8; signed = false; base = hex; } := uint64_t; -tracedir_name = './trace-' + str(array_len) + '/' -output_metadata = tracedir_name + 'metadata' -output_stream = tracedir_name + 'stream' +trace { + major = 0; + minor = 0; + uuid = "2a6422d0-6cee-11e0-8c08-cb07d7b3a564"; + byte_order = le; + packet.header := struct { + uint32_t magic; + uint8_t uuid[16]; + uint64_t stream_id; + }; +}; +''' -def write_binary(f, arr): - f.write(bytes(arr)) + stream_fmt = \ +'''stream {{ + id = {id}; +}}; -def generate_metadata(array_len): - # Generate metadata - metadata_str = \ - ( '/* CTF 1.8 */\n' - '\n' - 'typealias integer {{ size = 8; align = 8; signed = false; base = 10; }} := uint8_t;\n' - 'typealias integer {{ size = 32; align = 8; signed = false; base = hex; }} := uint32_t;\n' - 'typealias integer {{ size = 64; align = 8; signed = false; base = hex; }} := uint64_t;\n' - '\n' - 'trace {{\n' - ' major = 0;\n' - ' minor = 0;\n' - ' uuid = "2a6422d0-6cee-11e0-8c08-cb07d7b3a564";\n' - ' byte_order = le;\n' - ' packet.header := struct {{\n' - ' uint32_t magic;\n' - ' uint8_t uuid[16];\n' - ' uint64_t stream_id;\n' - ' }};\n' - '}};\n' - '\n').format() +''' - metadata_stream_class = \ - ('stream {{\n' - ' id = {};\n' - '}};\n') + f.write(p1) - metadata_f = open(output_metadata, 'w') - metadata_f.write(metadata_str) - for i in range(array_len): - metadata_f.write(metadata_stream_class.format(i)) - metadata_f.close() + for i in range(self.size): + stream = stream_fmt.format(id=i) + f.write(stream) -def test_prepare(): - print('Preparing test for ' + str(array_len) + ' stream class') - os.mkdir(tracedir_name) - generate_metadata(array_len) -def test_clean(): - print('Cleaning up test for ' + str(array_len) + ' stream class') - try: - os.remove(output_metadata) - except: - pass - try: - os.rmdir(tracedir_name) - except: - pass - -if (mode == "prepare"): - test_clean() - test_prepare() -elif (mode == "clean"): - test_clean() -else: - arg_err() +if __name__ == '__main__': + test = Test() + test.main() diff --git a/tests/1.8/stress/metadata/pass/many-typealias/test.py b/tests/1.8/stress/metadata/pass/many-typealias/test.py index 43821c7..97c9893 100755 --- a/tests/1.8/stress/metadata/pass/many-typealias/test.py +++ b/tests/1.8/stress/metadata/pass/many-typealias/test.py @@ -1,79 +1,41 @@ #!/usr/bin/env python3 +from ctftestsuite.stress import MetadataTest -# Expects either "prepare" or "clean" argument -import sys -import os -import struct +class Test(MetadataTest): + what = '{size} typealiases' -def arg_err(): - print('Please specify "prepare " or "clean " as first argument.') - sys.exit(-1) + def write_metadata(self, f): + p1 = \ +'''/* CTF 1.8 */ -if (len(sys.argv) <= 1): - arg_err() -mode = sys.argv[1] -if (len(sys.argv) <= 2): - arg_err() -array_len = int(sys.argv[2]) +typealias integer { size = 8; align = 8; signed = false; base = 10; } := uint8_t; +typealias integer { size = 32; align = 8; signed = false; base = hex; } := uint32_t; -tracedir_name = './trace-' + str(array_len) + '/' -output_metadata = tracedir_name + 'metadata' -output_stream = tracedir_name + 'stream' +trace { + major = 0; + minor = 0; + uuid = "2a6422d0-6cee-11e0-8c08-cb07d7b3a564"; + byte_order = le; + packet.header := struct { + uint32_t magic; + uint8_t uuid[16]; + }; +}; +''' -def write_binary(f, arr): - f.write(bytes(arr)) + typealias_fmt = \ +'''typealias integer {{ size = 8; align = 8; signed = false; base = 10; }} := t{name}; +''' -def generate_metadata(array_len): - # Generate metadata - metadata_str = \ - ( '/* CTF 1.8 */\n' - '\n' - 'typealias integer {{ size = 8; align = 8; signed = false; base = 10; }} := uint8_t;\n' - 'typealias integer {{ size = 32; align = 8; signed = false; base = hex; }} := uint32_t;\n' - '\n' - 'trace {{\n' - ' major = 0;\n' - ' minor = 0;\n' - ' uuid = "2a6422d0-6cee-11e0-8c08-cb07d7b3a564";\n' - ' byte_order = le;\n' - ' packet.header := struct {{\n' - ' uint32_t magic;\n' - ' uint8_t uuid[16];\n' - ' }};\n' - '}};\n' - '\n').format() + f.write(p1) - metadata_typealias = \ - ('typealias integer {{ size = 8; align = 8; signed = false; base = 10; }} := t{};\n') + for i in range(self.size): + typealias = typealias_fmt.format(name=i) + f.write(typealias) - metadata_f = open(output_metadata, 'w') - metadata_f.write(metadata_str) - for i in range(array_len): - metadata_f.write(metadata_typealias.format(i)) - metadata_f.close() -def test_prepare(): - print('Preparing test for ' + str(array_len) + ' typealias') - os.mkdir(tracedir_name) - generate_metadata(array_len) - -def test_clean(): - print('Cleaning up test for ' + str(array_len) + ' typealias') - try: - os.remove(output_metadata) - except: - pass - try: - os.rmdir(tracedir_name) - except: - pass - -if (mode == "prepare"): - test_clean() - test_prepare() -elif (mode == "clean"): - test_clean() -else: - arg_err() +if __name__ == '__main__': + test = Test() + test.main() diff --git a/tests/1.8/stress/metadata/pass/many-typedef/test.py b/tests/1.8/stress/metadata/pass/many-typedef/test.py index 24e20a0..b5c58b2 100755 --- a/tests/1.8/stress/metadata/pass/many-typedef/test.py +++ b/tests/1.8/stress/metadata/pass/many-typedef/test.py @@ -1,79 +1,41 @@ #!/usr/bin/env python3 +from ctftestsuite.stress import MetadataTest -# Expects either "prepare" or "clean" argument -import sys -import os -import struct +class Test(MetadataTest): + what = '{size} typedefs' -def arg_err(): - print('Please specify "prepare " or "clean " as first argument.') - sys.exit(-1) + def write_metadata(self, f): + p1 = \ +'''/* CTF 1.8 */ -if (len(sys.argv) <= 1): - arg_err() -mode = sys.argv[1] -if (len(sys.argv) <= 2): - arg_err() -array_len = int(sys.argv[2]) +typealias integer { size = 8; align = 8; signed = false; base = 10; } := uint8_t; +typealias integer { size = 32; align = 8; signed = false; base = hex; } := uint32_t; -tracedir_name = './trace-' + str(array_len) + '/' -output_metadata = tracedir_name + 'metadata' -output_stream = tracedir_name + 'stream' +trace { + major = 0; + minor = 0; + uuid = "2a6422d0-6cee-11e0-8c08-cb07d7b3a564"; + byte_order = le; + packet.header := struct { + uint32_t magic; + uint8_t uuid[16]; + }; +}; +''' -def write_binary(f, arr): - f.write(bytes(arr)) + typedef_fmt = \ +'''typedef integer {{ size = 8; align = 8; signed = false; base = 10; }} t{name}; +''' -def generate_metadata(array_len): - # Generate metadata - metadata_str = \ - ( '/* CTF 1.8 */\n' - '\n' - 'typealias integer {{ size = 8; align = 8; signed = false; base = 10; }} := uint8_t;\n' - 'typealias integer {{ size = 32; align = 8; signed = false; base = hex; }} := uint32_t;\n' - '\n' - 'trace {{\n' - ' major = 0;\n' - ' minor = 0;\n' - ' uuid = "2a6422d0-6cee-11e0-8c08-cb07d7b3a564";\n' - ' byte_order = le;\n' - ' packet.header := struct {{\n' - ' uint32_t magic;\n' - ' uint8_t uuid[16];\n' - ' }};\n' - '}};\n' - '\n').format() + f.write(p1) - metadata_typedef = \ - ('typedef integer {{ size = 8; align = 8; signed = false; base = 10; }} t{};\n') + for i in range(self.size): + typedef = typedef_fmt.format(name=i) + f.write(typedef) - metadata_f = open(output_metadata, 'w') - metadata_f.write(metadata_str) - for i in range(array_len): - metadata_f.write(metadata_typedef.format(i)) - metadata_f.close() -def test_prepare(): - print('Preparing test for ' + str(array_len) + ' typedef') - os.mkdir(tracedir_name) - generate_metadata(array_len) - -def test_clean(): - print('Cleaning up test for ' + str(array_len) + ' typedef') - try: - os.remove(output_metadata) - except: - pass - try: - os.rmdir(tracedir_name) - except: - pass - -if (mode == "prepare"): - test_clean() - test_prepare() -elif (mode == "clean"): - test_clean() -else: - arg_err() +if __name__ == '__main__': + test = Test() + test.main() diff --git a/tests/1.8/stress/metadata/pass/test.sh b/tests/1.8/stress/metadata/pass/test.sh index 5909477..96866fc 100755 --- a/tests/1.8/stress/metadata/pass/test.sh +++ b/tests/1.8/stress/metadata/pass/test.sh @@ -18,6 +18,8 @@ CURDIR=$(dirname $0) UTILS_DIR=$CURDIR/../../../../../utils/ +export PYTHONPATH="$(realpath "$UTILS_DIR/python")" + source $UTILS_DIR/tap/tap.sh NUM_TESTS=0 @@ -34,7 +36,8 @@ if [ "x${CTF_READER_BIN}" == "x" ]; then fi for param in $(cat $1/param-list.txt); do - cd $1 && ./test.py prepare ${param} + cd $1 && ./test.py --size ${param} prepare + result=$? is $result 0 $1 cd .. @@ -43,7 +46,7 @@ for param in $(cat $1/param-list.txt); do result=$? is $result 0 $1 # expect pass - cd $1 && ./test.py clean ${param} + cd $1 && ./test.py --size ${param} clean result=$? is $result 0 $1 cd .. diff --git a/utils/python/ctftestsuite/__init__.py b/utils/python/ctftestsuite/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/utils/python/ctftestsuite/stress.py b/utils/python/ctftestsuite/stress.py new file mode 100644 index 0000000..d355fa3 --- /dev/null +++ b/utils/python/ctftestsuite/stress.py @@ -0,0 +1,78 @@ +import argparse +import shutil +import sys +import os + + +class MetadataTest: + def __init__(self): + self._actions = { + 'prepare': self._prepare, + 'clean': self._clean, + } + + @staticmethod + def _perror(str): + print('Error: {}'.format(str), file=sys.stderr) + sys.exit(1) + + def _parse_args(self): + ap = argparse.ArgumentParser() + + ap.add_argument('-s', '--size', action='store', metavar='SIZE', + type=int, required=True, help='size') + ap.add_argument('action', metavar='ACTION', action='store', + help='action') + + # parse args + args = ap.parse_args() + + # validate size + if args.size < 1: + MetadataTest._perror('wrong size: {}'.format(args.size)) + + return args + + def _get_what(self): + return self.what.format(size=self.size) + + def _prepare(self): + # make sure everything is clean first + self._clean() + + print('Preparing test for {}'.format(self._get_what())) + + # make test directory + os.mkdir(self._trace_dir_path) + + # open and write metadata file + with open(self._metadata_path, 'w') as f: + self.write_metadata(f) + + def _clean(self): + print('Cleaning up test for {}'.format(self._get_what())) + + try: + shutil.rmtree(self._trace_dir_path, ignore_errors=True) + except Exception as e: + # ignore + pass + + def _do_action(self): + if self._action not in self._actions: + MetadataTest._perror('invalid action: "{}"'.format(self._action)) + + self._actions[self._action]() + + @property + def size(self): + return self._size + + def main(self): + args = self._parse_args() + self._size = args.size + self._trace_dir_path = 'trace-{}'.format(args.size) + self._metadata_path = os.path.join(self._trace_dir_path, 'metadata') + self._action = args.action + + self._do_action() -- 2.34.1