This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Pau Espin Pedrol gerrit-no-reply at lists.osmocom.orgPau Espin Pedrol has uploaded this change for review. ( https://gerrit.osmocom.org/14046
Change subject: mgw: Add 2 CRCX tests with Osmux enabled
......................................................................
mgw: Add 2 CRCX tests with Osmux enabled
This patch requires "osmux on" to be set in osmo-mgw's VTY cfg file.
Depends: osmo-mgw.git Iac073f1db46569b46eddeaecc9934a2986bd50f1
Change-Id: Ibb58b2a4e08d6f30cfe347c217794d0d1310954f
---
M library/MGCP_Templates.ttcn
M library/MGCP_Types.ttcn
M mgw/MGCP_Test.ttcn
M mgw/expected-results.xml
4 files changed, 105 insertions(+), 3 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/46/14046/1
diff --git a/library/MGCP_Templates.ttcn b/library/MGCP_Templates.ttcn
index 506100f..9e6f5b7 100644
--- a/library/MGCP_Templates.ttcn
+++ b/library/MGCP_Templates.ttcn
@@ -49,6 +49,12 @@
val := hex2str(cid)
};
+ /* Osmocom extension: X-Osmux: {*,%u} */
+ template MgcpParameter ts_MgcpParOsmuxCID(MgcpOsmuxCID osmux_cid) := {
+ code := "X-OSMUX",
+ val := f_mgcp_osmux_cid_encode(osmux_cid)
+ };
+
/* osmo-bsc_mgcp implements L/C/M/X only, osmo-mgw adds 'I' */
/* SDP: osmo-bsc_mgcp implements Tx of v,o,s,c,t,m,a */
@@ -89,6 +95,18 @@
sdp := sdp
}
+ template MgcpCommand ts_CRCX_osmux(MgcpTransId trans_id, charstring ep, MgcpConnectionMode mode, MgcpCallId call_id, MgcpOsmuxCID osmux_cid, template SDP_Message sdp := omit) := {
+ line := t_MgcpCmdLine("CRCX", trans_id, ep),
+ params := {
+ t_MgcpParConnMode(mode),
+ ts_MgcpParCallId(call_id),
+ //t_MgcpParReqId(omit),
+ t_MgcpParLocConnOpt("p:20, a:AMR"),
+ ts_MgcpParOsmuxCID(osmux_cid)
+ },
+ sdp := sdp
+ }
+
template MgcpCommand tr_CRCX(template MgcpEndpoint ep := ?) := {
line := t_MgcpCmdLine("CRCX", ?, ep),
params := *,
@@ -105,6 +123,16 @@
sdp := ?
}
+ template MgcpResponse tr_CRCX_ACK_osmux := {
+ line := {
+ code := "200",
+ trans_id := ?,
+ string := "OK"
+ },
+ params:= { { "I", ? }, {"X-OSMUX", ?}, *},
+ sdp := ?
+ }
+
template MgcpResponse ts_CRCX_ACK(MgcpTransId trans_id, MgcpConnectionId conn_id, template SDP_Message sdp := omit) := {
line := {
code := "200",
@@ -286,6 +314,24 @@
}
}
+ /* -1 is wildcard, positive is translated as string */
+ function f_mgcp_osmux_cid_encode(MgcpOsmuxCID osmux_cid) return charstring {
+ if (osmux_cid < -1) {
+ return "ERROR-wrong-negative-value";
+ }
+ if (osmux_cid == -1) {
+ return "*";
+ }
+ return int2str(osmux_cid);
+ }
+
+ function f_mgcp_osmux_cid_decode(charstring osmux_cid) return MgcpOsmuxCID {
+ if (osmux_cid == "*") {
+ return -1;
+ }
+ return str2int(osmux_cid);
+ }
+
function f_mgcp_contains_par(MgcpMessage msg, MgcpInfoCode code) return boolean {
var MgcpParameterList pars;
if (ischosen(msg.command)) {
@@ -352,6 +398,10 @@
return str2hex(f_MgcpCmd_extract_par(cmd, "I"));
}
+ function f_MgcpCmd_extract_osmux_cid(MgcpCommand cmd) return MgcpOsmuxCID {
+ return f_mgcp_osmux_cid_decode(f_MgcpCmd_extract_par(cmd, "X-OSMUX"));
+ }
+
function f_mgcp_alloc_tid() return MgcpTransId {
return int2str(float2int(rnd()*2147483647.0));
diff --git a/library/MGCP_Types.ttcn b/library/MGCP_Types.ttcn
index 8e11c7a..b56734c 100644
--- a/library/MGCP_Types.ttcn
+++ b/library/MGCP_Types.ttcn
@@ -24,13 +24,14 @@
type hexstring MgcpCallId length(1..32); /* 3.2.2.2 */
type hexstring MgcpConnectionId length(1..32); /* 3.2.2.5 */
type hexstring MgcpRequestId length(1..32); /* 3.2.2.18 */
+ type integer MgcpOsmuxCID (-1 .. 255);
type charstring MgcpResponseCode (pattern "\d#(3)");
type charstring MgcpInfoCode ("B", "C", "I", "N", "X", "L", "M", "R",
"S", "D", "O", "P", "E", "Z", "Q", "T",
"RC", "LC", "A", "ES", "RM", "RD", "PL",
- "MD", "X-Osmo-CP") with {
- variant "TEXT_CODING(,convert=upper_case,'([BCINXLMRSDOPEZQTA])|(RC)|(LC)|(ES)|(RM)|(RD)|(PL)|(MD)|(X-Osmo-CP)',case_insensitive)"
+ "MD", "X-OSMO-CP", "X-OSMUX") with {
+ variant "TEXT_CODING(,convert=upper_case,'([BCINXLMRSDOPEZQTA])|(RC)|(LC)|(ES)|(RM)|(RD)|(PL)|(MD)|(X-OSMO-CP)|(X-OSMUX)',case_insensitive)"
};
/* 3.2.2.6 */
diff --git a/mgw/MGCP_Test.ttcn b/mgw/MGCP_Test.ttcn
index 8cb2404..fa103c4 100644
--- a/mgw/MGCP_Test.ttcn
+++ b/mgw/MGCP_Test.ttcn
@@ -437,6 +437,40 @@
}
}
+ function f_crcx_osmux(charstring ep_prefix, MgcpOsmuxCID osmux_cid) runs on dummy_CT {
+ var MgcpEndpoint ep := ep_prefix & "2@" & c_mgw_domain;
+ var template MgcpCommand cmd;
+ var MgcpResponse resp;
+ var MgcpCallId call_id := '1234'H;
+ var charstring cid_response;
+
+ f_init(ep);
+
+ /* create the connection on the MGW */
+ cmd := ts_CRCX_osmux(get_next_trans_id(), ep, "recvonly", call_id, osmux_cid);
+ resp := mgcp_transceive_mgw(cmd, tr_CRCX_ACK_osmux);
+ extract_conn_id(resp);
+
+ /* extract Osmux CID we got assigned by the MGW */
+ var MgcpMessage resp_msg := {
+ response := resp
+ }
+
+ if (f_mgcp_find_param(resp_msg, "X-OSMUX", cid_response) == false) {
+ setverdict(fail, "No Osmux CID in MGCP response", resp);
+ mtc.stop;
+ }
+
+ /* Make sure response is no wildcard */
+ if (f_mgcp_osmux_cid_decode(cid_response) == -1) {
+ setverdict(fail, "Osmux CID in MGCP response contains unexpected wildcard");
+ mtc.stop;
+ }
+
+ /* clean-up */
+ f_dlcx_ok(ep, call_id);
+ }
+
/* test valid CRCX without SDP */
testcase TC_crcx() runs on dummy_CT {
f_crcx(c_mgw_ep_rtpbridge);
@@ -791,6 +825,18 @@
setverdict(pass);
}
+ /* test valid CRCX without SDP */
+ testcase TC_crcx_osmux_wildcard() runs on dummy_CT {
+ f_crcx_osmux(c_mgw_ep_rtpbridge, -1);
+ setverdict(pass);
+ }
+
+ /* test valid CRCX without SDP */
+ testcase TC_crcx_osmux_fixed() runs on dummy_CT {
+ f_crcx_osmux(c_mgw_ep_rtpbridge, 2);
+ setverdict(pass);
+ }
+
function f_crcx_and_dlcx_ep_callid_connid(MgcpEndpoint ep, MgcpCallId call_id) runs on dummy_CT {
var template MgcpCommand cmd;
var MgcpResponse resp;
@@ -1482,6 +1528,9 @@
execute(TC_crcx_and_dlcx_ep_callid_connid_inval());
execute(TC_crcx_and_dlcx_retrans());
+ execute(TC_crcx_osmux_wildcard());
+ execute(TC_crcx_osmux_fixed());
+
execute(TC_crcx_dlcx_30ep());
execute(TC_rtpem_selftest());
diff --git a/mgw/expected-results.xml b/mgw/expected-results.xml
index 5c520c5..f968859 100644
--- a/mgw/expected-results.xml
+++ b/mgw/expected-results.xml
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<testsuite name='Titan' tests='35' failures='0' errors='0' skipped='1' inconc='0' time='MASKED'>
+<testsuite name='Titan' tests='37' failures='0' errors='0' skipped='1' inconc='0' time='MASKED'>
<testcase classname='MGCP_Test' name='TC_selftest' time='MASKED'>
<skipped>no verdict</skipped>
</testcase>
@@ -26,6 +26,8 @@
<testcase classname='MGCP_Test' name='TC_crcx_and_dlcx_ep_callid_inval' time='MASKED'/>
<testcase classname='MGCP_Test' name='TC_crcx_and_dlcx_ep_callid_connid_inval' time='MASKED'/>
<testcase classname='MGCP_Test' name='TC_crcx_and_dlcx_retrans' time='MASKED'/>
+ <testcase classname='MGCP_Test' name='TC_crcx_osmux_wildcard' time='MASKED'/>
+ <testcase classname='MGCP_Test' name='TC_crcx_osmux_fixed' time='MASKED'/>
<testcase classname='MGCP_Test' name='TC_crcx_dlcx_30ep' time='MASKED'/>
<testcase classname='MGCP_Test' name='TC_rtpem_selftest' time='MASKED'/>
<testcase classname='MGCP_Test' name='TC_one_crcx_receive_only_rtp' time='MASKED'/>
--
To view, visit https://gerrit.osmocom.org/14046
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibb58b2a4e08d6f30cfe347c217794d0d1310954f
Gerrit-Change-Number: 14046
Gerrit-PatchSet: 1
Gerrit-Owner: Pau Espin Pedrol <pespin at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20190514/b273ffe1/attachment.htm>