1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
#!/usr/bin/env python3
# Copyright (c) 2020, Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
'''
Please read .../tf_fuzz/regression/README to understand this code.
Please also read the comments in .../tf_fuzz/regression/regress_lib/line_by_line.py.
'''
import sys, os, re, string, pdb
sys.path.append ("../regress_lib")
import line_by_line
# Describe script usage:
def usage():
print ('''
Command-line parameters:
1. The test-template file, nominally named "template",
2. The expected combined stdout/stderr output, nominally named "exp_stdout_stderr",
3. The actual/generated combined stdout/stderr output, nominally named "stdout_stderr",
4. The expected .c test file, nominally named "exp_test.c", and
5. The actual, generated .c test file, nominally named "test.c".
Optionally, *before* these five arguments, you may add switches thus:
"--v" for verbose mode, to view line-by-line comparisons actual vs. expected,
"--q" to only print error messages and a successful-completion message,
"--qq" same as --q but not even printing out the completion message, and
"--s 12345" to run TF-Fuzz with seed value 12345 (or whatever).
''')
def main():
# See if we're supposed to be quiet:
loud = quiet = ultra_quiet = False
seed = ""
while sys.argv[1][0] == "-":
if sys.argv[1] == "--v":
loud = True
sys.argv.pop(1)
elif sys.argv[1] == "--q":
quiet = True
sys.argv.pop(1)
elif sys.argv[1] == "--qq":
quiet = ultra_quiet = True
sys.argv.pop(1)
elif sys.argv[1] == "--s":
sys.argv.pop(1)
seed = sys.argv[1]
sys.argv.pop(1)
if not seed.isnumeric():
print ('The --s seed argument was not a number.')
usage()
sys.exit(1)
# Run TF-Fuzz:
if not quiet: print ("Running TF-Fuzz... ")
os.system ('rm -f stdout_stderr test.c')
command = '../../tfz -v ./' + sys.argv[1] + ' ./' + sys.argv[5]
command += ' ' + seed + ' >' + sys.argv[3] + ' 2>&1'
if loud:
print (command)
if os.system (command) == 0:
if not quiet: print ("TF-Fuzz run complete.")
else:
print ('Could not run TF-Fuzz; please see stdout_stderr file.')
sys.exit(2)
# Attempt to open files indicated on command line:
if len(sys.argv) != 6:
message = '{} requires 5 command-line arguments. Exiting.'
print (message.format(sys.argv[0]), file=sys.stderr)
usage()
sys.exit(3)
template_file_name = sys.argv[1]
exp_stdout_file_name = sys.argv[2]
act_stdout_file_name = sys.argv[3]
exp_test_file_name = sys.argv[4]
act_test_file_name = sys.argv[5]
try:
template_file = open (template_file_name, 'rt')
exp_stdout_file = open (exp_stdout_file_name, 'rt')
act_stdout_file = open (act_stdout_file_name, 'rt')
exp_test_file = open (exp_test_file_name, 'rt')
act_test_file = open (act_test_file_name, 'rt')
except FileNotFoundError:
print ('One or more files could not be found.')
usage();
sys.exit(4)
except:
print ('Something went wrong trying to open the input files.')
usage();
sys.exit(5)
else:
message = '\nInput files:\n {},\n {},\n {},\n'
message += ' {}, and\n {}\nopened successfully.\n'
if not quiet:
print (message.format (template_file_name, exp_stdout_file_name,
act_stdout_file_name, exp_test_file_name, act_test_file_name))
# Check it all:
if not quiet: print ("\nChecking test C file: ", end="")
line_by_line.check_file ( exp_test_file, exp_test_file_name,
act_test_file, act_test_file_name,
loud, quiet, ultra_quiet )
if not quiet: print ("Checking stdout and stderr: ", end="")
line_by_line.check_file ( exp_stdout_file, exp_stdout_file_name,
act_stdout_file, act_stdout_file_name,
loud, quiet, ultra_quiet )
# Ran to completion normally, so pass:
if not ultra_quiet: print ("Regression test passed.")
sys.exit(0)
if __name__ == "__main__": main()
|