<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>