New SSL test framework
authorEmilia Kasper <emilia@openssl.org>
Thu, 17 Mar 2016 14:14:30 +0000 (15:14 +0100)
committerEmilia Kasper <emilia@openssl.org>
Tue, 5 Apr 2016 11:44:46 +0000 (13:44 +0200)
commit453dfd8d5ee0893146e0fb61a5978ab59ba95c01
tree6ada91599f4ebe125be3d34a69716b23a0688b05
parent173f613b6a9029f34454b642ee4f3db6c6566fcb
New SSL test framework

Currently, SSL tests are configured via command-line switches to
ssltest.c. This results in a lot of duplication between ssltest.c and
apps, and a complex setup. ssltest.c is also simply old and needs
maintenance.

Instead, we already have a way to configure SSL servers and clients, so
we leverage that. SSL tests can now be configured from a configuration
file. Test servers and clients are configured using the standard
ssl_conf module. Additional test settings are configured via a test
configuration.

Moreover, since the CONF language involves unnecessary boilerplate, the
test conf itself is generated from a shorter Perl syntax.

The generated testcase files are checked in to the repo to make
it easier to verify that the intended test cases are in fact run; and to
simplify debugging failures.

To demonstrate the approach, min/max protocol tests are converted to the
new format. This change also fixes MinProtocol and MaxProtocol
handling. It was previously requested that an SSL_CTX have both the
server and client flags set for these commands; this clearly can never work.

Guide to this PR:
 - test/ssl_test.c - test framework
 - test/ssl_test_ctx.* - test configuration structure
 - test/handshake_helper.* - new SSL test handshaking code
 - test/ssl-tests/ - test configurations
 - test/generate_ssl_tests.pl - script for generating CONF-style test
   configurations from perl inputs

Reviewed-by: Richard Levitte <levitte@openssl.org>
24 files changed:
Configurations/unix-Makefile.tmpl
ssl/ssl_conf.c
test/Makefile.in
test/README.ssltest.md [new file with mode: 0644]
test/build.info
test/generate_ssl_tests.pl [new file with mode: 0644]
test/handshake_helper.c [new file with mode: 0644]
test/handshake_helper.h [new file with mode: 0644]
test/recipes/80-test_ssl.t
test/recipes/80-test_ssl_new.t [new file with mode: 0644]
test/recipes/80-test_ssl_test_ctx.t [new file with mode: 0644]
test/ssl-tests/01-simple.conf [new file with mode: 0644]
test/ssl-tests/01-simple.conf.in [new file with mode: 0644]
test/ssl-tests/02-protocol-version.conf [new file with mode: 0644]
test/ssl-tests/02-protocol-version.conf.in [new file with mode: 0644]
test/ssl-tests/ssltests_base.pm [new file with mode: 0644]
test/ssl_test.c [new file with mode: 0644]
test/ssl_test.tmpl [new file with mode: 0644]
test/ssl_test_ctx.c [new file with mode: 0644]
test/ssl_test_ctx.h [new file with mode: 0644]
test/ssl_test_ctx_test.c [new file with mode: 0644]
test/ssl_test_ctx_test.conf [new file with mode: 0644]
test/testutil.c
test/testutil.h