bts: fix TC_ipa_osmo_pcu_anr_fwd: send/expect proper payloads
The testcase expectations are wrong, because when matching the
PCU_IF_MSG_NEIGH_ADDR_REQ on the PCU port, TITAN's RAW codec reasonably
chooses the 'neigh_addr_req' field in the PCUIF_ContainerMsgUnion, not
the 'other' field as expected. The 'other' field would be choosen if
the 'msg_type' is not PCU_IF_MSG_NEIGH_ADDR_{REQ,CNF}.
A quick and dirty fix would be changing the PCU_IF_MSG_NEIGH_ADDR_REQ
to something else, e.g. PCU_IF_MSG_CONTAINER. This would make both
encoder and decoder agree on the union field to be used and would work
in theory (because for some reason we reuse PCUIF_MsgType as the
container payload type, and osmo-bts does not really care about the
payload), but I don't really like this approach.
I believe we should be sending realistic payloads instead.
Change-Id: Id4a6ecf5b271a16645a42c8bea22f47869f7c81f
Closes: OS#5963
diff --git a/bts/BTS_Tests_OML.ttcn b/bts/BTS_Tests_OML.ttcn
index 4a58312..b76a0ac 100644
--- a/bts/BTS_Tests_OML.ttcn
+++ b/bts/BTS_Tests_OML.ttcn
@@ -680,8 +680,6 @@
var PCUIF_send_data pcu_sd_msg;
var PCUIF_Message msg_rx;
timer T := 2.0;
- var octetstring payloadReq := f_rnd_octstring(300);
- var octetstring payloadRep := f_rnd_octstring(300);
f_init_oml(testcasename());
f_init_pcu(PCU, testcasename(), g_pcu_conn_id, g_pcu_last_info);
@@ -696,30 +694,75 @@
IPA_OSMO_PCU.receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_ID_RESP));
IPA_OSMO_PCU.receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_ID_ACK));
- IPA_OSMO_PCU.send(ts_PCUIF_CONTAINER(0, ts_PCUIF_CONT_OTHER(PCU_IF_MSG_NEIGH_ADDR_REQ, payloadReq)))
+ /* Sent via A-bis/IPA, received via the PCUIF */
+ var PCUIF_neigh_addr_req naddr_req := {
+ local_lac := f_rnd_int(c_UINT16_MAX),
+ local_ci := f_rnd_int(c_UINT16_MAX),
+ tgt_arfcn := f_rnd_int(c_UINT16_MAX),
+ tgt_bsic := f_rnd_int(63)
+ };
+ template (value) PCUIF_container ts_payloadReq := {
+ msg_type := PCU_IF_MSG_NEIGH_ADDR_REQ,
+ spare := '00'O,
+ len := 0, /* overwritten */
+ u := { neigh_addr_req := naddr_req }
+ };
+ template (present) PCUIF_container tr_payloadReq := {
+ msg_type := PCU_IF_MSG_NEIGH_ADDR_REQ,
+ spare := ?,
+ len := ?,
+ u := { neigh_addr_req := naddr_req }
+ };
+
+ IPA_OSMO_PCU.send(ts_PCUIF_CONTAINER(0, ts_payloadReq))
T.start;
alt {
- [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_CONTAINER(0, tr_PCUIF_CONT_OTHER(PCU_IF_MSG_NEIGH_ADDR_REQ, payloadReq)))) {
+ [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_CONTAINER(0, tr_payloadReq))) {
setverdict(pass);
}
[] PCU.receive(PCUIF_send_data:?) -> value pcu_sd_msg {
setverdict(fail, "Unexpected message received: ", pcu_sd_msg.data, " vs exp: ",
- t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_CONTAINER(0, tr_PCUIF_CONT_OTHER(PCU_IF_MSG_NEIGH_ADDR_REQ, payloadReq))));
+ t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_CONTAINER(0, tr_payloadReq)));
}
[] T.timeout { setverdict(fail, "Timeout waiting for ANR request on PCU inteface");}
}
T.stop;
+ /* Sent via the PCUIF, received via A-bis/IPA */
+ var PCUIF_neigh_addr_cnf naddr_cnf := {
+ orig_req := naddr_req,
+ error_code := 0,
+ mcc := 262,
+ mnc := 42,
+ mnc_3_digits := 0,
+ lac := f_rnd_int(c_UINT16_MAX),
+ rac := f_rnd_int(255),
+ cell_identity := f_rnd_int(c_UINT16_MAX)
+ };
+
+ template (value) PCUIF_container ts_payloadRsp := {
+ msg_type := PCU_IF_MSG_NEIGH_ADDR_CNF,
+ spare := '00'O,
+ len := 0, /* overwritten */
+ u := { neigh_addr_cnf := naddr_cnf }
+ };
+ template (present) PCUIF_container tr_payloadRsp := {
+ msg_type := PCU_IF_MSG_NEIGH_ADDR_CNF,
+ spare := ?,
+ len := ?,
+ u := { neigh_addr_cnf := naddr_cnf }
+ };
+
/* Send back the response: */
- PCU.send(t_SD_PCUIF(g_pcu_conn_id, ts_PCUIF_CONTAINER(0, ts_PCUIF_CONT_OTHER(PCU_IF_MSG_NEIGH_ADDR_REQ, payloadRep))))
+ PCU.send(t_SD_PCUIF(g_pcu_conn_id, ts_PCUIF_CONTAINER(0, ts_payloadRsp)))
T.start;
alt {
- [] IPA_OSMO_PCU.receive(tr_PCUIF_CONTAINER(0, tr_PCUIF_CONT_OTHER(PCU_IF_MSG_NEIGH_ADDR_REQ, payloadRep))) {
+ [] IPA_OSMO_PCU.receive(tr_PCUIF_CONTAINER(0, tr_payloadRsp)) {
setverdict(pass);
}
[] IPA_OSMO_PCU.receive(PCUIF_Message:?) -> value msg_rx {
setverdict(fail, "Unexpected message received: ", msg_rx, " vs exp: ",
- tr_PCUIF_CONTAINER(0, tr_PCUIF_CONT_OTHER(PCU_IF_MSG_NEIGH_ADDR_REQ, payloadRep)));
+ tr_PCUIF_CONTAINER(0, tr_payloadRsp));
}
[] T.timeout { setverdict(fail, "Timeout waiting for ANR request on BSC inteface"); }
}