pespin has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/41781?usp=email )

Change subject: bts: Validate no PDTCH/PTCCH block gaps in TC_pcu_rts_req
......................................................................

bts: Validate no PDTCH/PTCCH block gaps in TC_pcu_rts_req

Change-Id: I0bf3540523c231ed7172cab720163816d5d81e26
---
M bts/BTS_Tests.ttcn
M library/GSM_Types.ttcn
2 files changed, 40 insertions(+), 12 deletions(-)

Approvals:
  laforge: Looks good to me, but someone else must approve
  Jenkins Builder: Verified
  fixeria: Looks good to me, approved




diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 7bac7ee..592e58f 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -6110,7 +6110,8 @@

 /* test for periodic RTS_REQ; check number of FN expired and number of RTS_IND 
per SAPI */
 testcase TC_pcu_rts_req() runs on test_CT {
-       var integer first_fn, last_fn;
+       var integer pdtch_first_fn, pdtch_last_fn;
+       var integer ptcch_first_fn, ptcch_last_fn;
        var integer num_rts_pdtch := 0;
        var integer num_rts_ptcch := 0;
        var float test_duration := 5.0;
@@ -6125,18 +6126,34 @@
        alt {
        [] as_pcuif_msg(msg, tr_PCUIF_RTS_REQ(0, 0, 7, PCU_IF_SAPI_PDTCH, ?, 
?)) {
                num_rts_pdtch := num_rts_pdtch + 1;
-               if (not isbound(first_fn)) {
-                       first_fn := msg.u.rts_req.fn;
+               if (isbound(pdtch_first_fn)) {
+                       var integer exp_fn := f_next_pdtch_block(pdtch_last_fn);
+                       if (msg.u.rts_req.fn != exp_fn) {
+                               Misc_Helpers.f_shutdown(__BFILE__, __LINE__, 
fail,
+                                                       log2str("Rx RTS.req for 
PDTCH FN ", msg.u.rts_req.fn,
+                                                               " vs exp ", 
exp_fn, " (last_fn " , pdtch_last_fn, ")"));
+                       }
+                       pdtch_last_fn := msg.u.rts_req.fn;
+               } else {
+                       pdtch_first_fn := msg.u.rts_req.fn;
+                       pdtch_last_fn := msg.u.rts_req.fn;
                }
-               last_fn := msg.u.rts_req.fn;
                repeat;
                }
        [] as_pcuif_msg(msg, tr_PCUIF_RTS_REQ(0, 0, 7, PCU_IF_SAPI_PTCCH, ?, 
?)) {
                num_rts_ptcch := num_rts_ptcch + 1;
-               if (not isbound(first_fn)) {
-                       first_fn := msg.u.rts_req.fn;
+               if (isbound(ptcch_first_fn)) {
+                       var integer exp_fn := 
f_next_ptcch_dl_block(ptcch_last_fn);
+                       if (msg.u.rts_req.fn != exp_fn) {
+                               Misc_Helpers.f_shutdown(__BFILE__, __LINE__, 
fail,
+                                                       log2str("Rx RTS.req for 
PTTCH FN ", msg.u.rts_req.fn,
+                                                               " vs exp ", 
exp_fn, " (last_fn " , ptcch_last_fn, ")"));
+                       }
+                       ptcch_last_fn := msg.u.rts_req.fn;
+               } else {
+                       ptcch_first_fn := msg.u.rts_req.fn;
+                       ptcch_last_fn := msg.u.rts_req.fn;
                }
-               last_fn := msg.u.rts_req.fn;
                repeat;
                }
        [] as_pcuif_msg(msg, tr_PCUIF_RTS_REQ) {
@@ -6148,9 +6165,8 @@
                }
        [] T.timeout {}
        }
-       var integer fn_expired := last_fn - first_fn;
-       log(fn_expired, " fn expired with num_rts_pdtch=", num_rts_pdtch,
-               ", num_rts_ptcch=", num_rts_ptcch);
+       var integer fn_expired := f_max(pdtch_last_fn, ptcch_last_fn) - 
f_min(pdtch_first_fn, ptcch_first_fn);
+       log(fn_expired, " fn expired with num_rts_pdtch=", num_rts_pdtch, ", 
num_rts_ptcch=", num_rts_ptcch);

        /* verify the number of frames expired matches our expectation */
        const float c_GSM_FN_DURATION_MS := 4.61538;
@@ -6164,7 +6180,7 @@
        var float ptcch_expected := int2float(fn_expired) / 52.0 * 0.5;
        var template integer t_ptcch_exp := 
f_tolerance(float2int(ptcch_expected), 1, 100000, 1);
        if (not match(num_rts_ptcch, t_ptcch_exp)) {
-               setverdict(fail, "Number of RTS.ind for PTCCH (", 
num_rts_ptcch, ") not matching ",
+               setverdict(fail, "Number of RTS.req for PTCCH (", 
num_rts_ptcch, ") not matching ",
                                t_ptcch_exp);
        }

@@ -6172,7 +6188,7 @@
        var float pdtch_expected := int2float(fn_expired) / 52.0 * 12.0;
        var template integer t_pdtch_exp := 
f_tolerance(float2int(pdtch_expected), 1, 100000, 2);
        if (not match(num_rts_pdtch, t_pdtch_exp)) {
-               setverdict(fail, "Number of RTS.ind for PDTCH (", 
num_rts_pdtch, ") not matching ",
+               setverdict(fail, "Number of RTS.req for PDTCH (", 
num_rts_pdtch, ") not matching ",
                                t_pdtch_exp);
        }

diff --git a/library/GSM_Types.ttcn b/library/GSM_Types.ttcn
index 8333e58..b3b6dc9 100644
--- a/library/GSM_Types.ttcn
+++ b/library/GSM_Types.ttcn
@@ -547,4 +547,16 @@
        return fn mod GsmMaxFrameNumber;
 }

+private function ptcch_fn2bn(GsmFrameNumber fn) return uint32_t {
+       return (fn mod 416) / 104;
+}
+function f_next_ptcch_dl_block(GsmFrameNumber fn) return GsmFrameNumber
+{
+       var uint32_t bn := ptcch_fn2bn(fn) + 1;
+       fn := fn - (fn mod 416);
+       fn := fn + bn * 104 + 12;
+       return fn mod GsmMaxFrameNumber;
+}
+
+
 } with { encode "RAW"; variant "FIELDORDER(msb)" }

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/41781?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I0bf3540523c231ed7172cab720163816d5d81e26
Gerrit-Change-Number: 41781
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>

Reply via email to