laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-e1d/+/27801 )
Change subject: RIFO: Add a test for bounds checking ......................................................................
RIFO: Add a test for bounds checking
This tests exactly one frame before and one frame after what should be accepted to make sure those are rejected
Signed-off-by: Sylvain Munaut tnt@246tNt.com Change-Id: I048e1b8c2b918f7ca4b4327b89bf04430a2838bc --- M tests/rifo/rifo_test.c M tests/rifo/rifo_test.ok 2 files changed, 89 insertions(+), 0 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved
diff --git a/tests/rifo/rifo_test.c b/tests/rifo/rifo_test.c index 22ffa73..c9500d6 100644 --- a/tests/rifo/rifo_test.c +++ b/tests/rifo/rifo_test.c @@ -125,6 +125,46 @@ } }
+static void bound_check(void) +{ + uint8_t frame[32]; + 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 1 frame and get it + memset(frame, 0xa5, sizeof(frame)); + frame_rifo_in(&rifo, frame, init_next_out_fn); + frame_rifo_out(&rifo, frame); + + // Put 11 frames at absolute frame numbers 791-801 + const uint8_t in[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; + for (int i = 0; i < sizeof(in); i++) { + memset(frame, in[i], sizeof(frame)); + rifo_in(&rifo, frame, init_next_out_fn + in[i] + 791); + } + + // Add frame at start offset + memset(frame, 0xa5, sizeof(frame)); + rifo_in(&rifo, frame, init_next_out_fn); + + // Skip the first 790 frames + for (int i = 0; i < 790; i++) { + 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 + for (int i = 0; i < 10; i++) { + memset(frame, 0xff, sizeof(frame)); + rifo_out(&rifo, frame); + } +} + void run_all_tests(void) { missing_frames(0); @@ -132,6 +172,7 @@ reordered_in(); correct_order(); too_old_frames(); + bound_check(); }
int main(int argc, char **argv) diff --git a/tests/rifo/rifo_test.ok b/tests/rifo/rifo_test.ok index cf1b778..c578724 100644 --- a/tests/rifo/rifo_test.ok +++ b/tests/rifo/rifo_test.ok @@ -99,6 +99,30 @@ RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1 RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+TEST: bound_check, starting at FN: 0 +RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 791)=0 +RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 792)=0 +RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 793)=0 +RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 794)=0 +RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 795)=0 +RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 796)=0 +RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 797)=0 +RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 798)=0 +RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 799)=0 +RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 800)=0 +RIFO_IN(0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a, 801)=-34 +RIFO_IN(a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5, 0)=-34 +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: missing_frames, starting at FN: 4294967290 RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 4294967290)=0 RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 4294967292)=0 @@ -198,3 +222,27 @@ RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1 RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1 RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1 + +TEST: bound_check, starting at FN: 4294967290 +RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 785)=0 +RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 786)=0 +RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 787)=0 +RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 788)=0 +RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 789)=0 +RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 790)=0 +RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 791)=0 +RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 792)=0 +RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 793)=0 +RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 794)=0 +RIFO_IN(0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a, 795)=-34 +RIFO_IN(a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5, 4294967290)=-34 +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