osmith has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38777?usp=email )
Change subject: mgw: fix RTP packets received while RX disabled ......................................................................
mgw: fix RTP packets received while RX disabled
Fix the race condition causing tests to abort with: 1 RTP packets received while RX was disabled
Fixes: OS#3849 Change-Id: Ieaf5440a693448cdeeaac7f47e6110cb480bff5f --- M mgw/MGCP_Test.ttcn 1 file changed, 27 insertions(+), 14 deletions(-)
Approvals: osmith: Looks good to me, approved Jenkins Builder: Verified
diff --git a/mgw/MGCP_Test.ttcn b/mgw/MGCP_Test.ttcn index d341022..84e5943 100644 --- a/mgw/MGCP_Test.ttcn +++ b/mgw/MGCP_Test.ttcn @@ -656,13 +656,14 @@ }
/* Delete an existing RTP flow */ - function f_flow_delete(RTPEM_CTRL_PT pt, template MgcpEndpoint ep := omit, template MgcpCallId call_id := omit) + function f_flow_delete(RTPEM_CTRL_PT pt, template MgcpEndpoint ep := omit, template MgcpCallId call_id := omit, + RtpemMode mode := RTPEM_MODE_NONE) runs on dummy_CT { var template MgcpCommand cmd; var MgcpResponse resp;
/* Switch off RTP flow */ - f_rtpem_mode(pt, RTPEM_MODE_NONE); + f_rtpem_mode(pt, mode);
/* Delete connection on MGW (if needed) */ if (isvalue(call_id) and isvalue(ep)) { @@ -1672,8 +1673,9 @@ f_osmuxem_stats_err_check(stats_osmux);
/* Tear down */ - f_flow_delete(RTPEM[0]); + f_flow_delete(RTPEM[0], mode := RTPEM_MODE_RXONLY); f_flow_delete_osmux(OsmuxEM, ep, call_id); + f_rtpem_mode(RTPEM[0], RTPEM_MODE_NONE); /* OS#3849 */ setverdict(pass); }
@@ -2009,8 +2011,9 @@
f_sleep(1.0);
- f_flow_delete(RTPEM[1]); + f_flow_delete(RTPEM[1], mode := RTPEM_MODE_RXONLY); f_flow_delete(RTPEM[0], ep, call_id); + f_rtpem_mode(RTPEM[1], RTPEM_MODE_NONE); /* OS#3849 */
stats[0] := f_rtpem_stats_get(RTPEM[0]); stats[1] := f_rtpem_stats_get(RTPEM[1]); @@ -2146,8 +2149,9 @@ f_rtpem_stats_err_check(stats[1]);
/* Tear down */ - f_flow_delete(RTPEM[0]); + f_flow_delete(RTPEM[0], mode := RTPEM_MODE_RXONLY); f_flow_delete(RTPEM[1], ep, call_id); + f_rtpem_mode(RTPEM[0], RTPEM_MODE_NONE); /* OS#3849 */ setverdict(pass); }
@@ -2210,8 +2214,9 @@
/* Stop transmitting packets and tear down the flows */ f_rtpem_mode(RTPEM[2], RTPEM_MODE_NONE); - f_flow_delete(RTPEM[0]); + f_flow_delete(RTPEM[0], mode := RTPEM_MODE_RXONLY); f_flow_delete(RTPEM[1], ep, call_id); + f_rtpem_mode(RTPEM[0], RTPEM_MODE_NONE); /* OS#3849 */
stats[0] := f_rtpem_stats_get(RTPEM[0]); stats[1] := f_rtpem_stats_get(RTPEM[1]); @@ -2273,8 +2278,9 @@ f_sleep(1.0);
/* Terminate call */ - f_flow_delete(RTPEM[0]); + f_flow_delete(RTPEM[0], mode := RTPEM_MODE_RXONLY); f_flow_delete(RTPEM[1], ep, call_id); + f_rtpem_mode(RTPEM[0], RTPEM_MODE_NONE); /* OS#3849 */
stats[0] := f_rtpem_stats_get(RTPEM[0]); stats[1] := f_rtpem_stats_get(RTPEM[1]); @@ -2317,8 +2323,9 @@ f_rtpem_mode(RTPEM[0], RTPEM_MODE_BIDIR); f_rtpem_mode(RTPEM[1], RTPEM_MODE_BIDIR); f_sleep(1.0); - f_flow_delete(RTPEM[0]); + f_flow_delete(RTPEM[0], mode := RTPEM_MODE_RXONLY); f_flow_delete(RTPEM[1], ep, call_id); + f_rtpem_mode(RTPEM[0], RTPEM_MODE_NONE); /* OS#3849 */
stats[0] := f_rtpem_stats_get(RTPEM[0]); stats[1] := f_rtpem_stats_get(RTPEM[1]); @@ -2404,8 +2411,9 @@ f_rtpem_mode(RTPEM[0], RTPEM_MODE_NONE);
/* Remove RTP flows and check statistics */ - f_flow_delete(RTPEM[0]); + f_flow_delete(RTPEM[0], mode := RTPEM_MODE_RXONLY); f_flow_delete(RTPEM[1], ep, call_id); + f_rtpem_mode(RTPEM[0], RTPEM_MODE_NONE); /* OS#3849 */
/* Check for errors */ stats[0] := f_rtpem_stats_get(RTPEM[0]); @@ -2496,8 +2504,9 @@ f_rtpem_mode(RTPEM[0], RTPEM_MODE_NONE);
/* Remove RTP flows and check statistics */ - f_flow_delete(RTPEM[0]); + f_flow_delete(RTPEM[0], mode := RTPEM_MODE_RXONLY); f_flow_delete(RTPEM[1], ep, call_id); + f_rtpem_mode(RTPEM[0], RTPEM_MODE_NONE); /* OS#3849 */
/* Check for errors */ stats[0] := f_rtpem_stats_get(RTPEM[0]); @@ -2958,8 +2967,9 @@
/* Tear down */ if (tear_down_rtp) { - f_flow_delete(RTPEM[0]); + f_flow_delete(RTPEM[0], mode := RTPEM_MODE_RXONLY); f_flow_delete(RTPEM[1], ep, call_id); + f_rtpem_mode(RTPEM[0], RTPEM_MODE_NONE); /* OS#3849 */ } setverdict(pass); } @@ -3077,8 +3087,9 @@ }
/* Tear down */ - f_flow_delete(RTPEM[0]); + f_flow_delete(RTPEM[0], mode := RTPEM_MODE_RXONLY); f_flow_delete(RTPEM[1], ep, call_id); + f_rtpem_mode(RTPEM[0], RTPEM_MODE_NONE); /* OS#3849 */ setverdict(pass); } testcase TC_two_crcx_mdcx_and_iuup_mdcx_recvonly() runs on dummy_CT { @@ -3215,8 +3226,9 @@ }
/* Tear down */ - f_flow_delete(RTPEM[0]); + f_flow_delete(RTPEM[0], mode := RTPEM_MODE_RXONLY); f_flow_delete(RTPEM[1], ep, call_id); + f_rtpem_mode(RTPEM[0], RTPEM_MODE_NONE); /* OS#3849 */ setverdict(pass); } testcase TC_two_crcx_mdcx_and_iuup_rtp_mdcx_recvonly() runs on dummy_CT { @@ -3317,8 +3329,9 @@ }
/* Tear down */ - f_flow_delete(RTPEM[0]); + f_flow_delete(RTPEM[0], mode := RTPEM_MODE_RXONLY); f_flow_delete(RTPEM[1], ep, call_id); + f_rtpem_mode(RTPEM[0], RTPEM_MODE_NONE); /* OS#3849 */ setverdict(pass); } testcase TC_two_crcx_mdcx_and_iuup_rtp_mdcx_to_iuup() runs on dummy_CT {