Add LAPDm test case about SABM contention
diff --git a/lapd/L1CTL_Test.ttcn b/lapd/L1CTL_Test.ttcn
index acd19cc..e780de8 100644
--- a/lapd/L1CTL_Test.ttcn
+++ b/lapd/L1CTL_Test.ttcn
@@ -44,7 +44,7 @@
lapdm := frame
}
/* template for a valid SABM frame */
- template LapdmFrame LAPDm_B_SABM(template GsmSapi sapi, template octetstring payload) := {
+ template LapdmFrame LAPDm_B_SABM(template GsmSapi sapi, octetstring payload) := {
b := {
addr := tr_LapdmAddr(sapi, false),
ctrl := t_LapdmCtrlSABM(true),
@@ -56,7 +56,19 @@
}
/* template for a valid UA frame */
- template LapdmFrame LAPDm_B_UA(template GsmSapi sapi, template octetstring payload) := {
+ template LapdmFrame tr_LAPDm_B_UA(template GsmSapi sapi, template octetstring payload) := {
+ b := {
+ addr := tr_LapdmAddr(sapi, false),
+ ctrl := t_LapdmCtrlUA(true),
+ len := ?,
+ m := false,
+ el := 1,
+ payload := payload
+ }
+ }
+
+ /* template for a valid UA frame */
+ template LapdmFrame LAPDm_B_UA(template GsmSapi sapi, octetstring payload) := {
b := {
addr := tr_LapdmAddr(sapi, false),
ctrl := t_LapdmCtrlUA(true),
@@ -68,7 +80,7 @@
}
/* template for a valid UI frame */
- template LapdmFrame LAPDm_B_UI(template GsmSapi sapi, template octetstring payload) := {
+ template LapdmFrame LAPDm_B_UI(template GsmSapi sapi, octetstring payload) := {
b := {
addr := tr_LapdmAddr(sapi, true),
ctrl := t_LapdmCtrlUI(false),
@@ -130,6 +142,33 @@
setverdict(pass);
}
+ testcase TC_sabm_contention() runs on dummy_CT {
+ var LAPDm_ph_data phd;
+ const octetstring payload := '0102030405'O;
+ const GsmSapi sapi := 0;
+ const boolean use_sacch := false;
+ timer T := 5.0;
+
+ f_init();
+
+ f_establish_dcch();
+ /* first frame is our real SABM */
+ LAPDM.send(t_PH_DATA(sapi, use_sacch, LAPDm_B_SABM(sapi, payload)));
+ /* second frame is a SABM with different payload, which BTS has to ignore according to 8.4.1.4 */
+ LAPDM.send(t_PH_DATA(sapi, use_sacch, LAPDm_B_SABM(sapi, 'ABCDEF'O)));
+ log("====> expecting ", t_PH_DATA(sapi, use_sacch, LAPDm_B_UA(sapi, payload)));
+ T.start
+ alt {
+ [] LAPDM.receive(t_PH_DATA(?, use_sacch, LAPDm_B_UA(sapi, payload))) { setverdict(pass); repeat; }
+ [] LAPDM.receive(t_PH_DATA(?, use_sacch, tr_LAPDm_B_UA(sapi, ?))) {
+ setverdict(fail, "Second SABM was responded to during contention resolution");
+ }
+ [] LAPDM.receive { repeat };
+ [] T.timeout { }
+ }
+ f_release_dcch();
+ }
+
testcase TC_foo() runs on dummy_CT {
/*
@@ -155,10 +194,9 @@
control {
execute(TC_foo());
execute(TC_sabm_ua_dcch_sapi0());
-/*
execute(TC_sabm_ua_dcch_sapi0_nopayload());
execute(TC_sabm_ua_dcch_sapi3());
execute(TC_sabm_ua_dcch_sapi4());
-*/
+ execute(TC_sabm_contention());
}
}