|
|
|
@ -8,6 +8,7 @@ use NGCP::Rtpengine::AutoTest; |
|
|
|
use Test::More; |
|
|
|
use NGCP::Rtpclient::ICE; |
|
|
|
use POSIX; |
|
|
|
use JSON; |
|
|
|
|
|
|
|
|
|
|
|
$ENV{RTPENGINE_EXTENDED_TESTS} or exit(); # timing sensitive tests |
|
|
|
@ -33,7 +34,7 @@ my $pcma_5 = "\xad\xac\xa2\xa6\xbd\x9a\x06\x3f\x26\x2d\x2c\x2d\x26\x3f\x06\x9a\x |
|
|
|
|
|
|
|
|
|
|
|
my ($sock_a, $sock_b, $sock_c, $sock_d, $port_a, $port_b, $ssrc, $ssrc_b, $resp, |
|
|
|
$sock_ax, $sock_bx, $port_ax, $port_bx, |
|
|
|
$sock_ax, $sock_bx, $port_ax, $port_bx, @cids, |
|
|
|
$srtp_ctx_a, $srtp_ctx_b, $srtp_ctx_a_rev, $srtp_ctx_b_rev, $ufrag_a, $ufrag_b, |
|
|
|
@ret1, @ret2, @ret3, @ret4, $srtp_key_a, $srtp_key_b, $ts, $seq, $has_recv); |
|
|
|
|
|
|
|
@ -43,6 +44,8 @@ my ($sock_a, $sock_b, $sock_c, $sock_d, $port_a, $port_b, $ssrc, $ssrc_b, $resp, |
|
|
|
|
|
|
|
($sock_a) = new_call([qw(198.51.100.1 2040)]); |
|
|
|
|
|
|
|
push(@cids, cid()); |
|
|
|
|
|
|
|
offer('media playback, opus', { ICE => 'remove', replace => ['origin'] }, <<SDP); |
|
|
|
v=0 |
|
|
|
o=- 1545997027 1 IN IP4 198.51.100.1 |
|
|
|
@ -80,6 +83,8 @@ rcv($sock_a, -1, rtpm(96, $seq + 4, $ts + 960 * 4, $ssrc, "\x0c\x88\x02\x70\xe2\ |
|
|
|
|
|
|
|
($sock_a) = new_call([qw(198.51.100.1 2020)]); |
|
|
|
|
|
|
|
push(@cids, cid()); |
|
|
|
|
|
|
|
offer('media playback, offer only', { ICE => 'remove', replace => ['origin'] }, <<SDP); |
|
|
|
v=0 |
|
|
|
o=- 1545997027 1 IN IP4 198.51.100.1 |
|
|
|
@ -114,6 +119,8 @@ rcv($sock_a, -1, rtpm(8, $seq + 4, $ts + 160 * 4, $ssrc, $pcma_5)); |
|
|
|
|
|
|
|
($sock_a, $sock_b) = new_call([qw(198.51.100.1 2020)], [qw(198.51.100.3 2022)]); |
|
|
|
|
|
|
|
push(@cids, cid()); |
|
|
|
|
|
|
|
offer('media playback, side A', { ICE => 'remove', replace => ['origin'] }, <<SDP); |
|
|
|
v=0 |
|
|
|
o=- 1545997027 1 IN IP4 198.51.100.1 |
|
|
|
@ -169,6 +176,8 @@ rcv($sock_a, -1, rtpm(8, $seq + 4, $ts + 160 * 4, $ssrc, $pcma_5)); |
|
|
|
|
|
|
|
($sock_a, $sock_b) = new_call([qw(198.51.100.1 2100)], [qw(198.51.100.3 2102)]); |
|
|
|
|
|
|
|
push(@cids, cid()); |
|
|
|
|
|
|
|
offer('media playback, side A, repeat', { ICE => 'remove', replace => ['origin'] }, <<SDP); |
|
|
|
v=0 |
|
|
|
o=- 1545997027 1 IN IP4 198.51.100.1 |
|
|
|
@ -230,6 +239,8 @@ rcv($sock_a, -1, rtpm(8, $seq + 9, $ts + 160 * 9, $ssrc, $pcma_5)); |
|
|
|
|
|
|
|
($sock_a, $sock_b) = new_call([qw(198.51.100.1 2030)], [qw(198.51.100.3 2032)]); |
|
|
|
|
|
|
|
push(@cids, cid()); |
|
|
|
|
|
|
|
offer('media playback, side B', { ICE => 'remove', replace => ['origin'] }, <<SDP); |
|
|
|
v=0 |
|
|
|
o=- 1545997027 1 IN IP4 198.51.100.1 |
|
|
|
@ -302,6 +313,8 @@ rcv($sock_b, -1, rtpm(8, $seq + 9, $ts + 160 * 4, $ssrc, $pcma_5)); |
|
|
|
|
|
|
|
($sock_a, $sock_b) = new_call([qw(198.51.100.9 2020)], [qw(198.51.100.9 2022)]); |
|
|
|
|
|
|
|
push(@cids, cid()); |
|
|
|
|
|
|
|
offer('media playback, side A, select by label', { ICE => 'remove', replace => ['origin'], |
|
|
|
label => 'foobar' }, <<SDP); |
|
|
|
v=0 |
|
|
|
@ -359,6 +372,8 @@ rcv($sock_a, -1, rtpm(8, $seq + 4, $ts + 160 * 4, $ssrc, $pcma_5)); |
|
|
|
|
|
|
|
($sock_a, $sock_b) = new_call([qw(198.51.100.9 2030)], [qw(198.51.100.9 2032)]); |
|
|
|
|
|
|
|
push(@cids, cid()); |
|
|
|
|
|
|
|
offer('media playback, side B, select by label', { ICE => 'remove', replace => ['origin'], |
|
|
|
label => 'quux' }, <<SDP); |
|
|
|
v=0 |
|
|
|
@ -416,6 +431,8 @@ rcv($sock_b, -1, rtpm(8, $seq + 4, $ts + 160 * 4, $ssrc, $pcma_5)); |
|
|
|
|
|
|
|
($sock_a, $sock_b) = new_call([qw(198.51.100.1 2050)], [qw(198.51.100.3 2052)]); |
|
|
|
|
|
|
|
push(@cids, cid()); |
|
|
|
|
|
|
|
offer('media playback, SRTP', { ICE => 'remove', replace => ['origin'], DTLS => 'off' }, <<SDP); |
|
|
|
v=0 |
|
|
|
o=- 1545997027 1 IN IP4 198.51.100.1 |
|
|
|
@ -495,6 +512,8 @@ srtp_rcv($sock_a, -1, rtpm(8, $seq + 4, $ts + 160 * 4, $ssrc, $pcma_5), $srtp_ct |
|
|
|
|
|
|
|
($sock_a, $sock_b) = new_call([qw(198.51.100.1 3020)], [qw(198.51.100.3 3022)]); |
|
|
|
|
|
|
|
push(@cids, cid()); |
|
|
|
|
|
|
|
offer('media playback after delete', { ICE => 'remove', replace => ['origin'], |
|
|
|
'rtcp-mux' => ['demux'], 'via-branch' => 'xxxx', flags => ['strict-source', 'record-call'], |
|
|
|
'transport-protocol' => 'RTP/AVP' }, <<SDP); |
|
|
|
@ -653,6 +672,25 @@ rcv($sock_b, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); |
|
|
|
rcv($sock_b, -1, rtpm(8, $seq + 4, $ts + 160 * 4, $ssrc, $pcma_5)); |
|
|
|
|
|
|
|
|
|
|
|
$resp = rtpe_req('statistics', 'check stats', { }); |
|
|
|
is $resp->{statistics}{currentstatistics}{mediacache}, 0, "no media cache"; |
|
|
|
is $resp->{statistics}{currentstatistics}{playercache}, 966, "player cache size"; |
|
|
|
|
|
|
|
$resp = rtpe_req('cli', 'clear cache', { body => 'media evict players' }); |
|
|
|
|
|
|
|
$resp = rtpe_req('statistics', 'check stats again', { }); |
|
|
|
is $resp->{statistics}{currentstatistics}{mediacache}, 0, "no media cache"; |
|
|
|
is $resp->{statistics}{currentstatistics}{playercache}, 966, "references held by calls"; |
|
|
|
|
|
|
|
|
|
|
|
for my $cid (@cids) { |
|
|
|
rtpe_req("delete", "delete all calls", { 'call-id' => $cid, 'delete delay' => 0 }); |
|
|
|
} |
|
|
|
|
|
|
|
$resp = rtpe_req('statistics', 'check stats again', { }); |
|
|
|
is $resp->{statistics}{currentstatistics}{mediacache}, 0, "no media cache"; |
|
|
|
is $resp->{statistics}{currentstatistics}{playercache}, 0, "no more player cache"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#done_testing;NGCP::Rtpengine::AutoTest::terminate('f00');exit; |
|
|
|
|