source: icGREP/icgrep-devel/QA/base64/base64test.py @ 5288

Last change on this file since 5288 was 5288, checked in by xwa163, 3 years ago

fix bug of base64 related kernels, add test script for base64

File size: 4.2 KB
Line 
1import sys, subprocess, optparse, os, string, random
2import codecs
3import xml.etree.ElementTree as ET
4import base64
5
6global options
7global base64_test_file_name
8failure_count = 0
9
10def generateTestFile(name, content):
11    if content == None or len(content) == 0:
12        return
13    outfpath = os.path.join(options.datafile_dir, name)
14    outf = codecs.open(outfpath, encoding='utf-8', mode='w')
15    outf.write(content)
16    outf.close()
17
18def generateRandomStr(length):
19    outputStr = ""
20    for i in range(length):
21        outputStr += random.choice(string.printable)
22        # outputStr += random.choice(string.ascii_letters + "\n")
23    return outputStr
24
25def generateRandomTestFile(name, length):
26    content = generateRandomStr(length)
27    generateTestFile(name, content)
28
29def make_data_files(base64test_xml):
30    tree = ET.parse(base64test_xml)
31    root = tree.getroot()
32    for child in root:
33        if child.tag == 'testcase':
34            if "name" in child.attrib:
35                generateTestFile(child.attrib["name"], child.text)
36        elif child.tag == 'random-testcase':
37            if "length" in child.attrib and "name" in child.attrib:
38                generateRandomTestFile(child.attrib["name"], int(child.attrib["length"]))
39
40def run_test(test_name):
41    global options
42    global failure_count
43
44    test_file = os.path.join(options.datafile_dir, test_name)
45    base64_cmd = "%s %s" % (base64_program_under_test, test_file)
46    if options.verbose:
47        print("Doing: " + base64_cmd)
48
49    try:
50        base64_out = subprocess.check_output(base64_cmd.encode('utf-8'), cwd=options.exec_dir, shell=True)
51    except subprocess.CalledProcessError, e:
52        base64_out = e.output
53
54    inf = codecs.open(test_file, encoding='utf-8', mode='r')
55    content = inf.read()
56    inf.close()
57    expectedOutput = base64.b64encode(content)
58    if expectedOutput != base64_out:
59        print("Test failure: datafile {%s}" % (test_name))
60        failure_count += 1
61    else:
62        if options.verbose:
63            print("Test success: datafile {%s}" % (test_name))
64
65def run_tests(base64test_xml):
66    tree = ET.parse(base64test_xml)
67    root = tree.getroot()
68    for child in root:
69        if child.tag == 'testcase':
70            if "name" in child.attrib:
71                run_test(child.attrib["name"])
72        elif child.tag == 'random-testcase':
73            if "length" in child.attrib and "name" in child.attrib:
74                run_test(child.attrib["name"])
75    if failure_count > 0: exit(1)
76
77if __name__ == '__main__':
78    global options
79    global base64_test_file_name
80    QA_dir = os.path.dirname(sys.argv[0])
81    option_parser = optparse.OptionParser(usage='python %prog [options] <base64_executable>', version='1.0')
82    option_parser.add_option('-d', '--datafile_dir',
83                             dest = 'datafile_dir', type='string', default='testfiles',
84                             help = 'directory for test files.')
85    option_parser.add_option('-t', '--testcases',
86                             dest = 'testcases', type='string', default='base64test.xml',
87                             help = 'base64 test case file (XML format).')
88    option_parser.add_option('-e', '--exec_dir',
89                             dest = 'exec_dir', type='string', default='.',
90                             help = 'executable directory')
91    option_parser.add_option('-v', '--verbose',
92                             dest = 'verbose', action='store_true', default=False,
93                             help = 'verbose output: show successful tests')
94    option_parser.add_option('-U', '--UTF-16',
95                             dest = 'utf16', action='store_true', default=False,
96                             help = 'test UTF-16 processing')
97    options, args = option_parser.parse_args(sys.argv[1:])
98    if len(args) != 1:
99        option_parser.print_usage()
100        sys.exit(1)
101
102    if not os.path.exists(options.datafile_dir):
103        os.mkdir(options.datafile_dir)
104    if not os.path.isdir(options.datafile_dir):
105        print("Cannot use %s as working test file directory.\n" % options.datafile_dir)
106        sys.exit(1)
107    base64_program_under_test = args[0]
108    base64_test_file_name = os.path.join(QA_dir,options.testcases)
109    make_data_files(base64_test_file_name)
110    run_tests(base64_test_file_name)
111
Note: See TracBrowser for help on using the repository browser.