1a74702c6SGeorge Wang/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */ 250aadb33SDmitri Tikhonov#include <assert.h> 350aadb33SDmitri Tikhonov#include <stdint.h> 450aadb33SDmitri Tikhonov#include <stdio.h> 550aadb33SDmitri Tikhonov#include <stdlib.h> 650aadb33SDmitri Tikhonov#include <string.h> 750aadb33SDmitri Tikhonov#include <sys/queue.h> 8461e84d8SAmol Deshpande#ifndef WIN32 950aadb33SDmitri Tikhonov#include <unistd.h> 10461e84d8SAmol Deshpande#endif 1150aadb33SDmitri Tikhonov 1250aadb33SDmitri Tikhonov#include "lsquic.h" 1350aadb33SDmitri Tikhonov#include "lsquic_int_types.h" 1450aadb33SDmitri Tikhonov#include "lsquic_types.h" 155392f7a3SLiteSpeed Tech#include "lsquic_hash.h" 1650aadb33SDmitri Tikhonov#include "lsquic_conn.h" 1750aadb33SDmitri Tikhonov#include "lsquic_conn_hash.h" 1850aadb33SDmitri Tikhonov#include "lsquic_mm.h" 1950aadb33SDmitri Tikhonov#include "lsquic_malo.h" 2050aadb33SDmitri Tikhonov#include "lsquic_logger.h" 2150aadb33SDmitri Tikhonov#include "lsquic.h" 2250aadb33SDmitri Tikhonov 2350aadb33SDmitri Tikhonov 2450aadb33SDmitri Tikhonovstatic struct lsquic_conn * 2550aadb33SDmitri Tikhonovget_new_lsquic_conn (struct malo *malo) 2650aadb33SDmitri Tikhonov{ 2750aadb33SDmitri Tikhonov struct lsquic_conn *lconn = lsquic_malo_get(malo); 2850aadb33SDmitri Tikhonov memset(lconn, 0, sizeof(*lconn)); 295392f7a3SLiteSpeed Tech memcpy(lconn->cn_cid.idbuf, &lconn, sizeof(lconn)); 305392f7a3SLiteSpeed Tech lconn->cn_cid.len = sizeof(lconn); 3150aadb33SDmitri Tikhonov return lconn; 3250aadb33SDmitri Tikhonov} 3350aadb33SDmitri Tikhonov 3450aadb33SDmitri Tikhonov 3550aadb33SDmitri Tikhonovint 3650aadb33SDmitri Tikhonovmain (int argc, char **argv) 3750aadb33SDmitri Tikhonov{ 3850aadb33SDmitri Tikhonov struct malo *malo; 3950aadb33SDmitri Tikhonov struct conn_hash conn_hash; 407fbe101bSDmitri Tikhonov unsigned n, nelems; 4150aadb33SDmitri Tikhonov struct lsquic_conn *lconn, *find_lsconn; 4250aadb33SDmitri Tikhonov int s; 4350aadb33SDmitri Tikhonov 4450aadb33SDmitri Tikhonov if (argc > 1) 4550aadb33SDmitri Tikhonov nelems = atoi(argv[1]); 4650aadb33SDmitri Tikhonov else 4750aadb33SDmitri Tikhonov nelems = 1000000; 4850aadb33SDmitri Tikhonov 4950aadb33SDmitri Tikhonov lsquic_log_to_fstream(stderr, LLTS_HHMMSSMS); 5050aadb33SDmitri Tikhonov lsquic_set_log_level("info"); 5150aadb33SDmitri Tikhonov 5250aadb33SDmitri Tikhonov malo = lsquic_malo_create(sizeof(*lconn)); 53cd7bc383SDmitri Tikhonov s = conn_hash_init(&conn_hash, 0); 5450aadb33SDmitri Tikhonov assert(0 == s); 5550aadb33SDmitri Tikhonov 5650aadb33SDmitri Tikhonov for (n = 0; n < nelems; ++n) 5750aadb33SDmitri Tikhonov { 5850aadb33SDmitri Tikhonov lconn = get_new_lsquic_conn(malo); 5950aadb33SDmitri Tikhonov lconn->cn_if = (void *) (uintptr_t) n; /* This will be used for verification later the test */ 605392f7a3SLiteSpeed Tech find_lsconn = conn_hash_find_by_cid(&conn_hash, &lconn->cn_cid); 6150aadb33SDmitri Tikhonov assert(!find_lsconn); 627fbe101bSDmitri Tikhonov s = conn_hash_add(&conn_hash, lconn); 6350aadb33SDmitri Tikhonov assert(0 == s); 642d296031SDmitri Tikhonov lconn->cn_flags = 1; /* In hash */ 6550aadb33SDmitri Tikhonov } 6650aadb33SDmitri Tikhonov 6750aadb33SDmitri Tikhonov assert(nelems == conn_hash_count(&conn_hash)); 6850aadb33SDmitri Tikhonov 6950aadb33SDmitri Tikhonov for (lconn = lsquic_malo_first(malo); lconn; 7050aadb33SDmitri Tikhonov lconn = lsquic_malo_next(malo)) 7150aadb33SDmitri Tikhonov { 722d296031SDmitri Tikhonov assert(lconn->cn_flags == 1); 735392f7a3SLiteSpeed Tech find_lsconn = conn_hash_find_by_cid(&conn_hash, &lconn->cn_cid); 7450aadb33SDmitri Tikhonov assert(find_lsconn == lconn); 7550aadb33SDmitri Tikhonov conn_hash_remove(&conn_hash, lconn); 762d296031SDmitri Tikhonov lconn->cn_flags = 0; 775392f7a3SLiteSpeed Tech find_lsconn = conn_hash_find_by_cid(&conn_hash, &lconn->cn_cid); 7850aadb33SDmitri Tikhonov assert(!find_lsconn); 7950aadb33SDmitri Tikhonov } 8050aadb33SDmitri Tikhonov 8150aadb33SDmitri Tikhonov assert(0 == conn_hash_count(&conn_hash)); 8250aadb33SDmitri Tikhonov 8350aadb33SDmitri Tikhonov conn_hash_cleanup(&conn_hash); 8450aadb33SDmitri Tikhonov lsquic_malo_destroy(malo); 8550aadb33SDmitri Tikhonov 8650aadb33SDmitri Tikhonov exit(0); 8750aadb33SDmitri Tikhonov} 88