<p>Stefan Sperling has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/11241">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add a TTCN3 test suite for IPA protocol testing<br><br>This new test suite allows us to test IPA code in libosmocore<br>and libosmo-netif. Currently only one test is implemented,<br>which sends a chopped IPA ping message and expects to receive<br>an IPA pong.<br><br>The system under test is any IPA speaker on any TCP port.<br><br>The default test configuration uses TCP port 3003 (RSL) and<br>works with osmo-bsc and the osmo-bsc-minimal.cfg sample<br>configuration file shipped with osmo-bsc.<br><br>Change-Id: I246a405414e36a44dc1e308692faab8bf04da0e6<br>Related: OS#2010<br>---<br>M Makefile<br>A ipa/IPA_Tests.cfg<br>A ipa/IPA_Tests.ttcn<br>A ipa/gen_links.sh<br>A ipa/regen_makefile.sh<br>5 files changed, 165 insertions(+), 1 deletion(-)<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/41/11241/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/Makefile b/Makefile</span><br><span>index 074e151..0255b0a 100644</span><br><span>--- a/Makefile</span><br><span>+++ b/Makefile</span><br><span>@@ -1,4 +1,4 @@</span><br><span style="color: hsl(0, 100%, 40%);">-SUBDIRS=bsc bsc-nat bts ggsn_tests hlr lapdm mgw msc pcu sccp selftest sgsn sip sysinfo</span><br><span style="color: hsl(120, 100%, 40%);">+SUBDIRS=bsc bsc-nat bts ggsn_tests hlr ipa lapdm mgw msc pcu sccp selftest sgsn sip sysinfo</span><br><span> </span><br><span> NPROC=$(shell nproc 2>/dev/null)</span><br><span> ifeq ($(NPROC),)</span><br><span>diff --git a/ipa/IPA_Tests.cfg b/ipa/IPA_Tests.cfg</span><br><span>new file mode 100644</span><br><span>index 0000000..dba8762</span><br><span>--- /dev/null</span><br><span>+++ b/ipa/IPA_Tests.cfg</span><br><span>@@ -0,0 +1,18 @@</span><br><span style="color: hsl(120, 100%, 40%);">+[ORDERED_INCLUDE]</span><br><span style="color: hsl(120, 100%, 40%);">+# Common configuration, shared between test suites</span><br><span style="color: hsl(120, 100%, 40%);">+"../Common.cfg"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Local configuration below</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[LOGGING]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[TESTPORT_PARAMETERS]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[MODULE_PARAMETERS]</span><br><span style="color: hsl(120, 100%, 40%);">+IPA_Tests.mp_ipa_ip := "127.0.0.1"</span><br><span style="color: hsl(120, 100%, 40%);">+IPA_Tests.mp_ipa_tcp_port := 3003</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[MAIN_CONTROLLER]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[EXECUTE]</span><br><span style="color: hsl(120, 100%, 40%);">+IPA_Tests.control</span><br><span>diff --git a/ipa/IPA_Tests.ttcn b/ipa/IPA_Tests.ttcn</span><br><span>new file mode 100644</span><br><span>index 0000000..ca69687</span><br><span>--- /dev/null</span><br><span>+++ b/ipa/IPA_Tests.ttcn</span><br><span>@@ -0,0 +1,114 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/* (C) 2018 by sysmocom s.f.m.c. GmbH <info@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * Author: Stefan Sperling <ssperling@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * All Rights Reserved</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Released under the terms of GNU General Public License, Version 2 or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</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%);">+module IPA_Tests {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from IPL4asp_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from IPL4asp_PortType all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from IPA_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from Osmocom_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+modulepar {</span><br><span style="color: hsl(120, 100%, 40%);">+ charstring mp_ipa_ip := "127.0.0.1";</span><br><span style="color: hsl(120, 100%, 40%);">+        integer mp_ipa_tcp_port := 3003;</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%);">+/* Encoded IPA messages (network byte order) */</span><br><span style="color: hsl(120, 100%, 40%);">+const octetstring ipa_msg_ping := '0001FE00'O;</span><br><span style="color: hsl(120, 100%, 40%);">+const octetstring ipa_msg_pong := '0001FE01'O;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type component system_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  port IPL4asp_PT IPL4;</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%);">+type component IPA_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   port IPL4asp_PT IPL4;</span><br><span style="color: hsl(120, 100%, 40%);">+ timer g_Tguard;</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%);">+private altstep as_Tguard() runs on IPA_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    [] g_Tguard.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+         setverdict(fail, "Tguard timeout");</span><br><span style="color: hsl(120, 100%, 40%);">+         mtc.stop;</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%);">+function f_send_ipa_data(ConnectionId connId, octetstring data) runs on IPA_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      var IPL4asp_Types.Result res;</span><br><span style="color: hsl(120, 100%, 40%);">+ var ASP_SendTo asp := {</span><br><span style="color: hsl(120, 100%, 40%);">+               connId := connId,</span><br><span style="color: hsl(120, 100%, 40%);">+             remName := mp_ipa_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+         remPort := mp_ipa_tcp_port,</span><br><span style="color: hsl(120, 100%, 40%);">+           proto := {tcp := {}},</span><br><span style="color: hsl(120, 100%, 40%);">+         msg := data</span><br><span style="color: hsl(120, 100%, 40%);">+   };</span><br><span style="color: hsl(120, 100%, 40%);">+    IPL4.send(asp);</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%);">+template ASP_RecvFrom t_recvfrom(octetstring msg) := {</span><br><span style="color: hsl(120, 100%, 40%);">+  connId := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+  remName := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ remPort := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ locName := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ locPort := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ proto := {tcp := {}},</span><br><span style="color: hsl(120, 100%, 40%);">+ userData := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+        msg := msg</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%);">+function f_init() runs on IPA_CT return ConnectionId {</span><br><span style="color: hsl(120, 100%, 40%);">+       var IPL4asp_Types.Result res;</span><br><span style="color: hsl(120, 100%, 40%);">+ var ConnectionId connId;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Create an IPA connection over TCP. */</span><br><span style="color: hsl(120, 100%, 40%);">+      map(self:IPL4, system:IPL4);</span><br><span style="color: hsl(120, 100%, 40%);">+  res := IPL4asp_PortType.f_IPL4_connect(IPL4, mp_ipa_ip, mp_ipa_tcp_port, "", -1, 0, { tcp:={} });</span><br><span style="color: hsl(120, 100%, 40%);">+   if (not ispresent(res.connId)) {</span><br><span style="color: hsl(120, 100%, 40%);">+              setverdict(fail, "Could not connect IPA socket to ", mp_ipa_ip, " port ",</span><br><span style="color: hsl(120, 100%, 40%);">+                    mp_ipa_tcp_port, "; check your configuration");</span><br><span style="color: hsl(120, 100%, 40%);">+          mtc.stop;</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%);">+   /* Activate guard timer. */</span><br><span style="color: hsl(120, 100%, 40%);">+   g_Tguard.start(60.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ activate(as_Tguard());</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      return res.connId;</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%);">+testcase TC_chopped_ipa_ping() runs on IPA_CT system system_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     const float delay := 6.0;</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();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Send a ping message one byte at a time, waiting for TCP buffer to flush between each byte. */</span><br><span style="color: hsl(120, 100%, 40%);">+      for (var integer i := 0; i < lengthof(ipa_msg_ping); i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+         log("sending byte ", ipa_msg_ping[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+              f_send_ipa_data(connId, ipa_msg_ping[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+             f_sleep(delay);</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 a pong response. */</span><br><span style="color: hsl(120, 100%, 40%);">+ alt {</span><br><span style="color: hsl(120, 100%, 40%);">+         [] IPL4.receive(t_recvfrom(ipa_msg_pong)) -> value asp_rx {</span><br><span style="color: hsl(120, 100%, 40%);">+                        log("received pong: ", asp_rx.msg);</span><br><span style="color: hsl(120, 100%, 40%);">+                 setverdict(pass);</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%);">+control {</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_chopped_ipa_ping() );</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>diff --git a/ipa/gen_links.sh b/ipa/gen_links.sh</span><br><span>new file mode 100755</span><br><span>index 0000000..5479d9a</span><br><span>--- /dev/null</span><br><span>+++ b/ipa/gen_links.sh</span><br><span>@@ -0,0 +1,25 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#!/bin/bash</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+BASEDIR=../deps</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+. ../gen_links.sh.inc</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DIR=$BASEDIR/titan.TestPorts.IPL4asp/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="IPL4asp_Functions.ttcn  IPL4asp_PT.cc  IPL4asp_PT.hh IPL4asp_PortType.ttcn  IPL4asp_Types.ttcn  IPL4asp_discovery.cc IPL4asp_protocol_L234.hh"</span><br><span style="color: hsl(120, 100%, 40%);">+gen_links $DIR $FILES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DIR=$BASEDIR/titan.TestPorts.Common_Components.Socket-API/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="Socket_API_Definitions.ttcn"</span><br><span style="color: hsl(120, 100%, 40%);">+gen_links $DIR $FILES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DIR=$BASEDIR/titan.Libraries.TCCUsefulFunctions/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="TCCInterface_Functions.ttcn TCCConversion_Functions.ttcn TCCConversion.cc TCCInterface.cc TCCInterface_ip.h"</span><br><span style="color: hsl(120, 100%, 40%);">+FILES+=" TCCEncoding_Functions.ttcn TCCEncoding.cc " # GSM 7-bit coding</span><br><span style="color: hsl(120, 100%, 40%);">+gen_links $DIR $FILES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DIR=../library</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="General_Types.ttcn Osmocom_Types.ttcn IPA_Types.ttcn"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+gen_links $DIR $FILES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ignore_pp_results</span><br><span>diff --git a/ipa/regen_makefile.sh b/ipa/regen_makefile.sh</span><br><span>new file mode 100755</span><br><span>index 0000000..8770145</span><br><span>--- /dev/null</span><br><span>+++ b/ipa/regen_makefile.sh</span><br><span>@@ -0,0 +1,7 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#!/bin/sh</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="*.ttcn TCCConversion.cc TCCInterface.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCEncoding.cc "</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+export CPPFLAGS_TTCN3=""</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+../regen-makefile.sh IPA_Tests.ttcn $FILES</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11241">change 11241</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/11241"/><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: I246a405414e36a44dc1e308692faab8bf04da0e6 </div>
<div style="display:none"> Gerrit-Change-Number: 11241 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Stefan Sperling <ssperling@sysmocom.de> </div>