Skip to content

Commit aa19d82

Browse files
committed
Add test forcing caTable cleanup during active connections
1 parent 4caef93 commit aa19d82

1 file changed

Lines changed: 47 additions & 29 deletions

File tree

tests/api.c

Lines changed: 47 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -70017,9 +70017,9 @@ static word32 test_tls_cert_store_unchanged_HashCaTable(Signer** caTable)
7001770017
}
7001870018

7001970019
static word32 test_tls_cert_store_unchanged_before_hashes[2];
70020-
static size_t test_tls_cert_store_unchanged_before_hashes_idx = 0;
70020+
static size_t test_tls_cert_store_unchanged_before_hashes_idx;
7002170021
static word32 test_tls_cert_store_unchanged_after_hashes[2];
70022-
static size_t test_tls_cert_store_unchanged_after_hashes_idx = 0;
70022+
static size_t test_tls_cert_store_unchanged_after_hashes_idx;
7002370023

7002470024
static int test_tls_cert_store_unchanged_ctx_ready(WOLFSSL_CTX* ctx)
7002570025
{
@@ -70046,19 +70046,25 @@ static int test_tls_cert_store_unchanged_ctx_cleanup(WOLFSSL_CTX* ctx)
7004670046
return EXPECT_RESULT();
7004770047
}
7004870048

70049-
/*
7005070049
static int test_tls_cert_store_unchanged_on_hs(WOLFSSL_CTX **ctx, WOLFSSL **ssl)
7005170050
{
7005270051
EXPECT_DECLS;
70052+
WOLFSSL_CERT_MANAGER* cm;
7005370053

7005470054
(void)ssl;
70055+
/* WARNING: this approach bypasses the reference counter check in
70056+
* wolfSSL_CTX_UnloadIntermediateCerts. It is not recommended as it may
70057+
* cause unexpected behaviour when other active connections try accessing
70058+
* the caTable. */
70059+
ExpectNotNull(cm = wolfSSL_CTX_GetCertManager(*ctx));
70060+
ExpectIntEQ(wolfSSL_CertManagerUnloadIntermediateCerts(cm),
70061+
WOLFSSL_SUCCESS);
7005570062
ExpectIntNE(test_tls_cert_store_unchanged_after_hashes
7005670063
[test_tls_cert_store_unchanged_after_hashes_idx++] =
7005770064
test_tls_cert_store_unchanged_HashCaTable((*ctx)->cm->caTable), 0);
7005870065

7005970066
return EXPECT_RESULT();
7006070067
}
70061-
*/
7006270068

7006370069
static int test_tls_cert_store_unchanged_ssl_ready(WOLFSSL* ssl)
7006470070
{
@@ -70077,41 +70083,53 @@ static int test_tls_cert_store_unchanged(void)
7007770083
#if !defined(NO_CERTS) && defined(HAVE_SSL_MEMIO_TESTS_DEPENDENCIES)
7007870084
test_ssl_cbf client_cbf;
7007970085
test_ssl_cbf server_cbf;
70086+
int i;
7008070087

70081-
XMEMSET(&client_cbf, 0, sizeof(client_cbf));
70082-
XMEMSET(&server_cbf, 0, sizeof(server_cbf));
70088+
for (i = 0; i < 2; i++) {
70089+
XMEMSET(&client_cbf, 0, sizeof(client_cbf));
70090+
XMEMSET(&server_cbf, 0, sizeof(server_cbf));
7008370091

70084-
XMEMSET(test_tls_cert_store_unchanged_before_hashes, 0,
70085-
sizeof(test_tls_cert_store_unchanged_before_hashes));
70086-
XMEMSET(test_tls_cert_store_unchanged_after_hashes, 0,
70087-
sizeof(test_tls_cert_store_unchanged_after_hashes));
70092+
test_tls_cert_store_unchanged_before_hashes_idx = 0;
70093+
XMEMSET(test_tls_cert_store_unchanged_before_hashes, 0,
70094+
sizeof(test_tls_cert_store_unchanged_before_hashes));
70095+
test_tls_cert_store_unchanged_after_hashes_idx = 0;
70096+
XMEMSET(test_tls_cert_store_unchanged_after_hashes, 0,
70097+
sizeof(test_tls_cert_store_unchanged_after_hashes));
7008870098

70089-
client_cbf.ctx_ready = test_tls_cert_store_unchanged_ctx_ready;
70090-
server_cbf.ctx_ready = test_tls_cert_store_unchanged_ctx_ready;
70099+
client_cbf.ctx_ready = test_tls_cert_store_unchanged_ctx_ready;
70100+
server_cbf.ctx_ready = test_tls_cert_store_unchanged_ctx_ready;
7009170101

70092-
client_cbf.ssl_ready = test_tls_cert_store_unchanged_ssl_ready;
70093-
server_cbf.ssl_ready = test_tls_cert_store_unchanged_ssl_ready;
70102+
client_cbf.ssl_ready = test_tls_cert_store_unchanged_ssl_ready;
70103+
server_cbf.ssl_ready = test_tls_cert_store_unchanged_ssl_ready;
7009470104

70095-
/* TODO add API to allow clearing/not storing certs while connections are
70096-
* still active.
70097-
client_cbf.on_handshake = test_tls_cert_store_unchanged_on_hs;
70098-
server_cbf.on_handshake = test_tls_cert_store_unchanged_on_hs;
70099-
*/
70105+
switch (i) {
70106+
case 0:
70107+
client_cbf.on_ctx_cleanup =
70108+
test_tls_cert_store_unchanged_ctx_cleanup;
70109+
server_cbf.on_ctx_cleanup =
70110+
test_tls_cert_store_unchanged_ctx_cleanup;
70111+
break;
70112+
case 1:
70113+
client_cbf.on_handshake = test_tls_cert_store_unchanged_on_hs;
70114+
server_cbf.on_handshake = test_tls_cert_store_unchanged_on_hs;
70115+
break;
70116+
default:
70117+
Fail(("Should not enter here"), ("Entered here"));
70118+
}
7010070119

70101-
client_cbf.on_ctx_cleanup = test_tls_cert_store_unchanged_ctx_cleanup;
70102-
server_cbf.on_ctx_cleanup = test_tls_cert_store_unchanged_ctx_cleanup;
7010370120

70104-
client_cbf.certPemFile = "certs/intermediate/client-chain.pem";
70105-
server_cbf.certPemFile = "certs/intermediate/server-chain.pem";
70121+
client_cbf.certPemFile = "certs/intermediate/client-chain.pem";
70122+
server_cbf.certPemFile = "certs/intermediate/server-chain.pem";
7010670123

70107-
server_cbf.caPemFile = caCertFile;
70124+
server_cbf.caPemFile = caCertFile;
7010870125

70109-
ExpectIntEQ(test_wolfSSL_client_server_nofail_memio(&client_cbf,
70110-
&server_cbf, NULL), TEST_SUCCESS);
70126+
ExpectIntEQ(test_wolfSSL_client_server_nofail_memio(&client_cbf,
70127+
&server_cbf, NULL), TEST_SUCCESS);
7011170128

70112-
ExpectBufEQ(test_tls_cert_store_unchanged_before_hashes,
70113-
test_tls_cert_store_unchanged_after_hashes,
70114-
sizeof(test_tls_cert_store_unchanged_after_hashes));
70129+
ExpectBufEQ(test_tls_cert_store_unchanged_before_hashes,
70130+
test_tls_cert_store_unchanged_after_hashes,
70131+
sizeof(test_tls_cert_store_unchanged_after_hashes));
70132+
}
7011570133
#endif
7011670134
return EXPECT_RESULT();
7011770135
}

0 commit comments

Comments
 (0)