aboutsummaryrefslogtreecommitdiffstats
path: root/mgw/MGCP_Test.ttcn
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2017-11-18 18:26:49 +0100
committerHarald Welte <laforge@gnumonks.org>2017-11-18 18:27:01 +0100
commitba62c8c95b9cbfd220be0f6c5ced6e6a837f0f41 (patch)
tree58fda6257688a0c89486332d40286d717a8ab03b /mgw/MGCP_Test.ttcn
parentf07c286a5524d5abbaae2dca9a9a3421119c574b (diff)
mgw: properly clean up endpoint by use of DLCX at end of each testcase
Diffstat (limited to 'mgw/MGCP_Test.ttcn')
-rw-r--r--mgw/MGCP_Test.ttcn129
1 files changed, 110 insertions, 19 deletions
diff --git a/mgw/MGCP_Test.ttcn b/mgw/MGCP_Test.ttcn
index 07086c97..21460d0a 100644
--- a/mgw/MGCP_Test.ttcn
+++ b/mgw/MGCP_Test.ttcn
@@ -334,10 +334,60 @@ module MGCP_Test {
}
}
+ function extract_conn_id(MgcpResponse resp) return MgcpConnectionId {
+ var integer i;
+ for (i := 0; i < lengthof(resp.params); i := i + 1) {
+ var MgcpParameter par := resp.params[i];
+ if (par.code == "I") {
+ return str2hex(par.val);
+ }
+ }
+ setverdict(fail);
+ return '00000000'H;
+ }
+
+ /* Send DLCX and expect OK response */
+ function f_dlcx_ok(MgcpEndpoint ep, MgcpCallId call_id,
+ template MgcpConnectionId conn_id := omit) runs on dummy_CT {
+ var template MgcpCommand cmd;
+ var MgcpResponse resp;
+ var template MgcpResponse rtmpl := {
+ line := {
+ code := "200",
+ string := "OK"
+ },
+ params := *,
+ sdp := *
+ };
+ cmd := ts_DLCX(get_next_trans_id(), ep, call_id);
+ /* FIXME: add conn_id if present */
+ resp := mgcp_transceive_mgw(cmd, rtmpl);
+ }
+
+ /* Send DLCX and accept any response */
+ function f_dlcx_ignore(MgcpEndpoint ep, MgcpCallId call_id,
+ template MgcpConnectionId conn_id := omit) runs on dummy_CT {
+ var template MgcpCommand cmd;
+ var MgcpResponse resp;
+ var template MgcpResponse rtmpl := {
+ line := {
+ code := ?,
+ string := ?
+ },
+ params := *,
+ sdp := *
+ };
+ cmd := ts_DLCX(get_next_trans_id(), ep, call_id);
+ /* FIXME: add conn_id if present */
+ resp := mgcp_transceive_mgw(cmd, rtmpl);
+ }
+
/* test valid CRCX without SDP */
testcase TC_crcx() runs on dummy_CT {
var template MgcpCommand cmd;
var MgcpResponse resp;
+ var MgcpEndpoint ep := "2@mgw";
+ var MgcpCallId call_id := '1234'H;
var template MgcpResponse rtmpl := {
line := {
code := "200",
@@ -349,8 +399,14 @@ module MGCP_Test {
f_init();
- cmd := ts_CRCX(get_next_trans_id(), "2@mgw", "sendrecv", '1234'H);
+ /* create the connection on the MGW */
+ cmd := ts_CRCX(get_next_trans_id(), ep, "recvonly", call_id);
resp := mgcp_transceive_mgw(cmd, rtmpl);
+ extract_conn_id(resp);
+
+ /* clean-up */
+ f_dlcx_ok(ep, call_id);
+
setverdict(pass);
}
@@ -358,13 +414,17 @@ module MGCP_Test {
testcase TC_crcx_unsupp_mode() runs on dummy_CT {
var template MgcpCommand cmd;
var MgcpResponse resp;
+ var MgcpEndpoint ep := "2@mgw";
+ var MgcpCallId call_id := '1233'H;
var template MgcpResponse rtmpl := tr_MgcpResp_Err("517");
f_init();
- cmd := ts_CRCX(get_next_trans_id(), "2@mgw", "netwtest", '1234'H);
+ cmd := ts_CRCX(get_next_trans_id(), ep, "netwtest", call_id);
resp := mgcp_transceive_mgw(cmd, rtmpl);
setverdict(pass);
+
+ f_dlcx_ignore(ep, call_id);
}
/* test CRCX with early bi-directional mode, expect 527 as
@@ -373,110 +433,134 @@ module MGCP_Test {
testcase TC_crcx_early_bidir_mode() runs on dummy_CT {
var template MgcpCommand cmd;
var MgcpResponse resp;
+ var MgcpEndpoint ep := "2@mgw";
+ var MgcpCallId call_id := '1232'H;
var template MgcpResponse rtmpl := tr_MgcpResp_Err("527");
f_init();
- cmd := ts_CRCX(get_next_trans_id(), "2@mgw", "sendrecv", '1234'H);
+ cmd := ts_CRCX(get_next_trans_id(), ep, "sendrecv", call_id);
resp := mgcp_transceive_mgw(cmd, rtmpl);
setverdict(pass);
+
+ f_dlcx_ignore(ep, call_id);
}
/* test CRCX with unsupported Parameters */
testcase TC_crcx_unsupp_param() runs on dummy_CT {
var template MgcpCommand cmd;
var MgcpResponse resp;
+ var MgcpEndpoint ep := "2@mgw";
+ var MgcpCallId call_id := '1231'H;
var template MgcpResponse rtmpl := tr_MgcpResp_Err("539");
f_init();
- cmd := ts_CRCX(get_next_trans_id(), "2@mgw", "recvonly", '1234'H);
+ cmd := ts_CRCX(get_next_trans_id(), ep, "recvonly", call_id);
cmd.params := {
t_MgcpParConnMode("recvonly"),
- ts_MgcpParCallId('1234'H),
+ ts_MgcpParCallId(call_id),
t_MgcpParLocConnOpt("p:20"),
/* osmo-bsc_mgcp/mgw doesn't implement notifications */
{ "N", "foobar" }
}
resp := mgcp_transceive_mgw(cmd, rtmpl);
setverdict(pass);
+
+ f_dlcx_ignore(ep, call_id);
}
/* test CRCX with missing CallId */
testcase TC_crcx_missing_callid() runs on dummy_CT {
var template MgcpCommand cmd;
var MgcpResponse resp;
+ var MgcpEndpoint ep := "2@mgw";
var template MgcpResponse rtmpl := tr_MgcpResp_Err("400");
f_init();
- cmd := ts_CRCX(get_next_trans_id(), "2@mgw", "recvonly", '1234'H);
+ cmd := ts_CRCX(get_next_trans_id(), ep, "recvonly", '1230'H);
cmd.params := {
t_MgcpParConnMode("recvonly"),
t_MgcpParLocConnOpt("p:20")
}
resp := mgcp_transceive_mgw(cmd, rtmpl);
setverdict(pass);
+
}
/* test CRCX with missing Mode */
testcase TC_crcx_missing_mode() runs on dummy_CT {
var template MgcpCommand cmd;
var MgcpResponse resp;
+ var MgcpEndpoint ep := "2@mgw";
+ var MgcpCallId call_id := '1229'H;
var template MgcpResponse rtmpl := tr_MgcpResp_Err("400");
f_init();
- cmd := ts_CRCX(get_next_trans_id(), "2@mgw", "recvonly", '1234'H);
+ cmd := ts_CRCX(get_next_trans_id(), ep, "recvonly", call_id);
cmd.params := {
- ts_MgcpParCallId('1234'H),
+ ts_MgcpParCallId(call_id),
t_MgcpParLocConnOpt("p:20")
}
resp := mgcp_transceive_mgw(cmd, rtmpl);
setverdict(pass);
+
+ f_dlcx_ignore(ep, call_id);
}
/* test CRCX with unsupported packetization interval */
testcase TC_crcx_unsupp_packet_intv() runs on dummy_CT {
var template MgcpCommand cmd;
var MgcpResponse resp;
+ var MgcpEndpoint ep := "2@mgw";
+ var MgcpCallId call_id := '1228'H;
var template MgcpResponse rtmpl := tr_MgcpResp_Err("532");
f_init();
- cmd := ts_CRCX(get_next_trans_id(), "2@mgw", "recvonly", '1234'H);
+ cmd := ts_CRCX(get_next_trans_id(), ep, "recvonly", call_id);
cmd.params := {
t_MgcpParConnMode("recvonly"),
- ts_MgcpParCallId('1234'H),
+ ts_MgcpParCallId(call_id),
t_MgcpParLocConnOpt("p:111")
}
resp := mgcp_transceive_mgw(cmd, rtmpl);
setverdict(pass);
+
+ f_dlcx_ignore(ep, call_id);
}
/* test CRCX with illegal double presence of local connection option */
testcase TC_crcx_illegal_double_lco() runs on dummy_CT {
var template MgcpCommand cmd;
var MgcpResponse resp;
+ var MgcpEndpoint ep := "2@mgw";
+ var MgcpCallId call_id := '1227'H;
var template MgcpResponse rtmpl := tr_MgcpResp_Err("524");
f_init();
- cmd := ts_CRCX(get_next_trans_id(), "2@mgw", "recvonly", '1234'H);
+ cmd := ts_CRCX(get_next_trans_id(), ep, "recvonly", call_id);
cmd.params := {
t_MgcpParConnMode("recvonly"),
- ts_MgcpParCallId('1234'H),
+ ts_MgcpParCallId(call_id),
/* p:20 is permitted only once and not twice! */
t_MgcpParLocConnOpt("p:20, a:AMR, p:20")
}
resp := mgcp_transceive_mgw(cmd, rtmpl);
setverdict(pass);
+
+ f_dlcx_ignore(ep, call_id);
}
/* test valid CRCX with valid SDP */
testcase TC_crcx_sdp() runs on dummy_CT {
var template MgcpCommand cmd;
var MgcpResponse resp;
+ var MgcpEndpoint ep := "2@mgw";
+ var MgcpCallId call_id := '1226'H;
var template MgcpResponse rtmpl := {
line := {
code := "200",
@@ -488,12 +572,14 @@ module MGCP_Test {
f_init();
- cmd := ts_CRCX(get_next_trans_id(), "2@mgw", "sendrecv", '1234'H);
+ cmd := ts_CRCX(get_next_trans_id(), ep, "sendrecv", call_id);
cmd.sdp := ts_SDP("127.0.0.1", "127.0.0.2", "23", "42", 2344, { "98" },
{ valueof(ts_SDP_rtpmap(98, "AMR/8000")),
valueof(ts_SDP_ptime(20)) });
resp := mgcp_transceive_mgw(cmd, rtmpl);
setverdict(pass);
+
+ f_dlcx_ignore(ep, call_id);
}
/* TODO: various SDP related bits */
@@ -508,6 +594,8 @@ module MGCP_Test {
testcase TC_mdcx_without_crcx() runs on dummy_CT {
var template MgcpCommand cmd;
var MgcpResponse resp;
+ var MgcpEndpoint ep := "3@mgw";
+ var MgcpCallId call_id := '1225'H;
var template MgcpResponse rtmpl := {
line := {
/* TODO: accept/enforce better error? */
@@ -520,12 +608,14 @@ module MGCP_Test {
f_init();
- cmd := ts_MDCX(get_next_trans_id(), "3@mgw", "sendrecv", '31234'H);
+ cmd := ts_MDCX(get_next_trans_id(), ep, "sendrecv", call_id);
cmd.sdp := ts_SDP("127.0.0.1", "127.0.0.2", "23", "42", 2344, { "98" },
{ valueof(ts_SDP_rtpmap(98, "AMR/8000")),
valueof(ts_SDP_ptime(20)) });
resp := mgcp_transceive_mgw(cmd, rtmpl);
setverdict(pass);
+
+ f_dlcx_ignore(ep, call_id);
}
/* DLCX without CRCX first */
@@ -553,6 +643,8 @@ module MGCP_Test {
testcase TC_crcx_and_dlcx() runs on dummy_CT {
var template MgcpCommand cmd;
var MgcpResponse resp;
+ var MgcpEndpoint ep := "5@mgw";
+ var MgcpCallId call_id := '51234'H;
var template MgcpResponse rtmpl := {
line := {
code := ("200", "250"),
@@ -564,15 +656,14 @@ module MGCP_Test {
f_init();
- cmd := ts_CRCX(get_next_trans_id(), "5@mgw", "sendrecv", '51234'H);
+ cmd := ts_CRCX(get_next_trans_id(), ep, "recvonly", call_id);
resp := mgcp_transceive_mgw(cmd, rtmpl);
- cmd := ts_DLCX(get_next_trans_id(), "5@mgw", '51234'H);
- rtmpl.sdp := omit;
- rtmpl.params := *;
- resp := mgcp_transceive_mgw(cmd, rtmpl);
+ f_dlcx_ok(ep, call_id);
setverdict(pass);
+
+ f_dlcx_ignore(ep, call_id);
}
/* TODO: DLCX of valid endpoint but invalid call-id */