1*e7be843bSPierre Pronchery /* 2*e7be843bSPierre Pronchery * Copyright 2022 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/packet.h" 11*e7be843bSPierre Pronchery #include "internal/quic_txpim.h" 12*e7be843bSPierre Pronchery #include "testutil.h" 13*e7be843bSPierre Pronchery test_txpim(void)14*e7be843bSPierre Proncherystatic int test_txpim(void) 15*e7be843bSPierre Pronchery { 16*e7be843bSPierre Pronchery int testresult = 0; 17*e7be843bSPierre Pronchery QUIC_TXPIM *txpim; 18*e7be843bSPierre Pronchery size_t i, j; 19*e7be843bSPierre Pronchery QUIC_TXPIM_PKT *pkts[10] = {NULL}; 20*e7be843bSPierre Pronchery QUIC_TXPIM_CHUNK chunks[3]; 21*e7be843bSPierre Pronchery const QUIC_TXPIM_CHUNK *rchunks; 22*e7be843bSPierre Pronchery 23*e7be843bSPierre Pronchery if (!TEST_ptr(txpim = ossl_quic_txpim_new())) 24*e7be843bSPierre Pronchery goto err; 25*e7be843bSPierre Pronchery 26*e7be843bSPierre Pronchery for (i = 0; i < OSSL_NELEM(pkts); ++i) { 27*e7be843bSPierre Pronchery if (!TEST_ptr(pkts[i] = ossl_quic_txpim_pkt_alloc(txpim))) 28*e7be843bSPierre Pronchery goto err; 29*e7be843bSPierre Pronchery 30*e7be843bSPierre Pronchery if (!TEST_size_t_eq(ossl_quic_txpim_pkt_get_num_chunks(pkts[i]), 0)) 31*e7be843bSPierre Pronchery goto err; 32*e7be843bSPierre Pronchery 33*e7be843bSPierre Pronchery for (j = 0; j < OSSL_NELEM(chunks); ++j) { 34*e7be843bSPierre Pronchery chunks[j].stream_id = 100 - j; 35*e7be843bSPierre Pronchery chunks[j].start = 1000 * i + j * 10; 36*e7be843bSPierre Pronchery chunks[j].end = chunks[j].start + 5; 37*e7be843bSPierre Pronchery 38*e7be843bSPierre Pronchery if (!TEST_true(ossl_quic_txpim_pkt_append_chunk(pkts[i], chunks + j))) 39*e7be843bSPierre Pronchery goto err; 40*e7be843bSPierre Pronchery } 41*e7be843bSPierre Pronchery 42*e7be843bSPierre Pronchery if (!TEST_size_t_eq(ossl_quic_txpim_pkt_get_num_chunks(pkts[i]), 43*e7be843bSPierre Pronchery OSSL_NELEM(chunks))) 44*e7be843bSPierre Pronchery goto err; 45*e7be843bSPierre Pronchery 46*e7be843bSPierre Pronchery rchunks = ossl_quic_txpim_pkt_get_chunks(pkts[i]); 47*e7be843bSPierre Pronchery if (!TEST_uint64_t_eq(rchunks[0].stream_id, 98) 48*e7be843bSPierre Pronchery || !TEST_uint64_t_eq(rchunks[1].stream_id, 99) 49*e7be843bSPierre Pronchery || !TEST_uint64_t_eq(rchunks[2].stream_id, 100)) 50*e7be843bSPierre Pronchery goto err; 51*e7be843bSPierre Pronchery } 52*e7be843bSPierre Pronchery 53*e7be843bSPierre Pronchery testresult = 1; 54*e7be843bSPierre Pronchery err: 55*e7be843bSPierre Pronchery for (i = 0; i < OSSL_NELEM(pkts); ++i) 56*e7be843bSPierre Pronchery if (txpim != NULL && pkts[i] != NULL) 57*e7be843bSPierre Pronchery ossl_quic_txpim_pkt_release(txpim, pkts[i]); 58*e7be843bSPierre Pronchery 59*e7be843bSPierre Pronchery ossl_quic_txpim_free(txpim); 60*e7be843bSPierre Pronchery return testresult; 61*e7be843bSPierre Pronchery } 62*e7be843bSPierre Pronchery setup_tests(void)63*e7be843bSPierre Proncheryint setup_tests(void) 64*e7be843bSPierre Pronchery { 65*e7be843bSPierre Pronchery ADD_TEST(test_txpim); 66*e7be843bSPierre Pronchery return 1; 67*e7be843bSPierre Pronchery } 68