/*
- * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2016-2017 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
#include <openssl/e_os2.h>
#include <openssl/crypto.h>
-#include "e_os.h"
+#include "internal/nelem.h"
+#include "../e_os.h"
#include "ssl_test_ctx.h"
#include "testutil.h"
*result = 0;
return 1;
}
+ TEST_error("parse_boolean given: '%s'", value);
return 0;
}
{ \
OPENSSL_free(ctx->field); \
ctx->field = OPENSSL_strdup(value); \
- TEST_check(ctx->field != NULL); \
- return 1; \
+ return TEST_ptr(ctx->field); \
}
#define IMPLEMENT_SSL_TEST_INT_OPTION(struct_type, name, field) \
IMPLEMENT_SSL_TEST_BOOL_OPTION(SSL_TEST_CTX, test, resumption_expected)
IMPLEMENT_SSL_TEST_BOOL_OPTION(SSL_TEST_SERVER_CONF, server, broken_session_ticket)
+IMPLEMENT_SSL_TEST_BOOL_OPTION(SSL_TEST_CTX, test, use_sctp)
/* CertStatus */
*pnames = SSL_load_client_CA_file(value);
return *pnames != NULL;
}
+__owur static int parse_expected_server_ca_names(SSL_TEST_CTX *test_ctx,
+ const char *value)
+{
+ return parse_expected_ca_names(&test_ctx->expected_server_ca_names, value);
+}
__owur static int parse_expected_client_ca_names(SSL_TEST_CTX *test_ctx,
const char *value)
{
{ "ExpectedServerCertType", &parse_expected_server_cert_type },
{ "ExpectedServerSignHash", &parse_expected_server_sign_hash },
{ "ExpectedServerSignType", &parse_expected_server_sign_type },
+ { "ExpectedServerCANames", &parse_expected_server_ca_names },
{ "ExpectedClientCertType", &parse_expected_client_cert_type },
{ "ExpectedClientSignHash", &parse_expected_client_sign_hash },
{ "ExpectedClientSignType", &parse_expected_client_sign_type },
{ "ExpectedClientCANames", &parse_expected_client_ca_names },
+ { "UseSCTP", &parse_test_use_sctp },
};
/* Nested client options. */
{ "SRPPassword", &parse_server_srp_password },
};
-/*
- * Since these methods are used to create tests, we use TEST_check liberally
- * for malloc failures and other internal errors.
- */
SSL_TEST_CTX *SSL_TEST_CTX_new()
{
SSL_TEST_CTX *ret;
- ret = OPENSSL_zalloc(sizeof(*ret));
- TEST_check(ret != NULL);
- ret->app_data_size = default_app_data_size;
- ret->max_fragment_size = default_max_fragment_size;
+
+ /* The return code is checked by caller */
+ if ((ret = OPENSSL_zalloc(sizeof(*ret))) != NULL) {
+ ret->app_data_size = default_app_data_size;
+ ret->max_fragment_size = default_max_fragment_size;
+ }
return ret;
}
ssl_test_ctx_free_extra_data(ctx);
OPENSSL_free(ctx->expected_npn_protocol);
OPENSSL_free(ctx->expected_alpn_protocol);
+ sk_X509_NAME_pop_free(ctx->expected_server_ca_names, X509_NAME_free);
sk_X509_NAME_pop_free(ctx->expected_client_ca_names, X509_NAME_free);
OPENSSL_free(ctx);
}
int i;
size_t j;
- sk_conf = NCONF_get_section(conf, client_section);
- TEST_check(sk_conf != NULL);
+ if (!TEST_ptr(sk_conf = NCONF_get_section(conf, client_section)))
+ return 0;
for (i = 0; i < sk_CONF_VALUE_num(sk_conf); i++) {
int found = 0;
for (j = 0; j < OSSL_NELEM(ssl_test_client_options); j++) {
if (strcmp(option->name, ssl_test_client_options[j].name) == 0) {
if (!ssl_test_client_options[j].parse(client, option->value)) {
- fprintf(stderr, "Bad value %s for option %s\n",
- option->value, option->name);
+ TEST_info("Bad value %s for option %s",
+ option->value, option->name);
return 0;
}
found = 1;
}
}
if (!found) {
- fprintf(stderr, "Unknown test option: %s\n", option->name);
+ TEST_info("Unknown test option: %s", option->name);
return 0;
}
}
int i;
size_t j;
- sk_conf = NCONF_get_section(conf, server_section);
- TEST_check(sk_conf != NULL);
+ if (!TEST_ptr(sk_conf = NCONF_get_section(conf, server_section)))
+ return 0;
for (i = 0; i < sk_CONF_VALUE_num(sk_conf); i++) {
int found = 0;
for (j = 0; j < OSSL_NELEM(ssl_test_server_options); j++) {
if (strcmp(option->name, ssl_test_server_options[j].name) == 0) {
if (!ssl_test_server_options[j].parse(server, option->value)) {
- fprintf(stderr, "Bad value %s for option %s\n",
- option->value, option->name);
+ TEST_info("Bad value %s for option %s",
+ option->value, option->name);
return 0;
}
found = 1;
}
}
if (!found) {
- fprintf(stderr, "Unknown test option: %s\n", option->name);
+ TEST_info("Unknown test option: %s", option->name);
return 0;
}
}
SSL_TEST_CTX *SSL_TEST_CTX_create(const CONF *conf, const char *test_section)
{
- STACK_OF(CONF_VALUE) *sk_conf;
- SSL_TEST_CTX *ctx;
+ STACK_OF(CONF_VALUE) *sk_conf = NULL;
+ SSL_TEST_CTX *ctx = NULL;
int i;
size_t j;
- sk_conf = NCONF_get_section(conf, test_section);
- TEST_check(sk_conf != NULL);
-
- ctx = SSL_TEST_CTX_new();
- TEST_check(ctx != NULL);
+ if (!TEST_ptr(sk_conf = NCONF_get_section(conf, test_section))
+ || !TEST_ptr(ctx = SSL_TEST_CTX_new()))
+ goto err;
for (i = 0; i < sk_CONF_VALUE_num(sk_conf); i++) {
int found = 0;
/* Subsections */
if (strcmp(option->name, "client") == 0) {
- if (!parse_client_options(&ctx->extra.client, conf,
- option->value))
+ if (!parse_client_options(&ctx->extra.client, conf, option->value))
goto err;
} else if (strcmp(option->name, "server") == 0) {
- if (!parse_server_options(&ctx->extra.server, conf,
- option->value))
+ if (!parse_server_options(&ctx->extra.server, conf, option->value))
goto err;
} else if (strcmp(option->name, "server2") == 0) {
- if (!parse_server_options(&ctx->extra.server2, conf,
- option->value))
+ if (!parse_server_options(&ctx->extra.server2, conf, option->value))
goto err;
} else if (strcmp(option->name, "resume-client") == 0) {
if (!parse_client_options(&ctx->resume_extra.client, conf,
if (!parse_server_options(&ctx->resume_extra.server2, conf,
option->value))
goto err;
-
} else {
for (j = 0; j < OSSL_NELEM(ssl_test_ctx_options); j++) {
if (strcmp(option->name, ssl_test_ctx_options[j].name) == 0) {
if (!ssl_test_ctx_options[j].parse(ctx, option->value)) {
- fprintf(stderr, "Bad value %s for option %s\n",
- option->value, option->name);
+ TEST_info("Bad value %s for option %s",
+ option->value, option->name);
goto err;
}
found = 1;
}
}
if (!found) {
- fprintf(stderr, "Unknown test option: %s\n", option->name);
+ TEST_info("Unknown test option: %s", option->name);
goto err;
}
}