]> www.wagner.pp.ru Git - openssl-gost/engine.git/blob - tcl_tests/runtest.sh
tcl_tests: ca.try: Ignore openssl crl exit status for 'corrupted CRL' test
[openssl-gost/engine.git] / tcl_tests / runtest.sh
1 #!/bin/sh
2
3 # Состав набора тестов
4 # 1. Этот скрипт
5 # 2. Файлы *.try
6 # 3. Файлы *.tcl
7 # 4. Файлы *.ciphers
8 # 5. calcstat
9 # 6. oidfile
10 # 7. name2oid.tst
11
12 # Пререквизиты, которые должны быть установлены на машине:
13 # 1. tclsh.  Может называться с версией (см. список версий ниже в цикле
14 # перебора)
15 # 2. ssh (что характерно, называться должен именно так). Должен быть
16 # настроен заход по ключам без пароля на lynx и все используемые эталонники.
17 # Ключи этих машин должны быть в knownhosts (с полными доменными именами
18 # серверов, то есть lynx.lan.cryptocom.ru и т.д.)
19 # 3. Под Windows скрипт выполняется в среде MinGW, при этом нужно "донастроить"
20 # ssh, а именно создать в разделе реестра
21 # HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
22 # DWORD-ключ DisableUserTOSSetting=0
23
24 CRYPTOPACK_MAIN_VERSION=3
25
26 if [ -n "$OPENSSL_LIBCRYPTO" ]; then
27     libdir=`dirname $OPENSSL_LIBCRYPTO`
28     # Linux, ELF HP-UX
29     LD_LIBRARY_PATH=${libdir}${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
30     export LD_LIBRARY_PATH
31     # MacOS X
32     DYLD_LIBRARY_PATH=${libdir}${DYLD_LIBRARY_PATH:+:${DYLD_LIBRARY_PATH}}
33     export DYLD_LIBRARY_PATH
34 fi
35 : ${OPENSSL_APP:=$(which openssl 2>/dev/null)}
36 if [ -z "$OPENSSL_APP" ]; then
37         if [ "$OS" != "Windows NT" -a "$OS" != "Windows_NT" ]; then
38                 if [ -x  /opt/cryptopack$CRYPTOPACK_MAIN_VERSION/bin/openssl ]; then
39                         OPENSSL_APP=/opt/cryptopack$CRYPTOPACK_MAIN_VERSION/bin/openssl
40                 elif [ -x /usr/local/cryptopack$CRYPTOPACK_MAIN_VERSION/bin/openssl ];then
41                         OPENSSL_APP=/usr/local/cryptopack$CRYPTOPACK_MAIN_VERSION/bin/openssl
42                 fi
43         else
44                 if [ -x c:/cryptopack$CRYPTOPACK_MAIN_VERSION/bin/openssl.exe ] ; then
45                         OPENSSL_APP=c:/cryptopack$CRYPTOPACK_MAIN_VERSION/bin/openssl.exe
46                 fi
47         fi
48 fi
49 if [ -z "$OPENSSL_APP" ]; then
50         echo "openssl not found"
51         exit 1
52 else
53         echo "Using $OPENSSL_APP as openssl"
54 fi
55
56 : ${TCLSH:=$(which tclsh)}
57 if [ -z "$TCLSH" ]; then
58         for version in "" 8.4 84 8.5 85 8.6 86; do
59                 for command in tclsh$version; do
60                         for dir in `echo "/opt/cryptopack/bin:$PATH" | sed -e 's/:/ /g'`; do
61                                 echo "Checking $dir/$command"
62                                 if [ -x $dir/$command ]; then
63                                         TCLSH=$dir/$command
64                                         break 3
65                                 fi
66                         done
67                 done
68         done
69 fi
70
71 if [ -z "$TCLSH" ]; then
72         echo "tclsh not found in PATH, neither with nor without version, exiting"
73         exit 2
74 else
75         echo "Using $TCLSH as tclsh"
76 fi
77 TCLSH="$TCLSH -encoding utf-8"
78
79 echo "PWD: $PWD"
80 : ${OPENSSL_CONF:=$PWD/openssl-gost.cnf}
81 echo "OPENSSL_CONF: $OPENSSL_CONF"
82 export OPENSSL_CONF
83 echo "ENGINE_DIR: $ENGINE_DIR"
84 : ${OPENSSL_ENGINES:=$ENGINE_DIR}
85 echo "OPENSSL_ENGINES: $OPENSSL_ENGINES"
86 export OPENSSL_ENGINES
87 APP_SUFFIX=`basename $OPENSSL_APP .exe|sed s/openssl//`
88 [ -n "$OPENSSL_APP" ]&& export OPENSSL_APP
89 ENGINE_NAME=`$TCLSH getengine.tcl`
90 export ENGINE_NAME
91 [ -z "$TESTDIR" ] && TESTDIR=`pwd`
92 TESTDIR=${TESTDIR}/`hostname`-$ENGINE_NAME
93 [ -n "$APP_SUFFIX" ] && TESTDIR=${TESTDIR}-${APP_SUFFIX}
94 [ -d ${TESTDIR} ] && rm -rf ${TESTDIR}
95 mkdir -p ${TESTDIR}
96 cp oidfile ${TESTDIR}
97 export TESTDIR
98
99 case "$ENGINE_NAME" in
100         gostkc3)
101                 BASE_TEST="1"
102                 ;;
103         cryptocom)
104                 BASE_TESTS="engine dgst mac pkcs8 enc req-genpkey req-newkey ca smime smime2 smimeenc cms cms2 cmsenc pkcs12 nopath ocsp ts ssl smime_io cms_io smimeenc_io cmsenc_io"
105                 OTHER_DIR=`echo $TESTDIR |sed 's/cryptocom/gost/'`
106                 ;;
107         gost)
108                 BASE_TESTS="engine dgst mac pkcs8 enc req-genpkey req-newkey ca smime smime2 smimeenc cms cms2 cmstc262019 cmsenc pkcs12 nopath ocsp ts ssl smime_io cms_io smimeenc_io cmsenc_io"
109                 OTHER_DIR=`echo $TESTDIR |sed 's/gost/cryptocom/'`
110                 ;;
111         *)
112                 echo "No GOST=providing engine found" 1>&2
113                 exit 1;
114 esac
115 if [ -x copy_param ];  then
116         BASE_TESTS="$BASE_TESTS apache"
117 fi
118 PKCS7_COMPATIBILITY_TESTS="smime_cs cmsenc_cs cmsenc_sc"
119 SERVER_TESTS="cp20 cp21 csp36r4 csp39 csp4 csp4r3 csp5"
120 CLIENT_TESTS="cp20 cp21"
121 WINCLIENT_TESTS="p1-1xa-tls1-v-cp36r4-srv p1-1xa-tls1-v-cp39-srv p1-1xa-tls1-v-cp4-01 p2-1xa-tls1-v-cp4-01 p2-2xa-tls1-v-cp4-12S p2-5xa-tls1-v-cp4-12L p1-1xa-tls1-v-cp4r3-01 p2-1xa-tls1-v-cp4r3-01 p2-2xa-tls1-v-cp4r3-01 p2-5xa-tls1-v-cp4r3-01 p1-1xa-tls1_1-v-cp4r3-01 p2-1xa-tls1_1-v-cp4r3-01 p2-2xa-tls1_1-v-cp4r3-01 p2-5xa-tls1_1-v-cp4r3-01 p1-1xa-tls1_2-v-cp4r3-01 p2-1xa-tls1_2-v-cp4r3-01 p2-2xa-tls1_2-v-cp4r3-01 p2-5xa-tls1_2-v-cp4r3-01 p1-1xa-tls1-v-cp5-01 p2-1xa-tls1-v-cp5-01 p2-2xa-tls1-v-cp5-01 p2-5xa-tls1-v-cp5-01 p1-1xa-tls1_1-v-cp5-01 p2-1xa-tls1_1-v-cp5-01 p2-2xa-tls1_1-v-cp5-01 p2-5xa-tls1_1-v-cp5-01 p1-1xa-tls1_2-v-cp5-01 p2-1xa-tls1_2-v-cp5-01 p2-2xa-tls1_2-v-cp5-01 p2-5xa-tls1_2-v-cp5-01 p8k-5xa-tls1_2-v-cp5-01 p8k-2xa-tls1_2-v-cp5-01 p8m-5xa-tls1_2-v-cp5-01 p8m-2xa-tls1_2-v-cp5-01"
122 OPENSSL_DEBUG_MEMORY=on
123 export OPENSSL_DEBUG_MEMORY
124
125 fail=0
126 if [ "$*" ]; then
127   for t do
128     $TCLSH $t.try || fail=1
129   done
130   exit $fail
131 fi
132 for t in $BASE_TESTS; do
133         if [ "$CI" ]; then
134                 if $TCLSH $t.try > $TESTDIR/$t.out 2>&1; then
135                         head -1 $TESTDIR/$t.out
136                 else
137                         fail=2
138                         cat $TESTDIR/$t.out
139                         echo "=== Output failures of $TESTDIR/$t.log ==="
140                         awk "/ ends failed/" RS= ORS='\n\n' $TESTDIR/$t.log |
141                                 sed 's/^/\t/'
142                         echo "=== End of $TESTDIR/$t.log ==="
143                         exit 1
144                 fi
145         else
146                 $TCLSH $t.try || fail=3
147         fi
148 done
149
150 if false; then # ignore some tests for a time
151 ALG_LIST="rsa:1024 gost2001:XA gost2012_256:XA gost2012_512:A" $TCLSH ssl.try -clientconf $OPENSSL_CONF || fail=4
152 ALG_LIST="rsa:1024 gost2001:XA gost2012_256:XA gost2012_512:A" $TCLSH ssl.try -serverconf $OPENSSL_CONF || fail=5
153
154 for t in $PKCS7_COMPATIBILITY_TESTS; do
155         $TCLSH $t.try || fail=6
156 done
157 for t in $SERVER_TESTS; do
158         $TCLSH server.try $t || fail=7
159 done
160 for t in $CLIENT_TESTS; do
161         $TCLSH client.try $t || fail=8
162 done
163 if [ -n "WINCLIENT_TESTS" ]; then
164         if [ -z "$CVS_RSH" ]; then
165                 CVS_RSH=ssh
166                 export CVS_RSH
167         fi
168         for t in $WINCLIENT_TESTS; do
169                 $TCLSH wcli.try $t || fail=9
170         done
171 fi
172 if [ -d $OTHER_DIR ]; then
173         OTHER_DIR=../${OTHER_DIR} $TCLSH interop.try
174 fi
175 if [ -d OtherVersion ] ; then
176         case "$ENGINE_NAME" in
177                 gostkc3)
178                         ;;
179                 cryptocom)
180                         OTHER_DIR=../OtherVersion ALG_LIST="gost2001:A gost2001:B gost2001:C" ENC_LIST="gost2001:A:1.2.643.2.2.31.3 gost2001:B:1.2.643.2.2.31.4 gost2001:C:1.2.643.2.2.31.2 gost2001:A:" $TCLSH interop.try
181                         ;;
182                 gost)
183                         OTHER_DIR=../OtherVersion ALG_LIST="gost2001:A gost2001:B gost2001:C" ENC_LIST="gost2001:A:1.2.643.2.2.31.3 gost2001:B:1.2.643.2.2.31.4 gost2001:C:1.2.643.2.2.31.2 gost2001:A:" $TCLSH interop.try
184                         ;;
185                 *)
186                         echo "No GOST=providing engine found" 1>&2
187                         exit 1;
188         esac
189 fi
190 fi # false
191 $TCLSH calcstat ${TESTDIR}/stats ${TESTDIR}/test.result
192 grep "leaked" ${TESTDIR}/*.log
193 if [ $fail  -ne 0 ]; then
194         echo "Some tests FAILED, code $fail."
195 fi
196
197 exit $fail