fixeria has uploaded this change for review. ( 
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(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks 
refs/changes/77/32077/1

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"); }
        }

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

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Id4a6ecf5b271a16645a42c8bea22f47869f7c81f
Gerrit-Change-Number: 32077
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <[email protected]>
Gerrit-MessageType: newchange

Reply via email to