You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
rtpengine/t/auto-daemon-tests-transform.pl

191 lines
4.4 KiB

#!/usr/bin/perl
use strict;
use warnings;
use NGCP::Rtpengine::Test;
use NGCP::Rtpclient::SRTP;
use NGCP::Rtpengine::AutoTest;
use Test::More;
use POSIX;
use Data::Dumper;
autotest_start(qw(--config-file=none -t -1 -i 203.0.113.1 -i 2001:db8:4321::1
-n 2223 -f -L 7 -E --log-level-internals=7))
or die;
my ($resp, $sock_a, $sock_b, $port_a, $seq, $ts, $ssrc);
($sock_a) = new_call([qw(198.51.100.14 6150)]);
$resp = rtpe_req('transform', 'simple transform',
{
media => [
{
type => 'audio',
codec => [
{
input => {
codec => 'PCMA',
'payload type' => 8,
'clock rate' => 8000,
channels => 1,
},
output => {
codec => 'PCMU',
'payload type' => 0,
'clock rate' => 8000,
channels => 1,
},
},
],
destination => {
family => 'IP4',
address => '198.51.100.14',
port => 6150,
},
},
],
}
);
is($resp->{media}[0]{address}, '203.0.113.1', 'address ok');
$port_a = $resp->{media}[0]{port};
snd($sock_a, $port_a, rtp(8, 2000, 4000, 0x3456, "\x00" x 160));
($seq, $ts, $ssrc) = rcv($sock_a, $port_a, rtpm(0, -1, -1, -1, "\x29" x 160));
snd($sock_a, $port_a, rtp(8, 2001, 4160, 0x3456, "\x00" x 160));
rcv($sock_a, $port_a, rtpm(0, $seq + 1, $ts + 160, $ssrc, "\x29" x 160));
rtpe_req('delete', 'delete call');
($sock_a) = new_call([qw(198.51.100.14 6152)]);
$resp = rtpe_req('transform', 'no-op transform',
{
media => [
{
type => 'audio',
codec => [
{
input => {
codec => 'G722',
'payload type' => 9,
'clock rate' => 8000,
channels => 1,
},
output => {
codec => 'G722',
'payload type' => 9,
'clock rate' => 8000,
channels => 1,
},
},
],
destination => {
family => 'IP4',
address => '198.51.100.14',
port => 6152,
},
},
],
}
);
is($resp->{media}[0]{address}, '203.0.113.1', 'address ok');
$port_a = $resp->{media}[0]{port};
snd($sock_a, $port_a, rtp(9, 2000, 4000, 0x3456, "\x00" x 160));
rcv($sock_a, $port_a, rtpm(9, 2000, 4000, 0x3456, "\x00" x 160));
snd($sock_a, $port_a, rtp(9, 2001, 4160, 0x3456, "\x00" x 160));
rcv($sock_a, $port_a, rtpm(9, 2001, 4160, 0x3456, "\x00" x 160));
rtpe_req('delete', 'delete call');
($sock_a) = new_call([qw(198.51.100.14 6154)]);
$resp = rtpe_req('transform', 'multiple transforms',
{
media => [
{
type => 'audio',
codec => [
{
input => {
codec => 'G722',
'payload type' => 9,
'clock rate' => 8000,
channels => 1,
},
output => {
codec => 'G722',
'payload type' => 9,
'clock rate' => 8000,
channels => 1,
},
},
{
input => {
codec => 'PCMA',
'payload type' => 8,
'clock rate' => 8000,
channels => 1,
},
output => {
codec => 'PCMU',
'payload type' => 0,
'clock rate' => 8000,
channels => 1,
},
},
{
input => {
codec => 'PCMU',
'payload type' => 0,
'clock rate' => 8000,
channels => 1,
},
output => {
codec => 'PCMA',
'payload type' => 8,
'clock rate' => 8000,
channels => 1,
},
},
],
destination => {
family => 'IP4',
address => '198.51.100.14',
port => 6154,
},
},
],
}
);
is($resp->{media}[0]{address}, '203.0.113.1', 'address ok');
$port_a = $resp->{media}[0]{port};
snd($sock_a, $port_a, rtp(9, 2000, 4000, 0x3456, "\x00" x 160));
($seq, $ts, $ssrc) = rcv($sock_a, $port_a, rtpm(9, -1, -1, -1, "\x00" x 160));
snd($sock_a, $port_a, rtp(9, 2001, 4160, 0x3456, "\x00" x 160));
($seq, $ts, $ssrc) = rcv($sock_a, $port_a, rtpm(9, $seq + 1, $ts + 160, $ssrc, "\x00" x 160));
snd($sock_a, $port_a, rtp(8, 2000, 4000, 0x346a, "\x00" x 160));
($seq, $ts, $ssrc) = rcv($sock_a, $port_a, rtpm(0, -1, -1, -1, "\x29" x 160));
snd($sock_a, $port_a, rtp(8, 2001, 4160, 0x346a, "\x00" x 160));
($seq, $ts, $ssrc) = rcv($sock_a, $port_a, rtpm(0, $seq + 1, $ts + 160, $ssrc, "\x29" x 160));
snd($sock_a, $port_a, rtp(0, 2000, 4000, 0x347e, "\x00" x 160));
($seq, $ts, $ssrc) = rcv($sock_a, $port_a, rtpm(8, -1, -1, -1, "\x2a" x 160));
snd($sock_a, $port_a, rtp(0, 2001, 4160, 0x347e, "\x00" x 160));
($seq, $ts, $ssrc) = rcv($sock_a, $port_a, rtpm(8, $seq + 1, $ts + 160, $ssrc, "\x2a" x 160));
rtpe_req('delete', 'delete call');
done_testing();
#done_testing;NGCP::Rtpengine::AutoTest::terminate('f00');exit;