laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/32077 )
Change subject: bts: fix TC_ipa_osmo_pcu_anr_fwd: send/expect proper payloads ......................................................................
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 --- M bts/BTS_Tests_OML.ttcn 1 file changed, 76 insertions(+), 8 deletions(-)
Approvals: Jenkins Builder: Verified pespin: Looks good to me, but someone else must approve laforge: Looks good to me, approved
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"); } }