RIFO: add more thorough tests and a vetted test.ok file

This commit adds 2 new tests:
 - too old frames (which should get dropped)
 - already correct frames (which shouldn't be touched)

In addition, every test will now be run twice.
Once at frame number 0 and once very close to the wrap-around of
the internal frame counter in order to observe the behaviour.

Change-Id: I930b4361924b2e8bcb566eb7ee64f36e06bc7745
This commit is contained in:
Manawyrm 2022-04-09 02:03:18 +02:00 committed by Harald Welte
parent 480d989d62
commit c72f38feac
2 changed files with 284 additions and 10 deletions

View File

@ -9,11 +9,11 @@
#include "frame_rifo.h"
static void *g_e1d_ctx;
static uint32_t init_next_out_fn;
static void rifo_in(struct frame_rifo *rifo, uint8_t *frame, uint32_t fn)
{
printf("RIFO_IN(%s, %u)\n", osmo_hexdump_nospc(frame, BYTES_PER_FRAME), fn);
OSMO_ASSERT(frame_rifo_in(rifo, frame, fn) == 0);
printf("RIFO_IN(%s, %u)=%d\n", osmo_hexdump_nospc(frame, BYTES_PER_FRAME), fn, frame_rifo_in(rifo, frame, fn));
}
static int rifo_out(struct frame_rifo *rifo, uint8_t *out)
@ -23,18 +23,21 @@ static int rifo_out(struct frame_rifo *rifo, uint8_t *out)
return rc;
}
static void missing_frames(void)
static void missing_frames(uint8_t modulo)
{
struct frame_rifo rifo;
frame_rifo_init(&rifo);
rifo.next_out_fn = init_next_out_fn;
printf("\nTEST: %s\n", __func__);
printf("\nTEST: %s, starting at FN: %u\n", __func__, init_next_out_fn);
for (int i = 0; i < 10; i++) {
uint8_t frame[32];
memset(frame, i, sizeof(frame));
rifo_in(&rifo, frame, 2*i);
if (i % 2 == modulo) {
rifo_in(&rifo, frame, init_next_out_fn + i);
}
}
for (int i = 0; i < 10; i++) {
@ -48,14 +51,15 @@ static void reordered_in(void)
{
struct frame_rifo rifo;
frame_rifo_init(&rifo);
rifo.next_out_fn = init_next_out_fn;
printf("\nTEST: %s\n", __func__);
printf("\nTEST: %s, starting at FN: %u\n", __func__, init_next_out_fn);
const uint8_t in[] = { 0, 1, 4, 3, 5, 2, 6, 7, 8, 9 };
for (int i = 0; i < sizeof(in); i++) {
uint8_t frame[32];
memset(frame, in[i], sizeof(frame));
rifo_in(&rifo, frame, in[i]);
rifo_in(&rifo, frame, init_next_out_fn + in[i]);
}
for (int i = 0; i < 10; i++) {
@ -65,12 +69,82 @@ static void reordered_in(void)
}
}
static void correct_order(void)
{
struct frame_rifo rifo;
frame_rifo_init(&rifo);
rifo.next_out_fn = init_next_out_fn;
printf("\nTEST: %s, starting at FN: %u\n", __func__, init_next_out_fn);
const uint8_t in[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for (int i = 0; i < sizeof(in); i++) {
uint8_t frame[32];
memset(frame, in[i], sizeof(frame));
rifo_in(&rifo, frame, init_next_out_fn + in[i]);
}
for (int i = 0; i < 10; i++) {
uint8_t frame[32];
memset(frame, 0xff, sizeof(frame));
rifo_out(&rifo, frame);
}
}
static void too_old_frames(void)
{
struct frame_rifo rifo;
frame_rifo_init(&rifo);
rifo.next_out_fn = init_next_out_fn;
printf("\nTEST: %s, starting at FN: %u\n", __func__, init_next_out_fn);
// Put 10 frames at absolute frame numbers 850-860
// (to get outside of the 800 frame buffer)
const uint8_t in[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for (int i = 0; i < sizeof(in); i++) {
uint8_t frame[32];
memset(frame, in[i], sizeof(frame));
rifo_in(&rifo, frame, init_next_out_fn + in[i] + 850);
}
// Skip the first 850 frames
for (int i = 0; i < 850; i++) {
uint8_t frame[32];
memset(frame, 0xff, sizeof(frame));
// Note: frame_rifo_out instead of rifo_out
// (just to ignore the output)
frame_rifo_out(&rifo, frame);
}
// Try to read the 10 real frames (which shouldn't be in the buffer)
for (int i = 0; i < 10; i++) {
uint8_t frame[32];
memset(frame, 0xff, sizeof(frame));
rifo_out(&rifo, frame);
}
}
void run_all_tests(void)
{
missing_frames(0);
missing_frames(1);
reordered_in();
correct_order();
too_old_frames();
}
int main(int argc, char **argv)
{
g_e1d_ctx = talloc_named_const(NULL, 0, "osmo-e1d");
osmo_init_logging2(g_e1d_ctx, &log_info);
missing_frames();
reordered_in();
// run all tests starting with a framenumber of 0
init_next_out_fn = 0;
run_all_tests();
// re-run all tests at the edge of a framenumber rollover
init_next_out_fn = 0xFFFFFFFF - 5;
run_all_tests();
}

200
tests/rifo/rifo_test.ok Normal file
View File

@ -0,0 +1,200 @@
TEST: missing_frames, starting at FN: 0
RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 0)=0
RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 2)=0
RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 4)=0
RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 6)=0
RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 8)=0
RIFO_OUT(0000000000000000000000000000000000000000000000000000000000000000)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(0202020202020202020202020202020202020202020202020202020202020202)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(0404040404040404040404040404040404040404040404040404040404040404)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(0606060606060606060606060606060606060606060606060606060606060606)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(0808080808080808080808080808080808080808080808080808080808080808)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
TEST: missing_frames, starting at FN: 0
RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 1)=0
RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 3)=0
RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 5)=0
RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 7)=0
RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 9)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(0101010101010101010101010101010101010101010101010101010101010101)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(0303030303030303030303030303030303030303030303030303030303030303)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(0505050505050505050505050505050505050505050505050505050505050505)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(0707070707070707070707070707070707070707070707070707070707070707)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(0909090909090909090909090909090909090909090909090909090909090909)=0
TEST: reordered_in, starting at FN: 0
RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 0)=0
RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 1)=0
RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 4)=0
RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 3)=0
RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 5)=0
RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 2)=0
RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 6)=0
RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 7)=0
RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 8)=0
RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 9)=0
RIFO_OUT(0000000000000000000000000000000000000000000000000000000000000000)=0
RIFO_OUT(0101010101010101010101010101010101010101010101010101010101010101)=0
RIFO_OUT(0202020202020202020202020202020202020202020202020202020202020202)=0
RIFO_OUT(0303030303030303030303030303030303030303030303030303030303030303)=0
RIFO_OUT(0404040404040404040404040404040404040404040404040404040404040404)=0
RIFO_OUT(0505050505050505050505050505050505050505050505050505050505050505)=0
RIFO_OUT(0606060606060606060606060606060606060606060606060606060606060606)=0
RIFO_OUT(0707070707070707070707070707070707070707070707070707070707070707)=0
RIFO_OUT(0808080808080808080808080808080808080808080808080808080808080808)=0
RIFO_OUT(0909090909090909090909090909090909090909090909090909090909090909)=0
TEST: correct_order, starting at FN: 0
RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 0)=0
RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 1)=0
RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 2)=0
RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 3)=0
RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 4)=0
RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 5)=0
RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 6)=0
RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 7)=0
RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 8)=0
RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 9)=0
RIFO_OUT(0000000000000000000000000000000000000000000000000000000000000000)=0
RIFO_OUT(0101010101010101010101010101010101010101010101010101010101010101)=0
RIFO_OUT(0202020202020202020202020202020202020202020202020202020202020202)=0
RIFO_OUT(0303030303030303030303030303030303030303030303030303030303030303)=0
RIFO_OUT(0404040404040404040404040404040404040404040404040404040404040404)=0
RIFO_OUT(0505050505050505050505050505050505050505050505050505050505050505)=0
RIFO_OUT(0606060606060606060606060606060606060606060606060606060606060606)=0
RIFO_OUT(0707070707070707070707070707070707070707070707070707070707070707)=0
RIFO_OUT(0808080808080808080808080808080808080808080808080808080808080808)=0
RIFO_OUT(0909090909090909090909090909090909090909090909090909090909090909)=0
TEST: too_old_frames, starting at FN: 0
RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 850)=-34
RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 851)=-34
RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 852)=-34
RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 853)=-34
RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 854)=-34
RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 855)=-34
RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 856)=-34
RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 857)=-34
RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 858)=-34
RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 859)=-34
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
TEST: missing_frames, starting at FN: 4294967290
RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 4294967290)=0
RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 4294967292)=0
RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 4294967294)=0
RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 0)=0
RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 2)=0
RIFO_OUT(0000000000000000000000000000000000000000000000000000000000000000)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(0202020202020202020202020202020202020202020202020202020202020202)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(0404040404040404040404040404040404040404040404040404040404040404)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(0606060606060606060606060606060606060606060606060606060606060606)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(0808080808080808080808080808080808080808080808080808080808080808)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
TEST: missing_frames, starting at FN: 4294967290
RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 4294967291)=0
RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 4294967293)=0
RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 4294967295)=0
RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 1)=0
RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 3)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(0101010101010101010101010101010101010101010101010101010101010101)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(0303030303030303030303030303030303030303030303030303030303030303)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(0505050505050505050505050505050505050505050505050505050505050505)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(0707070707070707070707070707070707070707070707070707070707070707)=0
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(0909090909090909090909090909090909090909090909090909090909090909)=0
TEST: reordered_in, starting at FN: 4294967290
RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 4294967290)=0
RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 4294967291)=0
RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 4294967294)=0
RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 4294967293)=0
RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 4294967295)=0
RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 4294967292)=0
RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 0)=0
RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 1)=0
RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 2)=0
RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 3)=0
RIFO_OUT(0000000000000000000000000000000000000000000000000000000000000000)=0
RIFO_OUT(0101010101010101010101010101010101010101010101010101010101010101)=0
RIFO_OUT(0202020202020202020202020202020202020202020202020202020202020202)=0
RIFO_OUT(0303030303030303030303030303030303030303030303030303030303030303)=0
RIFO_OUT(0404040404040404040404040404040404040404040404040404040404040404)=0
RIFO_OUT(0505050505050505050505050505050505050505050505050505050505050505)=0
RIFO_OUT(0606060606060606060606060606060606060606060606060606060606060606)=0
RIFO_OUT(0707070707070707070707070707070707070707070707070707070707070707)=0
RIFO_OUT(0808080808080808080808080808080808080808080808080808080808080808)=0
RIFO_OUT(0909090909090909090909090909090909090909090909090909090909090909)=0
TEST: correct_order, starting at FN: 4294967290
RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 4294967290)=0
RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 4294967291)=0
RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 4294967292)=0
RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 4294967293)=0
RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 4294967294)=0
RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 4294967295)=0
RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 0)=0
RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 1)=0
RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 2)=0
RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 3)=0
RIFO_OUT(0000000000000000000000000000000000000000000000000000000000000000)=0
RIFO_OUT(0101010101010101010101010101010101010101010101010101010101010101)=0
RIFO_OUT(0202020202020202020202020202020202020202020202020202020202020202)=0
RIFO_OUT(0303030303030303030303030303030303030303030303030303030303030303)=0
RIFO_OUT(0404040404040404040404040404040404040404040404040404040404040404)=0
RIFO_OUT(0505050505050505050505050505050505050505050505050505050505050505)=0
RIFO_OUT(0606060606060606060606060606060606060606060606060606060606060606)=0
RIFO_OUT(0707070707070707070707070707070707070707070707070707070707070707)=0
RIFO_OUT(0808080808080808080808080808080808080808080808080808080808080808)=0
RIFO_OUT(0909090909090909090909090909090909090909090909090909090909090909)=0
TEST: too_old_frames, starting at FN: 4294967290
RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 844)=-34
RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 845)=-34
RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 846)=-34
RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 847)=-34
RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 848)=-34
RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 849)=-34
RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 850)=-34
RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 851)=-34
RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 852)=-34
RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 853)=-34
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1