xref: /freebsd/crypto/openssl/test/quic_srtm_test.c (revision e7be843b4a162e68651d3911f0357ed464915629)
1*e7be843bSPierre Pronchery /*
2*e7be843bSPierre Pronchery  * Copyright 2023 The OpenSSL Project Authors. All Rights Reserved.
3*e7be843bSPierre Pronchery  *
4*e7be843bSPierre Pronchery  * Licensed under the Apache License 2.0 (the "License").  You may not use
5*e7be843bSPierre Pronchery  * this file except in compliance with the License.  You can obtain a copy
6*e7be843bSPierre Pronchery  * in the file LICENSE in the source distribution or at
7*e7be843bSPierre Pronchery  * https://www.openssl.org/source/license.html
8*e7be843bSPierre Pronchery  */
9*e7be843bSPierre Pronchery 
10*e7be843bSPierre Pronchery #include "internal/quic_srtm.h"
11*e7be843bSPierre Pronchery #include "testutil.h"
12*e7be843bSPierre Pronchery 
13*e7be843bSPierre Pronchery static char ptrs[8];
14*e7be843bSPierre Pronchery 
15*e7be843bSPierre Pronchery static const QUIC_STATELESS_RESET_TOKEN token_1 = {{
16*e7be843bSPierre Pronchery     0x01, 0x02, 0x03, 0x04
17*e7be843bSPierre Pronchery }};
18*e7be843bSPierre Pronchery 
19*e7be843bSPierre Pronchery static const QUIC_STATELESS_RESET_TOKEN token_2 = {{
20*e7be843bSPierre Pronchery     0x01, 0x02, 0x03, 0x05
21*e7be843bSPierre Pronchery }};
22*e7be843bSPierre Pronchery 
test_srtm(void)23*e7be843bSPierre Pronchery static int test_srtm(void)
24*e7be843bSPierre Pronchery {
25*e7be843bSPierre Pronchery     int testresult = 0;
26*e7be843bSPierre Pronchery     QUIC_SRTM *srtm;
27*e7be843bSPierre Pronchery     void *opaque = NULL;
28*e7be843bSPierre Pronchery     uint64_t seq_num = 0;
29*e7be843bSPierre Pronchery 
30*e7be843bSPierre Pronchery     if (!TEST_ptr(srtm = ossl_quic_srtm_new(NULL, NULL)))
31*e7be843bSPierre Pronchery         goto err;
32*e7be843bSPierre Pronchery 
33*e7be843bSPierre Pronchery     if (!TEST_true(ossl_quic_srtm_add(srtm, ptrs + 0, 0, &token_1))
34*e7be843bSPierre Pronchery         || !TEST_false(ossl_quic_srtm_add(srtm, ptrs + 0, 0, &token_1))
35*e7be843bSPierre Pronchery         || !TEST_false(ossl_quic_srtm_remove(srtm, ptrs + 0, 1))
36*e7be843bSPierre Pronchery         || !TEST_false(ossl_quic_srtm_remove(srtm, ptrs + 3, 0))
37*e7be843bSPierre Pronchery         || !TEST_true(ossl_quic_srtm_cull(srtm, ptrs + 3))
38*e7be843bSPierre Pronchery         || !TEST_true(ossl_quic_srtm_cull(srtm, ptrs + 3))
39*e7be843bSPierre Pronchery         || !TEST_true(ossl_quic_srtm_add(srtm, ptrs + 0, 1, &token_1))
40*e7be843bSPierre Pronchery         || !TEST_true(ossl_quic_srtm_add(srtm, ptrs + 0, 2, &token_1))
41*e7be843bSPierre Pronchery         || !TEST_true(ossl_quic_srtm_add(srtm, ptrs + 0, 3, &token_1))
42*e7be843bSPierre Pronchery         || !TEST_true(ossl_quic_srtm_add(srtm, ptrs + 1, 0, &token_1))
43*e7be843bSPierre Pronchery         || !TEST_true(ossl_quic_srtm_add(srtm, ptrs + 2, 0, &token_2))
44*e7be843bSPierre Pronchery         || !TEST_true(ossl_quic_srtm_add(srtm, ptrs + 3, 3, &token_2))
45*e7be843bSPierre Pronchery         || !TEST_true(ossl_quic_srtm_remove(srtm, ptrs + 3, 3))
46*e7be843bSPierre Pronchery         || !TEST_true(ossl_quic_srtm_lookup(srtm, &token_1, 0, &opaque, &seq_num))
47*e7be843bSPierre Pronchery         || !TEST_ptr_eq(opaque, ptrs + 1)
48*e7be843bSPierre Pronchery         || !TEST_uint64_t_eq(seq_num, 0)
49*e7be843bSPierre Pronchery         || !TEST_true(ossl_quic_srtm_lookup(srtm, &token_1, 1, &opaque, &seq_num))
50*e7be843bSPierre Pronchery         || !TEST_ptr_eq(opaque, ptrs + 0)
51*e7be843bSPierre Pronchery         || !TEST_uint64_t_eq(seq_num, 3)
52*e7be843bSPierre Pronchery         || !TEST_true(ossl_quic_srtm_lookup(srtm, &token_1, 2, &opaque, &seq_num))
53*e7be843bSPierre Pronchery         || !TEST_ptr_eq(opaque, ptrs + 0)
54*e7be843bSPierre Pronchery         || !TEST_uint64_t_eq(seq_num, 2)
55*e7be843bSPierre Pronchery         || !TEST_true(ossl_quic_srtm_lookup(srtm, &token_1, 3, &opaque, &seq_num))
56*e7be843bSPierre Pronchery         || !TEST_ptr_eq(opaque, ptrs + 0)
57*e7be843bSPierre Pronchery         || !TEST_uint64_t_eq(seq_num, 1)
58*e7be843bSPierre Pronchery         || !TEST_true(ossl_quic_srtm_lookup(srtm, &token_1, 4, &opaque, &seq_num))
59*e7be843bSPierre Pronchery         || !TEST_ptr_eq(opaque, ptrs + 0)
60*e7be843bSPierre Pronchery         || !TEST_uint64_t_eq(seq_num, 0)
61*e7be843bSPierre Pronchery         || !TEST_false(ossl_quic_srtm_lookup(srtm, &token_1, 5, &opaque, &seq_num))
62*e7be843bSPierre Pronchery         || !TEST_true(ossl_quic_srtm_cull(srtm, ptrs + 0))
63*e7be843bSPierre Pronchery         || !TEST_true(ossl_quic_srtm_lookup(srtm, &token_1, 0, &opaque, &seq_num))
64*e7be843bSPierre Pronchery         || !TEST_ptr_eq(opaque, ptrs + 1)
65*e7be843bSPierre Pronchery         || !TEST_uint64_t_eq(seq_num, 0)
66*e7be843bSPierre Pronchery         || !TEST_true(ossl_quic_srtm_lookup(srtm, &token_2, 0, &opaque, &seq_num))
67*e7be843bSPierre Pronchery         || !TEST_ptr_eq(opaque, ptrs + 2)
68*e7be843bSPierre Pronchery         || !TEST_uint64_t_eq(seq_num, 0)
69*e7be843bSPierre Pronchery         || !TEST_true(ossl_quic_srtm_remove(srtm, ptrs + 2, 0))
70*e7be843bSPierre Pronchery         || !TEST_false(ossl_quic_srtm_lookup(srtm, &token_2, 0, &opaque, &seq_num))
71*e7be843bSPierre Pronchery        )
72*e7be843bSPierre Pronchery         goto err;
73*e7be843bSPierre Pronchery 
74*e7be843bSPierre Pronchery     testresult = 1;
75*e7be843bSPierre Pronchery err:
76*e7be843bSPierre Pronchery     ossl_quic_srtm_free(srtm);
77*e7be843bSPierre Pronchery     return testresult;
78*e7be843bSPierre Pronchery }
79*e7be843bSPierre Pronchery 
setup_tests(void)80*e7be843bSPierre Pronchery int setup_tests(void)
81*e7be843bSPierre Pronchery {
82*e7be843bSPierre Pronchery     ADD_TEST(test_srtm);
83*e7be843bSPierre Pronchery     return 1;
84*e7be843bSPierre Pronchery }
85