From 6e3bb70a90cce80baaba6501b1121f21b90deeb0 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 29 Jul 2026 10:45:16 -0400 Subject: [PATCH] MT#55283 sequencer unit test Change-Id: Id91d66e3f2d092e202022034b63effdb038101d4 --- t/.gitignore | 1 + t/Makefile | 10 ++ t/test-sequencer.c | 289 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 300 insertions(+) create mode 100644 t/test-sequencer.c diff --git a/t/.gitignore b/t/.gitignore index 54fc0e471..f6bc85348 100644 --- a/t/.gitignore +++ b/t/.gitignore @@ -30,3 +30,4 @@ test-amr-encode aead-decrypt s3-auth kernel-extmap-filter +test-sequencer diff --git a/t/Makefile b/t/Makefile index 53c3c5e6a..09f9f7c6c 100644 --- a/t/Makefile +++ b/t/Makefile @@ -88,6 +88,7 @@ include ../lib/common.Makefile TESTS := test-bitstr aes-crypt aead-aes-crypt test-const_str_hash.strhash ifeq ($(with_transcoding),yes) TESTS += test-transcode test-dtmf-detect test-payload-tracker test-resample test-stats test-mix-buffer +TESTS += test-sequencer ifeq ($(RTPENGINE_EXTENDED_TESTS),1) TESTS += test-amr-decode test-amr-encode endif @@ -478,6 +479,15 @@ test-transcode: test-transcode.o \ ../lib/uring.o \ log.o +test-sequencer: test-sequencer.o \ + $(COMMONOBJS) \ + ../lib/bencode.o \ + ../lib/cchain.o \ + ../lib/codeclib.o \ + ../lib/dtmflib.o \ + ../lib/resample.o \ + log.o + test-resample: test-resample.o \ $(COMMONOBJS) \ ../lib/bencode.o \ diff --git a/t/test-sequencer.c b/t/test-sequencer.c new file mode 100644 index 000000000..119c5dce3 --- /dev/null +++ b/t/test-sequencer.c @@ -0,0 +1,289 @@ +#include "codeclib.h" +#include + +static unsigned int num_freed; + +static void ffunc(void *a) { + num_freed++; +} + +int main(void) { + packet_sequencer_t ps = {0}; + packet_sequencer_init(&ps, ffunc); + + void *p; + int i; + + p = packet_sequencer_next_packet(&ps); + assert(p == NULL); + + p = packet_sequencer_force_next_packet(&ps); + assert(p == NULL); + + i = packet_sequencer_next_ok(&ps); + assert(!i); + + assert(num_freed == 0); + + seq_packet_t pks[256]; + + pks[0].seq = 100; + i = packet_sequencer_insert(&ps, &pks[0]); + assert(i == 0); + assert(num_freed == 0); + + i = packet_sequencer_next_ok(&ps); + assert(i); + + p = packet_sequencer_next_packet(&ps); + assert(p == &pks[0]); + assert(num_freed == 0); + + + pks[0].seq = 101; + pks[1].seq = 102; + + i = packet_sequencer_insert(&ps, &pks[0]); + assert(i == 0); + assert(num_freed == 0); + + i = packet_sequencer_next_ok(&ps); + assert(i); + + i = packet_sequencer_insert(&ps, &pks[1]); + assert(i == 2); + assert(num_freed == 0); + + i = packet_sequencer_next_ok(&ps); + assert(i); + + p = packet_sequencer_next_packet(&ps); + assert(p == &pks[0]); + assert(num_freed == 0); + + p = packet_sequencer_next_packet(&ps); + assert(p == &pks[1]); + assert(num_freed == 0); + + p = packet_sequencer_next_packet(&ps); + assert(p == NULL); + + + pks[0].seq = 103; + pks[1].seq = 104; + + i = packet_sequencer_insert(&ps, &pks[1]); + assert(i == 0); + assert(num_freed == 0); + + i = packet_sequencer_next_ok(&ps); + assert(!i); + + p = packet_sequencer_next_packet(&ps); + assert(p == NULL); + + i = packet_sequencer_insert(&ps, &pks[0]); + assert(i == 2); + assert(num_freed == 0); + + i = packet_sequencer_next_ok(&ps); + assert(i); + + p = packet_sequencer_next_packet(&ps); + assert(p == &pks[0]); + assert(num_freed == 0); + + p = packet_sequencer_next_packet(&ps); + assert(p == &pks[1]); + assert(num_freed == 0); + + p = packet_sequencer_next_packet(&ps); + assert(p == NULL); + + i = packet_sequencer_insert(&ps, &pks[0]); + assert(i == -1); + assert(num_freed == 0); + + i = packet_sequencer_next_ok(&ps); + assert(!i); + + i = packet_sequencer_insert(&ps, &pks[1]); + assert(i == -1); + assert(num_freed == 0); + + i = packet_sequencer_next_ok(&ps); + assert(!i); + + p = packet_sequencer_next_packet(&ps); + assert(p == NULL); + + + pks[0].seq = 106; + pks[1].seq = 107; + + i = packet_sequencer_insert(&ps, &pks[1]); + assert(i == 0); + assert(num_freed == 0); + + i = packet_sequencer_next_ok(&ps); + assert(!i); + + p = packet_sequencer_next_packet(&ps); + assert(p == NULL); + + i = packet_sequencer_insert(&ps, &pks[0]); + assert(i == 2); + assert(num_freed == 0); + + i = packet_sequencer_next_ok(&ps); + assert(!i); + + p = packet_sequencer_next_packet(&ps); + assert(p == NULL); + assert(num_freed == 0); + + p = packet_sequencer_force_next_packet(&ps); + assert(p == &pks[0]); + assert(num_freed == 0); + + p = packet_sequencer_next_packet(&ps); + assert(p == &pks[1]); + assert(num_freed == 0); + + + + pks[0].seq = 110; + pks[1].seq = 111; + + i = packet_sequencer_insert(&ps, &pks[1]); + assert(i == 0); + assert(num_freed == 0); + + i = packet_sequencer_next_ok(&ps); + assert(!i); + + p = packet_sequencer_next_packet(&ps); + assert(p == NULL); + + i = packet_sequencer_insert(&ps, &pks[0]); + assert(i == 2); + assert(num_freed == 0); + + i = packet_sequencer_next_ok(&ps); + assert(!i); + + p = packet_sequencer_next_packet(&ps); + assert(p == NULL); + assert(num_freed == 0); + + pks[2].seq = 112; + pks[3].seq = 113; + pks[4].seq = 114; + pks[5].seq = 115; + pks[6].seq = 116; + pks[7].seq = 117; + pks[8].seq = 118; + pks[9].seq = 119; + + i = packet_sequencer_insert(&ps, &pks[2]); + assert(i == 2); + assert(num_freed == 0); + i = packet_sequencer_insert(&ps, &pks[3]); + assert(i == 2); + assert(num_freed == 0); + i = packet_sequencer_insert(&ps, &pks[7]); + assert(i == 2); + assert(num_freed == 0); + i = packet_sequencer_insert(&ps, &pks[8]); + assert(i == 2); + assert(num_freed == 0); + i = packet_sequencer_insert(&ps, &pks[9]); + assert(i == 2); + assert(num_freed == 0); + i = packet_sequencer_insert(&ps, &pks[4]); + assert(i == 2); + assert(num_freed == 0); + + i = packet_sequencer_next_ok(&ps); + assert(!i); + + p = packet_sequencer_next_packet(&ps); + assert(p == NULL); + assert(num_freed == 0); + + i = packet_sequencer_insert(&ps, &pks[6]); + assert(i == 2); + assert(num_freed == 0); + + i = packet_sequencer_next_ok(&ps); + assert(!i); + + p = packet_sequencer_next_packet(&ps); + assert(p == NULL); + assert(num_freed == 0); + + i = packet_sequencer_insert(&ps, &pks[5]); + assert(i == 2); + assert(num_freed == 0); + + i = packet_sequencer_next_ok(&ps); + assert(!i); + + p = packet_sequencer_next_packet(&ps); + assert(p == &pks[0]); + assert(num_freed == 0); + + i = packet_sequencer_next_ok(&ps); + assert(i); + assert(num_freed == 0); + + p = packet_sequencer_next_packet(&ps); + assert(p == &pks[1]); + assert(num_freed == 0); + + + pks[0].seq = 10000; + pks[1].seq = 10001; + + i = packet_sequencer_insert(&ps, &pks[1]); + assert(i == 1); + assert(num_freed == 8); + num_freed = 0; + + p = packet_sequencer_next_packet(&ps); + assert(p == &pks[1]); + assert(num_freed == 0); + + i = packet_sequencer_insert(&ps, &pks[0]); + assert(i == -1); + assert(num_freed == 0); + + p = packet_sequencer_next_packet(&ps); + assert(p == NULL); + assert(num_freed == 0); + + + pks[0].seq = 10; + pks[1].seq = 11; + + i = packet_sequencer_insert(&ps, &pks[1]); + assert(i == 1); + assert(num_freed == 0); + + i = packet_sequencer_insert(&ps, &pks[0]); + assert(i == -1); + assert(num_freed == 0); + + p = packet_sequencer_next_packet(&ps); + assert(p == &pks[1]); + assert(num_freed == 0); + + p = packet_sequencer_next_packet(&ps); + assert(p == NULL); + assert(num_freed == 0); + + + packet_sequencer_destroy(&ps); + + return 0; +}