]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
QUIC: Test handling of post-connection session tickets
authorHugo Landau <hlandau@openssl.org>
Thu, 19 Oct 2023 10:58:26 +0000 (11:58 +0100)
committerMatt Caswell <matt@openssl.org>
Fri, 20 Oct 2023 15:32:46 +0000 (16:32 +0100)
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/22439)

test/quic_multistream_test.c

index 958dd30fc1033360957e2edd9ed6d4452c4fc815..36be2dc80c02b57cf808a94ac795c77b0c78a1a7 100644 (file)
@@ -4923,6 +4923,66 @@ static const struct script_op script_77[] = {
     OP_END
 };
 
+/* 78. Post-connection session ticket handling */
+static size_t new_session_count;
+
+static int on_new_session(SSL *s, SSL_SESSION *sess)
+{
+    ++new_session_count;
+    return 0; /* do not ref session, we aren't keeping it */
+}
+
+static int setup_session(struct helper *h, struct helper_local *hl)
+{
+    SSL_CTX_set_session_cache_mode(h->c_ctx, SSL_SESS_CACHE_BOTH);
+    SSL_CTX_sess_set_new_cb(h->c_ctx, on_new_session);
+    return 1;
+}
+
+static int trigger_late_session_ticket(struct helper *h, struct helper_local *hl)
+{
+    new_session_count = 0;
+
+    if (!TEST_true(ossl_quic_tserver_new_ticket(ACQUIRE_S())))
+        return 0;
+
+    return 1;
+}
+
+static int check_got_session_ticket(struct helper *h, struct helper_local *hl)
+{
+    if (!TEST_size_t_gt(new_session_count, 0))
+        return 0;
+
+    return 1;
+}
+
+static const struct script_op script_78[] = {
+    OP_C_SET_ALPN           ("ossltest")
+    OP_CHECK                (setup_session, 0)
+    OP_C_CONNECT_WAIT       ()
+
+    OP_C_SET_DEFAULT_STREAM_MODE(SSL_DEFAULT_STREAM_MODE_NONE)
+
+    OP_C_NEW_STREAM_BIDI    (a, C_BIDI_ID(0))
+    OP_C_WRITE              (a, "apple", 5)
+
+    OP_S_BIND_STREAM_ID     (a, C_BIDI_ID(0))
+    OP_S_READ_EXPECT        (a, "apple", 5)
+
+    OP_S_WRITE              (a, "orange", 6)
+    OP_C_READ_EXPECT        (a, "orange", 6)
+
+    OP_CHECK                (trigger_late_session_ticket, 0)
+
+    OP_S_WRITE              (a, "Strawberry", 10)
+    OP_C_READ_EXPECT        (a, "Strawberry", 10)
+
+    OP_CHECK                (check_got_session_ticket, 0)
+
+    OP_END
+};
+
 static const struct script_op *const scripts[] = {
     script_1,
     script_2,
@@ -5000,7 +5060,8 @@ static const struct script_op *const scripts[] = {
     script_74,
     script_75,
     script_76,
-    script_77
+    script_77,
+    script_78
 };
 
 static int test_script(int idx)