aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorTobias Mädel <t.maedel@alfeld.de>2022-04-09 02:03:18 +0200
committerHarald Welte <laforge@osmocom.org>2022-04-09 13:21:52 +0200
commitc72f38feacdbf04e372c9c9dfac764f6bbbf4440 (patch)
tree3d3a07d5f4f0ea0a686f0fb4052a3084c00c1cb8 /tests
parent480d989d62dcde76f4418b7f3459743fcd6384f9 (diff)
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
Diffstat (limited to 'tests')
-rw-r--r--tests/rifo/rifo_test.c94
-rw-r--r--tests/rifo/rifo_test.ok200
2 files changed, 284 insertions, 10 deletions
diff --git a/tests/rifo/rifo_test.c b/tests/rifo/rifo_test.c
index c656c97..5dac5ba 100644
--- a/tests/rifo/rifo_test.c
+++ b/tests/rifo/rifo_test.c
@@ -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,16 +51,73 @@ 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++) {
+ uint8_t frame[32];
+ memset(frame, 0xff, sizeof(frame));
+ rifo_out(&rifo, frame);
+ }
+}
+
+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));
@@ -65,12 +125,26 @@ static void reordered_in(void)
}
}
+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();
}
diff --git a/tests/rifo/rifo_test.ok b/tests/rifo/rifo_test.ok
new file mode 100644
index 0000000..cf1b778
--- /dev/null
+++ b/tests/rifo/rifo_test.ok
@@ -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