如何从 OpenSSL 测试套件运行特定测试?

如何从 OpenSSL 测试套件运行特定测试?

我想测量 OpenSSL 测试套件中不同测试的代码覆盖率。

我用这种方法成功测量了测试的总覆盖率:

$ make clean
$ export CC="gcc -fprofile-arcs -ftest-coverage"; ./config enable-unit-test
$ make
$ make tests
... then run gcov to create the .gcov files

(此后我可以对 OpenSSL 子文件夹中的 C 文件运行 gcov)

这是命令的结果make tests

https://github.com/istvanbohm/OpenSSLUnitTests/blob/master/TestResult

但我不能只执行一项特定测试(它们都不起作用):

$ make clean
$ export CC="gcc -fprofile-arcs -ftest-coverage"; ./config enable-unit-test
$ make
$ make TESTS="bntest" test 

我从最后一个命令得到这个结果:

blackcat@ubuntu:~/my_project/projects/openssl-1.0.0$ make TESTS="bntest" test
testing...
make[1]: Entering directory `/home/blackcat/my_project/projects/openssl-1.0.0/test'
make[2]: Entering directory `/home/blackcat/my_project/projects/openssl-1.0.0'
making all in apps...
make[3]: Entering directory `/home/blackcat/my_project/projects/openssl-1.0.0/apps'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/home/blackcat/my_project/projects/openssl-1.0.0/apps'
make[2]: Leaving directory `/home/blackcat/my_project/projects/openssl-1.0.0'
make[1]: Leaving directory `/home/blackcat/my_project/projects/openssl-1.0.0/test'
OPENSSL_CONF=apps/openssl.cnf util/opensslwrap.sh version -a
OpenSSL 1.0.0 29 Mar 2010
built on: Wed Jul 29 12:40:53 CEST 2015
platform: linux-x86_64
options:  bn(64,64) rc4(1x,char) des(idx,cisc,16,int) idea(int) blowfish(idx) 
compiler: gcc -fprofile-arcs -ftest-coverage -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DWHIRLPOOL_ASM
OPENSSLDIR: "/usr/local/ssl"
blackcat@ubuntu:~/my_project/projects/openssl-1.0.0$

我也尝试了其他测试,但结果是一样的。为什么?

我想这样做是因为我想将测试放入 for 循环中,并使用不同的测试一次又一次地调用它(这部分已准备好)。

答案1

我误解了 /test/Makefile 文件。一开始有一个列表,但它们不是我需要的参数名称。

BNTEST=     bntest
ECTEST=     ectest
ECDSATEST=  ecdsatest
ECDHTEST=   ecdhtest
EXPTEST=    exptest
IDEATEST=   ideatest
SHA1TEST=   sha1test
SHA256TEST= sha256t
SHA512TEST= sha512t
MDC2TEST=   mdc2test
RMDTEST=    rmdtest
MD2TEST=    md2test
MD4TEST=    md4test
MD5TEST=    md5test
HMACTEST=   hmactest
WPTEST=     wp_test
RC2TEST=    rc2test
RC4TEST=    rc4test
RC5TEST=    rc5test
BFTEST=     bftest
CASTTEST=   casttest
DESTEST=    destest
GOST2814789TEST=gost2814789test
RANDTEST=   randtest
DHTEST=     dhtest
DSATEST=    dsatest
SSLTEST=    ssltest
RSATEST=    rsa_test
ENGINETEST= enginetest
EVPTEST=    evp_test
EVPEXTRATEST=evp_extra_test
P5_CRPT2_TEST=  p5_crpt2_test
IGETEST=    igetest
JPAKETEST=  jpaketest
SECMEMTEST= secmemtest
SRPTEST=    srptest
V3NAMETEST= v3nametest
HEARTBEATTEST=  heartbeat_test
CONSTTIMETEST=  constant_time_test
VERIFYEXTRATEST=    verify_extra_test
CLIENTHELLOTEST=    clienthellotest

我应该更仔细地检查文件。特别是 alltests 标签。

alltests: \
    test_des test_idea test_sha test_md4 test_md5 test_hmac \
    test_md2 test_mdc2 test_wp \
    test_rmd test_rc2 test_rc4 test_rc5 test_bf test_cast test_aes \
    test_rand test_bn test_ec test_ecdsa test_ecdh \
    test_enc test_x509 test_rsa test_crl test_sid \
    test_gen test_req test_pkcs7 test_verify test_dh test_dsa \
    test_ss test_ca test_engine test_evp test_ssl test_tsa test_ige \
    test_jpake test_cms

我可以在这里找到测试的名称。所以正确的用法是这样的:

$ make clean
$ export CC="gcc -fprofile-arcs -ftest-coverage"; ./config enable-unit-test
$ make
$ make TESTS="test_cms" test 

答案2

使用 command 执行所有测试时make test,检查它STDOUT是否打印测试套件名称,如下所示。

../test/recipes/90-test_srp.t ...................... ok   
../test/recipes/90-test_sslapi.t ................... ok   
../test/recipes/90-test_sslbuffers.t ............... ok  

这里的测试套件名称是等test_srptest_sslapi要仅运行特定的测试套件,请使用如下命令。

make TESTS="test_srp" test

相关内容