~ubuntu-branches/ubuntu/natty/libgcrypt11/natty-proposed

« back to all changes in this revision

Viewing changes to tests/cavs_tests.sh

  • Committer: Bazaar Package Importer
  • Author(s): Andreas Metzler
  • Date: 2009-02-21 13:46:58 UTC
  • mto: (1.1.6 upstream) (2.1.3 squeeze)
  • mto: This revision was merged to the branch mainline in revision 18.
  • Revision ID: james.westby@ubuntu.com-20090221134658-855twvcr4ezk2ron
ImportĀ upstreamĀ versionĀ 1.4.4

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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