WIP: pcu testing

Change-Id: Iee66d4a2eab520dfc115ffeb16ab6413e4057973
This commit is contained in:
Harald Welte 2018-03-03 22:38:54 +01:00
parent 060e27a476
commit 54242db850
1 changed files with 47 additions and 54 deletions

View File

@ -71,6 +71,15 @@ module Test {
connect(self:L1, lapdm_component:LAPDM_SP);
map(lapdm_component:L1CTL, system:L1CTL);
lapdm_component.start(LAPDmStart());
f_bssgp_client_register(g_mmctx.imsi, g_mmctx.tlli, mp_gb_cfg.cell_id);
f_bssgp_establish();
}
function f_exit() runs on dummy_CT {
lapdm_component.stop;
ns_component.stop;
bssgp_component.stop;
}
function f_bssgp_dec_and_log(in octetstring inp) {
@ -220,7 +229,10 @@ module Test {
alt {
[] L1.receive(TBF_establish_res:?) {}
[] L1.receive { repeat; }
[] T.timeout { setverdict(fail); }
[] T.timeout {
setverdict(fail, "Timeout establishing UL TBF");
self.stop;
}
}
T.stop;
}
@ -303,38 +315,10 @@ function f_ul_tbf(inout UlTbfState us) runs on dummy_CT {
f_bssgp_wait_ul_ud(tr_BD_BSSGP(tr_BSSGP_UL_UD(g_mmctx.tlli, ?, us.tbf.llc_pdus_enc[i])));
}
setverdict(pass);
L1.send(DCCH_release_req:{});
}
/* Send a single Uplink Block via Um; Verify reception on BSSGP; Expect UL_ACK on Um */
function f_single_ul_block(GprsCodingScheme cs) runs on dummy_CT {
var octetstring payload := '01020304'O;
var PDU_LLC llc := valueof(ts_LLC_UI(payload, c_LLC_SAPI_LLGMM, '0'B, g_mmctx.n_u));
var octetstring llc_enc := enc_PDU_LLC(llc);
var RLCMAC_ph_data_ind dl;
/* establish upling TBF */
f_establish_ul_tbf();
/* Generate LLC PDU consisting of single RLC block and send it via simulated MS */
var template RlcmacUlBlock blk := t_RLCMAC_UL_DATA_TLLI(0, 0, 0, {t_RLCMAC_LLCBLOCK(llc_enc)}, false, g_mmctx.tlli);
L1.send(RLCMAC_ph_data_req:{dyn:={tbf_id := 0, cs := cs, block := blk}});
/* ensure that this LLC-PDU arrives from the right TLLI at the (simulated) SGSN */
BSSGP.receive(tr_BD_BSSGP(tr_BSSGP_UL_UD(g_mmctx.tlli, ?, llc_enc)));
/* ensure the MS receives an UL_ACK_NACK */
alt {
[] L1.receive(RLCMAC_ph_data_ind:{cs:=?, ts_nr:=?, fn:=?, block:=tr_RLCMAC_ACK_NACK(0, g_mmctx.tlli)}) -> value dl {
log("found matching ACK/NACK");
/* send CTRL ACK in uplink */
var GsmFrameNumber ul_fn := f_rrbp_fn(dl.fn, dl.block.ctrl.mac_hdr.rrbp);
var RlcmacUlCtrlMsg ctrl_ack := valueof(ts_RlcMacUlCtrl_PKT_CTRL_ACK(g_mmctx.tlli));
var RlcmacUlBlock ul_block := valueof(ts_RLC_UL_CTRL_ACK(ctrl_ack));
L1.send(ts_PH_DATA_ABS(0, CS1, dl.ts_nr, ul_fn, {false, 0}, ul_block));
}
[] L1.receive { repeat; };
}
}
testcase TC_rach() runs on dummy_CT {
var BssgpBvci bvci := 196;
g_mmctx.imsi := '262420123456789'H;
@ -345,25 +329,6 @@ function f_ul_tbf(inout UlTbfState us) runs on dummy_CT {
f_bssgp_client_register(g_mmctx.imsi, g_mmctx.tlli, mp_gb_cfg.cell_id);
f_bssgp_establish();
f_single_ul_block(CS1);
while (true) {
var BssgpDecoded bd;
var RLCMAC_ph_data_ind dl_msg;
alt {
[] BSSGP.receive(tr_BD_BSSGP(?)) -> value bd {
log("BSSGP Rx: ", bd);
}
[] BSSGP.receive(t_BssgpStsInd(?, ?, BVC_S_UNBLOCKED)) { repeat; }
[] BSSGP.receive { repeat; }
[] L1.receive(RLCMAC_ph_data_ind:?) -> value dl_msg {
log("L1 DL: ", dl_msg);
}
}
}
}
@ -513,25 +478,53 @@ function f_ul_tbf(inout UlTbfState us) runs on dummy_CT {
return payload;
}
testcase TC_ul_tbf_single_llc_sizes() runs on dummy_CT {
g_mmctx.imsi := '262420123456789'H;
g_mmctx.tlli := f_random_tlli();
f_init();
for (var integer len := 1; len <= 1560; len := len+1) {
log("Testing Uplink TBF with single LLC-PDU of ", len, " bytes");
var octetstring payload := f_seq_octstr(len);
var UlTbfPars ul_tbf_pars := {
ack_mode := true,
initial_cs := CS1,
llc_pdus := {
valueof(ts_LLC_UI(payload, c_LLC_SAPI_LLGMM, '0'B, g_mmctx.n_u))
}
}
var UlTbfState ul_tbf_state;
f_UlTbfState_init(ul_tbf_state, ul_tbf_pars);
f_ul_tbf(ul_tbf_state);
f_sleep(1.0);
}
f_exit();
}
testcase TC_ul_tbf() runs on dummy_CT {
g_mmctx.imsi := '262420123456789'H;
g_mmctx.tlli := f_random_tlli();
f_init();
f_bssgp_client_register(g_mmctx.imsi, g_mmctx.tlli, mp_gb_cfg.cell_id);
f_bssgp_establish();
var octetstring payload := f_seq_octstr(256);
var octetstring payload := f_seq_octstr(1023);
var UlTbfPars ul_tbf_pars := {
ack_mode := true,
initial_cs := CS1,
llc_pdus := {
valueof(ts_LLC_UI(payload, c_LLC_SAPI_LLGMM, '0'B, g_mmctx.n_u)),
valueof(ts_LLC_UI(payload, c_LLC_SAPI_LLGMM, '0'B, g_mmctx.n_u+1))
valueof(ts_LLC_UI(payload, c_LLC_SAPI_LLGMM, '0'B, g_mmctx.n_u+1)),
valueof(ts_LLC_UI(payload, c_LLC_SAPI_LLGMM, '0'B, g_mmctx.n_u+2)),
valueof(ts_LLC_UI(payload, c_LLC_SAPI_LLGMM, '0'B, g_mmctx.n_u+3)),
valueof(ts_LLC_UI(payload, c_LLC_SAPI_LLGMM, '0'B, g_mmctx.n_u+4)),
valueof(ts_LLC_UI(payload, c_LLC_SAPI_LLGMM, '0'B, g_mmctx.n_u+5))
}
};
var UlTbfState ul_tbf_state;
f_UlTbfState_init(ul_tbf_state, ul_tbf_pars);
f_ul_tbf(ul_tbf_state);
f_exit();
}
control {