tnt has uploaded this change for review. ( 
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 <[email protected]>
Change-Id: I048e1b8c2b918f7ca4b4327b89bf04430a2838bc
---
M tests/rifo/rifo_test.c
M tests/rifo/rifo_test.ok
2 files changed, 89 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-e1d refs/changes/01/27801/1

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

--
To view, visit https://gerrit.osmocom.org/c/osmo-e1d/+/27801
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-e1d
Gerrit-Branch: master
Gerrit-Change-Id: I048e1b8c2b918f7ca4b4327b89bf04430a2838bc
Gerrit-Change-Number: 27801
Gerrit-PatchSet: 1
Gerrit-Owner: tnt <[email protected]>
Gerrit-MessageType: newchange

Reply via email to