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