Commit 08d3dd81b2 for openssl.org
commit 08d3dd81b2e4ca23afbd3dc0520ae3b499107dc5
Author: Andrew Dinh <andrewd@openssl.org>
Date: Tue Jun 30 20:52:51 2026 +0700
Port script_19 to radix test framework
Assisted-by: Claude:claude-sonnet-4-6
Reviewed-by: Saša NedvÄ›dický <sashan@openssl.org>
Reviewed-by: Neil Horman <nhorman@openssl.org>
Reviewed-by: Bob Beck <beck@openssl.org>
MergeDate: Tue Jul 21 09:22:51 2026
(Merged from https://github.com/openssl/openssl/pull/31889)
diff --git a/test/quic_multistream_test.c b/test/quic_multistream_test.c
index 3f3fd82885..a921f13610 100644
--- a/test/quic_multistream_test.c
+++ b/test/quic_multistream_test.c
@@ -2063,30 +2063,7 @@ static const struct script_op script_18[] = {
/* 19. Key update test - artificially triggered */
static const struct script_op script_19[] = {
- OP_C_SET_ALPN("ossltest"),
- OP_C_CONNECT_WAIT(),
-
- OP_C_WRITE(DEFAULT, "apple", 5),
-
- OP_S_BIND_STREAM_ID(a, C_BIDI_ID(0)),
- OP_S_READ_EXPECT(a, "apple", 5),
-
- OP_C_WRITE(DEFAULT, "orange", 6),
- OP_S_READ_EXPECT(a, "orange", 6),
-
- OP_S_WRITE(a, "strawberry", 10),
- OP_C_READ_EXPECT(DEFAULT, "strawberry", 10),
-
- OP_CHECK(check_key_update_lt, 1),
- OP_CHECK(trigger_key_update, 0),
-
- OP_C_WRITE(DEFAULT, "orange", 6),
- OP_S_READ_EXPECT(a, "orange", 6),
- OP_S_WRITE(a, "ok", 2),
-
- OP_C_READ_EXPECT(DEFAULT, "ok", 2),
- OP_CHECK(check_key_update_ge, 1),
-
+ /* test moved to test/radix/quic_tests.c */
OP_END
};
diff --git a/test/radix/quic_ops.c b/test/radix/quic_ops.c
index 7095a2a34e..f022907596 100644
--- a/test/radix/quic_ops.c
+++ b/test/radix/quic_ops.c
@@ -1005,6 +1005,44 @@ err:
return ok;
}
+DEF_FUNC(hf_check_key_update_lt)
+{
+ int ok = 0;
+ SSL *ssl;
+ uint64_t max_txke, txke;
+ QUIC_CHANNEL *ch;
+
+ F_POP(max_txke);
+ REQUIRE_SSL(ssl);
+ ch = ossl_quic_conn_get_channel(ssl);
+ txke = ossl_quic_channel_get_tx_key_epoch(ch);
+
+ /* Caller specifies a maximum number of TXKEs which must not be exceeded. */
+ if (!TEST_uint64_t_lt(txke, max_txke))
+ goto err;
+
+ ok = 1;
+err:
+ return ok;
+}
+
+DEF_FUNC(hf_trigger_key_update)
+{
+ int ok = 0;
+ SSL *ssl;
+ uint64_t update_type;
+
+ F_POP(update_type);
+ REQUIRE_SSL(ssl);
+
+ if (!TEST_true(SSL_key_update(ssl, (int)update_type)))
+ goto err;
+
+ ok = 1;
+err:
+ return ok;
+}
+
#define OP_UNBIND(name) \
(OP_PUSH_PZ(#name), \
OP_FUNC(hf_unbind))
@@ -1241,3 +1279,13 @@ err:
(OP_SELECT_SSL(0, name), \
OP_PUSH_U64(min_rxke), \
OP_FUNC(hf_check_key_update_ge))
+
+#define OP_CHECK_KEY_UPDATE_LT(name, max_txke) \
+ (OP_SELECT_SSL(0, name), \
+ OP_PUSH_U64(max_txke), \
+ OP_FUNC(hf_check_key_update_lt))
+
+#define OP_TRIGGER_KEY_UPDATE(name, update_type) \
+ (OP_SELECT_SSL(0, name), \
+ OP_PUSH_U64(update_type), \
+ OP_FUNC(hf_trigger_key_update))
diff --git a/test/radix/quic_tests.c b/test/radix/quic_tests.c
index 5b223cd00a..154926a16f 100644
--- a/test/radix/quic_tests.c
+++ b/test/radix/quic_tests.c
@@ -1422,8 +1422,31 @@ DEF_SCRIPT(script_18, "Key update test - RTT-bounded")
OP_READ_EXPECT(C, "plugh", 5);
}
-DEF_SCRIPT(script_19, "place holder for multistrem script_19")
+/* 19. Key update test - artificially triggered */
+DEF_SCRIPT(script_19, "Key update test - artificially triggered")
{
+ OP_SIMPLE_PAIR_CONN();
+ OP_ACCEPT_CONN_WAIT(L, S, 0);
+
+ OP_WRITE(C, "apple", 5);
+ OP_READ_EXPECT(S, "apple", 5);
+
+ OP_WRITE(C, "orange", 6);
+ OP_READ_EXPECT(S, "orange", 6);
+
+ OP_WRITE(S, "strawberry", 10);
+ OP_READ_EXPECT(C, "strawberry", 10);
+
+ OP_CHECK_KEY_UPDATE_LT(C, 1);
+
+ OP_TRIGGER_KEY_UPDATE(C, SSL_KEY_UPDATE_REQUESTED);
+
+ OP_WRITE(C, "orange", 6);
+ OP_READ_EXPECT(S, "orange", 6);
+ OP_WRITE(S, "ok", 2);
+
+ OP_READ_EXPECT(C, "ok", 2);
+ OP_CHECK_KEY_UPDATE_GE(C, 1);
}
DEF_SCRIPT(script_20, "place holder for multistrem script_20")