#include "ssltestlib.h"
#include "testutil.h"
+#include "test_main_custom.h"
static char *cert = NULL;
static char *privkey = NULL;
#define NUM_EXTRA_CERTS 40
static int execute_test_large_message(const SSL_METHOD *smeth,
- const SSL_METHOD *cmeth)
+ const SSL_METHOD *cmeth, int read_ahead)
{
SSL_CTX *cctx = NULL, *sctx = NULL;
SSL *clientssl = NULL, *serverssl = NULL;
goto end;
}
chaincert = PEM_read_bio_X509(certbio, NULL, NULL, NULL);
+ BIO_free(certbio);
+ certbio = NULL;
+ if (chaincert == NULL) {
+ printf("Unable to load certificate for chain\n");
+ goto end;
+ }
if (!create_ssl_ctx_pair(smeth, cmeth, &sctx,
&cctx, cert, privkey)) {
printf("Unable to create SSL_CTX pair\n");
goto end;
}
- BIO_free(certbio);
- certbio = NULL;
+
+ if(read_ahead) {
+ /*
+ * Test that read_ahead works correctly when dealing with large
+ * records
+ */
+ SSL_CTX_set_read_ahead(cctx, 1);
+ }
/*
* We assume the supplied certificate is big enough so that if we add
static int test_large_message_tls(void)
{
- return execute_test_large_message(TLS_server_method(), TLS_client_method());
+ return execute_test_large_message(TLS_server_method(), TLS_client_method(),
+ 0);
+}
+
+static int test_large_message_tls_read_ahead(void)
+{
+ return execute_test_large_message(TLS_server_method(), TLS_client_method(),
+ 1);
}
+#ifndef OPENSSL_NO_DTLS
static int test_large_message_dtls(void)
{
+ /*
+ * read_ahead is not relevant to DTLS because DTLS always acts as if
+ * read_ahead is set.
+ */
return execute_test_large_message(DTLS_server_method(),
- DTLS_client_method());
+ DTLS_client_method(), 0);
}
+#endif
static int ocsp_server_cb(SSL *s, void *arg)
{
SSL_CTX_set_min_proto_version(cctx, TLS1_2_VERSION);
#endif
+ /*
+ * TODO(TLS1.3): Test temporarily disabled for TLS1.3 until we've
+ * implemented session resumption.
+ */
+ SSL_CTX_set_max_proto_version(cctx, TLS1_2_VERSION);
+
/* Set up session cache */
if (fix.use_ext_cache) {
SSL_CTX_sess_set_new_cb(cctx, new_session_cb);
EXECUTE_TEST(execute_test_ssl_bio, ssl_bio_tear_down);
}
-int main(int argc, char *argv[])
+int test_main(int argc, char *argv[])
{
- BIO *err = NULL;
int testresult = 1;
if (argc != 3) {
cert = argv[1];
privkey = argv[2];
- err = BIO_new_fp(stderr, BIO_NOCLOSE | BIO_FP_TEXT);
-
- CRYPTO_set_mem_debug(1);
- CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
-
ADD_TEST(test_large_message_tls);
+ ADD_TEST(test_large_message_tls_read_ahead);
+#ifndef OPENSSL_NO_DTLS
ADD_TEST(test_large_message_dtls);
+#endif
ADD_TEST(test_tlsext_status_type);
ADD_TEST(test_session_with_only_int_cache);
ADD_TEST(test_session_with_only_ext_cache);
testresult = run_tests(argv[0]);
-#ifndef OPENSSL_NO_CRYPTO_MDEBUG
- if (CRYPTO_mem_leaks(err) <= 0)
- testresult = 1;
-#endif
- BIO_free(err);
-
- if (!testresult)
- printf("PASS\n");
+ bio_s_mempacket_test_free();
return testresult;
}