source: icGREP/icgrep-devel/QA/lz4d_ext_dep/main.py @ 5886

Last change on this file since 5886 was 5886, checked in by xwa163, 12 months ago

Add test cases for lz4d_ext_dep with -extract-and-deposit-only option

File size: 4.5 KB
Line 
1import lz4d
2
3import sys, subprocess, optparse, os, string, random
4import codecs
5import shutil
6
7global options
8global lz4d_program_under_test
9
10failure_count = 0
11
12# TODO Only test extract-only and extract-and-deposit-only now
13test_options = [
14    ('extract_only', '-extract-only', {'extract_only' : True}),
15    ('extract_and_deposit', '-extract-and-deposit-only', {'extract_and_deposit_only': True}),
16    # ('normal', '', {}),
17]
18
19def run_test(test_file, lz4_option, python_lz4_option, test_file_full_path, output_file_full_path, python_output_file_full_path):
20    global failure_count
21    lz4d_cmd = "%s %s --thread-num=1 -segment-size=8 -f %s %s" % (
22    lz4d_program_under_test, lz4_option, test_file_full_path, output_file_full_path, )
23
24    if options.verbose:
25        print("Doing: " + lz4d_cmd)
26    try:
27        lz4d_out = subprocess.check_output(lz4d_cmd.encode('utf-8'), cwd=options.exec_dir, shell=True)
28    except subprocess.CalledProcessError as e:
29        lz4d_out = e.output
30
31    lz4Decoder = lz4d.LZ4Decoder()
32
33    lz4Decoder.decode(test_file_full_path, python_output_file_full_path, python_lz4_option)
34
35    with codecs.open(output_file_full_path, mode='rb') as inf:
36        output_content = inf.read()
37    with codecs.open(python_output_file_full_path, mode='rb') as inf:
38        expected_output_content = inf.read()
39
40    if output_content != expected_output_content:
41        print("Test failure: datafile {%s} option:{%s}" % (test_file, lz4_option))
42        failure_count += 1
43    else:
44        if options.verbose:
45            print("Test success: datafile {%s} option:{%s}" % (test_file, lz4_option))
46
47
48def run_tests(test_dir, output_dir, python_output_dir):
49    global options
50    global failure_count
51
52    test_files = os.listdir(test_dir)
53
54    for test_file in test_files:
55        if test_file.endswith('.lz4'):
56            output_file = test_file.replace('.lz4', '')
57            test_file_full_path = os.path.join(test_dir, test_file)
58            for test_opt in test_options:
59                output_file_full_path = os.path.join(output_dir, test_opt[0], output_file)
60                python_output_file_full_path = os.path.join(python_output_dir, test_opt[0], output_file)
61                run_test(test_file, test_opt[1], test_opt[2], test_file_full_path, output_file_full_path, python_output_file_full_path)
62
63    if failure_count > 0:
64        print("Test Failure")
65        exit(1)
66    else:
67        print("Test Success")
68
69
70if __name__ == '__main__':
71    QA_dir = os.path.dirname(sys.argv[0])
72
73    option_parser = optparse.OptionParser(usage='python %prog [options] <lz4d_ext_dep_executable>', version='1.0')
74    option_parser.add_option('-d', '--datafile_dir',
75                             dest='datafile_dir', type='string', default='testfiles',
76                             help='directory for test files.')
77    option_parser.add_option('-e', '--exec_dir',
78                             dest='exec_dir', type='string', default='.',
79                             help='executable directory')
80    option_parser.add_option('-o', '--output_dir',
81                             dest='output_dir', type='string', default='output',
82                             help='output directory of decompressed files')
83    option_parser.add_option('-p', '--python_output_dir',
84                             dest='python_output_dir', type='string', default='python_output',
85                             help='output directory of expected result (python version)')
86    option_parser.add_option('-v', '--verbose',
87                             dest='verbose', action='store_true', default=False,
88                             help='verbose output: show successful tests')
89    options, args = option_parser.parse_args(sys.argv[1:])
90
91    if len(args) != 1:
92        option_parser.print_usage()
93        sys.exit(1)
94
95    if not os.path.exists(options.datafile_dir):
96        print(options.datafile_dir + ' not exists')
97        sys.exit(1)
98
99    if os.path.exists(options.output_dir):
100        shutil.rmtree(options.output_dir)
101    os.mkdir(options.output_dir)
102    for opt in test_options:
103        os.mkdir(os.path.join(options.output_dir, opt[0]))
104
105    if os.path.exists(options.python_output_dir):
106        shutil.rmtree(options.python_output_dir)
107
108    os.mkdir(options.python_output_dir)
109    for opt in test_options:
110        os.mkdir(os.path.join(options.python_output_dir, opt[0]))
111
112    lz4d_program_under_test = args[0]
113
114    test_dir = os.path.join(QA_dir, options.datafile_dir)
115    output_dir = os.path.join(QA_dir, options.output_dir)
116    python_output_dir = os.path.join(QA_dir, options.python_output_dir)
117    run_tests(test_dir, output_dir, python_output_dir)
118
Note: See TracBrowser for help on using the repository browser.