diff options
author | Harald Welte <laforge@gnumonks.org> | 2017-11-18 18:26:49 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2017-11-18 18:27:01 +0100 |
commit | ba62c8c95b9cbfd220be0f6c5ced6e6a837f0f41 (patch) | |
tree | 58fda6257688a0c89486332d40286d717a8ab03b /mgw/MGCP_Test.ttcn | |
parent | f07c286a5524d5abbaae2dca9a9a3421119c574b (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.ttcn | 129 |
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 */ |