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_srp다음과 같습니다. test_sslapi특정 테스트 스위트만 실행하려면 다음 명령을 사용하십시오.

make TESTS="test_srp" test

관련 정보