tests: Rename 'errorcount' to 'error_count'.
[libgcrypt.git] / tests / cavs_tests.sh
1 #!/bin/sh
2 # Run FIPS CAVS tests
3 # Copyright 2008 Free Software Foundation, Inc.
4 #
5 # This file is free software; as a special exception the author gives
6 # unlimited permission to copy and/or distribute it, with or without
7 # modifications, as long as this notice is preserved.
8 #
9 # This file is distributed in the hope that it will be useful, but
10 # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
11 # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 #
13 # Instructions:
14 #
15 # 1. Cd to the libgcrypt/tests directory
16 #
17 # 2. Unpack the test vector tarball into subdirectory named "cavs".
18 #    An example directory layout after unpacking might be:
19 #      libgcrypt/tests/cavs/AES/req/CBCGFSbox128.req
20 #      libgcrypt/tests/cavs/AES/req/CFB128MCT128.req
21 #
22 #    Note that below the "cavs" directory there should only be one
23 #    directory part named "req".  Further avoid directory part
24 #    names "resp".
25 #
26 # 3. Run this script from the libgcrypt/tests directory:
27 #      ./cavs_tests.sh
28 #
29 # 4. Send the result file cavs/CAVS_results-*.zip to the testing lab.
30 #
31
32 # Stop script if something unexpected happens.
33 set -e
34
35 # A global flag to keep track of errors.
36 errors_seen_file="$(pwd)/.#cavs_test.errors_seen.tmp"
37 [ -f "$errors_seen_file" ] && rm "$errors_seen_file"
38 continue_mode=no
39 [ "$1" = "--continue" ] && continue_mode=yes
40
41
42 # Function to run one test.
43 # The argument is the request file name.
44 function run_one_test () {
45     local reqfile="$1"
46     local rspfile
47     local tmprspfile
48     local respdir
49     local dflag=""
50
51     tmprspfile=$(echo "$reqfile" | sed 's,.req$,.rsp,')
52     rspfile=$(echo "$tmprspfile" | sed 's,/req/,/resp/,' )
53     respdir=$(dirname "$rspfile")
54     [ -f "$tmprspfile" ] && rm "$tmprspfile"
55     [ -d "$respdir" ] || mkdir "$respdir"
56     [ -f "$rspfile" ] &&  rm "$rspfile"
57
58     if echo "$reqfile" | grep '/DSA/req/' >/dev/null 2>/dev/null; then
59         dflag="-D"
60     fi
61
62     if ./cavs_driver.pl -I libgcrypt $dflag "$reqfile"; then
63       if [ -f "$tmprspfile" ]; then
64           mv "$tmprspfile" "$rspfile"
65       else
66           echo "failed test: $reqfile" >&2
67           : >"$errors_seen_file"
68       fi
69     else
70         echo "failed test: $reqfile rc=$?" >&2
71         : >"$errors_seen_file"
72     fi
73 }
74
75
76
77 # Save date and system architecure to construct the output archive name
78 DATE=$(date +%Y%m%d)
79 ARCH=$(arch || echo unknown)
80 result_file="CAVS_results-$ARCH-$DATE.zip"
81
82 for f in fipsdrv cavs_driver.pl; do
83     if [ ! -f "./$f" ]; then
84       echo "required program \"$f\" missing in current directory" >&2
85       exit 2
86     fi
87 done
88 if [ ! -d cavs ]; then
89     echo "required directory \"cavs\" missing below current directory" >&2
90     exit 2
91 fi
92 if [ ! zip -h >/dev/null 2>&1 ]; then
93     echo "required program \"zip\" is not installed on this system" >&2
94     exit 2
95 fi
96
97 # Set the PATH to this directory so that the perl script is able to
98 # find the test drivers.
99 PATH=.:$PATH
100
101 # Check whether there are any stale response files
102 find cavs -type f -name "*.rsp" | ( while read f ; do
103     echo "Stale response file: $f" >&2
104     any=yes
105 done
106 if [ "$any" = "yes" ]; then
107     echo "Stale response files found" >&2
108     if [ "$continue_mode" != "yes" ]; then
109        echo "use option --continue if that is not a problem" >&2
110        exit 1
111     fi
112 fi
113 ) || exit 1
114
115
116 # Find all test files and run the tests.
117 find cavs -type f -name "*.req" | while read f ; do
118     echo "Running test file $f" >&2
119     run_one_test "$f"
120     if [ -f "$errors_seen_file" ]; then
121         break;
122     fi
123 done
124
125 if [ -f "$errors_seen_file" ]; then
126     rm "$errors_seen_file"
127     echo "Error encountered - not packing up response file" >&2
128     exit 1
129 fi
130
131 echo "Packing up all response files" >&2
132 cd cavs
133 find . -type f -name "*rsp" -print | zip -@ "$result_file"
134
135 echo "Result file is: cavs/$result_file" >&2