<p>Stefan Sperling has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/11357">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">add an IPA test which sends a chopped payload<br><br>Add another IPA test to the BTS and BSC test suites.<br>This new test sends the header in one burst, followed by the<br>payload which is transmitted byte-per-byte.<br><br>The test uses an ID REQ message. If acting as a server, the test<br>can expect an ID RESP message. However, if acting as a client, the<br>server will close the connection when it receives the ID REQ.<br>The CTRL interface port on the BSC does not close the connection in<br>this case, so that particular port is skipped by the test for now.<br><br>Change-Id: If75cb90841bb25619b414f0cabe008a2428a9fdf<br>Related: OS#2010<br>Depends: I4804ccabd342b82d44e69dbc6eaaae220ec7d4e4<br>---<br>M bsc/BSC_Tests.ttcn<br>M bts/BTS_Tests.ttcn<br>M library/IPA_Testing.ttcn<br>3 files changed, 77 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/57/11357/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn</span><br><span>index 98224ad..fef5fd7 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -2957,6 +2957,15 @@</span><br><span>   }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_chopped_ipa_payload() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       const Integers bsc_ipa_ports := {mp_bsc_rsl_port, mp_bsc_oml_port</span><br><span style="color: hsl(120, 100%, 40%);">+                                     /* TODO: mp_bsc_ctrl_port does not work yet */};</span><br><span style="color: hsl(120, 100%, 40%);">+      for (var integer i := 0; i < lengthof(bsc_ipa_ports); i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                IPA_Testing.f_run_TC_chopped_ipa_payload(mp_bsc_ip, bsc_ipa_ports[i], CONNECT_TO_SERVER);</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Dyn PDCH todo:</span><br><span>    * activate OSMO as TCH/F</span><br><span>    * activate OSMO as TCH/H</span><br><span>@@ -3068,6 +3077,7 @@</span><br><span>  execute( TC_dyn_pdch_osmo_act_nack() );</span><br><span> </span><br><span>  execute( TC_chopped_ipa_ping() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_chopped_ipa_payload() );</span><br><span> </span><br><span>     /* at bottom as they might crash OsmoBSC before OS#3182 is fixed */</span><br><span>  execute( TC_early_conn_fail() );</span><br><span>diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn</span><br><span>index 2d59627..e0470ec 100644</span><br><span>--- a/bts/BTS_Tests.ttcn</span><br><span>+++ b/bts/BTS_Tests.ttcn</span><br><span>@@ -4151,6 +4151,10 @@</span><br><span>       IPA_Testing.f_run_TC_chopped_ipa_ping(mp_rsl_ip, mp_rsl_port, LISTEN_FOR_CLIENT);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_chopped_ipa_payload() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       IPA_Testing.f_run_TC_chopped_ipa_payload(mp_rsl_ip, mp_rsl_port, LISTEN_FOR_CLIENT);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* test generation of RLL ERR IND based on Um errors (TS 48.058 3.9) */</span><br><span> /*      protocol error as per 44.006 */</span><br><span> /*   link layer failure (repetition of I-frame N200 times without ACK */</span><br><span>@@ -4285,6 +4289,7 @@</span><br><span>  execute( TC_tch_sign_l2_fill_frame_dtxd() );</span><br><span> </span><br><span>     execute( TC_chopped_ipa_ping() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_chopped_ipa_payload() );</span><br><span> }</span><br><span> </span><br><span> </span><br><span>diff --git a/library/IPA_Testing.ttcn b/library/IPA_Testing.ttcn</span><br><span>index a94dd46..413dd31 100644</span><br><span>--- a/library/IPA_Testing.ttcn</span><br><span>+++ b/library/IPA_Testing.ttcn</span><br><span>@@ -32,6 +32,8 @@</span><br><span> /* Encoded IPA messages (network byte order) */</span><br><span> const octetstring ipa_msg_ping := '0001FE00'O;</span><br><span> const octetstring ipa_msg_pong := '0001FE01'O;</span><br><span style="color: hsl(120, 100%, 40%);">+const octetstring ipa_msg_id_req_hdr := '0007FE'O;</span><br><span style="color: hsl(120, 100%, 40%);">+const octetstring ipa_msg_id_req_payload := '04010801070102'O;</span><br><span> </span><br><span> /* A component which represents the system on which the IPA speaker is running. */</span><br><span> type component system_CT {</span><br><span>@@ -158,6 +160,60 @@</span><br><span>         }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Send a complete IPA "ID REQ" message header in one piece, and then send the payload one byte at a time,</span><br><span style="color: hsl(120, 100%, 40%);">+ * waiting for TCP buffer to flush between each byte. */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_chopped_ipa_payload(charstring ipa_ip, integer ipa_tcp_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          IPA_ConnectionMode conmode) runs on IPA_CT system system_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       var ConnectionId connId;</span><br><span style="color: hsl(120, 100%, 40%);">+      var ASP_RecvFrom asp_rx;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    connId := f_init(ipa_ip, ipa_tcp_port, conmode);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    if (conmode == CONNECT_TO_SERVER) {</span><br><span style="color: hsl(120, 100%, 40%);">+           var PortEvent port_evt;</span><br><span style="color: hsl(120, 100%, 40%);">+               f_send_ipa_data(ipa_ip, ipa_tcp_port, connId, ipa_msg_id_req_hdr);</span><br><span style="color: hsl(120, 100%, 40%);">+            f_send_chopped_ipa_msg(ipa_ip, ipa_tcp_port, connId, ipa_msg_id_req_payload);</span><br><span style="color: hsl(120, 100%, 40%);">+         /* Server will close the connection upon receiving an ID REQ. */</span><br><span style="color: hsl(120, 100%, 40%);">+              alt {</span><br><span style="color: hsl(120, 100%, 40%);">+                 [] IPL4.receive(PortEvent:{connClosed := ?}) -> value port_evt {</span><br><span style="color: hsl(120, 100%, 40%);">+                           if (port_evt.connClosed.connId == connId) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                   setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+                             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                                      repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+                               }</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+                     [] IPL4.receive {</span><br><span style="color: hsl(120, 100%, 40%);">+                             repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+                       }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              var PortEvent port_evt;</span><br><span style="color: hsl(120, 100%, 40%);">+               IPL4.receive(PortEvent:{connOpened := ?}) -> value port_evt {</span><br><span style="color: hsl(120, 100%, 40%);">+                      var ConnectionOpenedEvent conn := port_evt.connOpened;</span><br><span style="color: hsl(120, 100%, 40%);">+                        f_send_ipa_data(conn.remName, conn.remPort, conn.connId, ipa_msg_id_req_hdr);</span><br><span style="color: hsl(120, 100%, 40%);">+                 f_send_chopped_ipa_msg(conn.remName, conn.remPort, conn.connId, ipa_msg_id_req_payload);</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           /* Expect an encoded IPA ID RESP message from the client. */</span><br><span style="color: hsl(120, 100%, 40%);">+          alt {</span><br><span style="color: hsl(120, 100%, 40%);">+                 [] IPL4.receive(t_recvfrom(?)) -> value asp_rx {</span><br><span style="color: hsl(120, 100%, 40%);">+                           log("received IPA message from ", asp_rx.remName, " port ", asp_rx.remPort, ": ",</span><br><span style="color: hsl(120, 100%, 40%);">+                                   asp_rx.msg);</span><br><span style="color: hsl(120, 100%, 40%);">+                              if (lengthof(asp_rx.msg) > 4</span><br><span style="color: hsl(120, 100%, 40%);">+                                   and asp_rx.msg[2] == 'FE'O /* PROTO_IPACCESS */</span><br><span style="color: hsl(120, 100%, 40%);">+                               and asp_rx.msg[3] == '05'O /* ID RESP */) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                       setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+                             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                                      repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+                               }</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+                     [] IPL4.receive {</span><br><span style="color: hsl(120, 100%, 40%);">+                             repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+                       }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*</span><br><span>  * Public functions.</span><br><span>  * Test suites may call these functions to create an IPA_CT component and run a test to completion.</span><br><span>@@ -169,4 +225,10 @@</span><br><span>   vc_IPA_Testing.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+function f_run_TC_chopped_ipa_payload(charstring ipa_ip, integer ipa_tcp_port, IPA_ConnectionMode conmode) {</span><br><span style="color: hsl(120, 100%, 40%);">+   var IPA_Testing.IPA_CT vc_IPA_Testing := IPA_Testing.IPA_CT.create;</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_IPA_Testing.start(IPA_Testing.f_TC_chopped_ipa_payload(ipa_ip, ipa_tcp_port, conmode));</span><br><span style="color: hsl(120, 100%, 40%);">+    vc_IPA_Testing.done;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11357">change 11357</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/11357"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: If75cb90841bb25619b414f0cabe008a2428a9fdf </div>
<div style="display:none"> Gerrit-Change-Number: 11357 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Stefan Sperling <ssperling@sysmocom.de> </div>