Browse Source

MT#61625 add "transform" tests

Change-Id: I6976929522b0098729fd8b317bf7c46e791407ef
pull/1918/head
Richard Fuchs 10 months ago
parent
commit
9a5069f53c
3 changed files with 382 additions and 1 deletions
  1. +5
    -1
      t/Makefile
  2. +343
    -0
      t/auto-daemon-tests-transcode-config.pl
  3. +34
    -0
      t/test4.conf

+ 5
- 1
t/Makefile View File

@ -149,7 +149,8 @@ daemon-tests: daemon-tests-main daemon-tests-jb daemon-tests-pubsub daemon-tests
daemon-tests-mos-fullband daemon-tests-config-file \
daemon-tests-templ-def daemon-tests-templ-def-offer \
daemon-tests-sdp-manipulations daemon-tests-sdes-manipulations \
daemon-tests-sdp-orig-replacements daemon-tests-moh daemon-tests-evs-dtx daemon-tests-transform
daemon-tests-sdp-orig-replacements daemon-tests-moh daemon-tests-evs-dtx daemon-tests-transform \
daemon-tests-transcode-config
daemon-test-deps: tests-preload.so
$(MAKE) -C ../daemon
@ -172,6 +173,9 @@ daemon-tests-pubsub: daemon-test-deps
daemon-tests-transform: daemon-test-deps
./auto-test-helper "$@" perl -I../perl auto-daemon-tests-transform.pl
daemon-tests-transcode-config: daemon-test-deps
./auto-test-helper "$@" perl -I../perl auto-daemon-tests-transcode-config.pl
daemon-tests-stats: daemon-test-deps
./auto-test-helper "$@" perl -I../perl auto-daemon-tests-stats.pl


+ 343
- 0
t/auto-daemon-tests-transcode-config.pl View File

@ -0,0 +1,343 @@
#!/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;
use Bencode;
use Socket;
autotest_start(qw(--config-file=test4.conf))
or die;
my ($resp, $sock_sig, $sock_a, $sock_b, $sock_tc,
$port_a, $port_b, $port_tc, $cookie, $addr_sig, $port_sig, $seq, $ts, $ssrc);
$sock_sig = IO::Socket::IP->new(Type => &SOCK_DGRAM, Proto => 'udp', LocalHost => '203.0.113.42', LocalPort => 3334);
($sock_a, $sock_b) = new_call([qw(198.51.100.14 3000)], [qw(198.51.100.14 3002)]);
($port_a) = offer('control passthrough', { }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.14
s=tester
c=IN IP4 198.51.100.14
t=0 0
m=audio 3000 RTP/AVP 8
a=sendrecv
----------------------------
v=0
o=- 1545997027 1 IN IP4 198.51.100.14
s=tester
t=0 0
m=audio PORT RTP/AVP 8
c=IN IP4 203.0.113.1
a=rtpmap:8 PCMA/8000
a=sendrecv
a=rtcp:PORT
SDP
($port_b) = answer('control passthrough', { }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.14
s=tester
c=IN IP4 198.51.100.14
t=0 0
m=audio 3002 RTP/AVP 8
a=sendrecv
----------------------------
v=0
o=- 1545997027 1 IN IP4 198.51.100.14
s=tester
t=0 0
m=audio PORT RTP/AVP 8
c=IN IP4 203.0.113.1
a=rtpmap:8 PCMA/8000
a=sendrecv
a=rtcp:PORT
SDP
snd($sock_a, $port_b, rtp(0, 1000, 3000, 0x1234567, "\x00" x 160));
rcv($sock_b, $port_a, rtpm(0, 1000, 3000, 0x1234567, "\x00" x 160));
snd($sock_b, $port_a, rtp(0, 2000, 4000, 0x7654321, "\x00" x 160));
rcv($sock_a, $port_b, rtpm(0, 2000, 4000, 0x7654321, "\x00" x 160));
snd($sock_a, $port_b, rtp(8, 5000, 9000, 0x1234567, "\x00" x 160));
rcv($sock_b, $port_a, rtpm(8, 5000, 9000, 0x1234567, "\x00" x 160));
snd($sock_b, $port_a, rtp(8, 6000, 10000, 0x7654321, "\x00" x 160));
rcv($sock_a, $port_b, rtpm(8, 6000, 10000, 0x7654321, "\x00" x 160));
rcv_no($sock_sig);
($sock_a, $sock_b) = new_call([qw(198.51.100.14 3004)], [qw(198.51.100.14 3006)]);
($port_a) = offer('control transcode', { codec => { transcode => [ 'G722' ] } }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.14
s=tester
c=IN IP4 198.51.100.14
t=0 0
m=audio 3004 RTP/AVP 8
a=sendrecv
----------------------------
v=0
o=- 1545997027 1 IN IP4 198.51.100.14
s=tester
t=0 0
m=audio PORT RTP/AVP 8 9
c=IN IP4 203.0.113.1
a=rtpmap:8 PCMA/8000
a=rtpmap:9 G722/8000
a=sendrecv
a=rtcp:PORT
SDP
($port_b) = answer('control transcode', { }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.14
s=tester
c=IN IP4 198.51.100.14
t=0 0
m=audio 3006 RTP/AVP 9
a=sendrecv
----------------------------
v=0
o=- 1545997027 1 IN IP4 198.51.100.14
s=tester
t=0 0
m=audio PORT RTP/AVP 8
c=IN IP4 203.0.113.1
a=rtpmap:8 PCMA/8000
a=sendrecv
a=rtcp:PORT
SDP
snd($sock_a, $port_b, rtp(8, 1000, 3000, 0x1234567, "\x00" x 160));
Time::HiRes::usleep(20000);
snd($sock_a, $port_b, rtp(8, 1001, 3160, 0x1234567, "\x00" x 160));
rcv($sock_b, $port_a, rtpm(9, 1000, 3000, 0x1234567, "\x34\x8a\x20\x85\x21\x84\x04\x8a\x0e\x91\xd2\xd3\xd5\xd6\xd6\xd7\xd8\xd8\xd7\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd9\xd9\xd9\xd9\xda\xda\xda\xda\xdb\xdb\xdb\xdc\xd9\xda\xda\xda\xda\xda\xdb\xdc\xd9\xd9\xda\xda\xd9\xd9\xdb\xdb\xdb\xdb\xdb\xdb\xdb\xdb\xda\xda\xda\xda\xd9\xd9\xd9\xd9\xd9\xd8\xd8\xd8\xd8\xd7\xdd\xd8\xd8\xd8\xd7\xdd\xd6\xdc\xd8\xd8\xd8\xd5\xdb\xda\xda\xdb\xdc\xd7\xda\xd9\xd8\xd7\xde\xdb\xda\xd9\xd8\xd8\xd5\xdb\xdd\xd8\xd8\xd8\xd7\xdc\xd5\xdb\xdf\xda\xda\xd7\xdf\xd8\xd5\xdd\xda\xdb\xd8\xd8\xd9\xd6\xdf\xdb\xdc\xd5\xdb\xde\xd5\xda\xdd\xda\xd9\xd8\xd9\xd8\xd6\xff\xd8\xd7\xfe\xd5\xda\xd8\xda\xdf\xd8\xda\xda\xda\xd9\xd9\xdc\xd8"));
snd($sock_b, $port_a, rtp(9, 2000, 4000, 0x7654321, "\x34\x8a\x20\x85\x21\x84\x04\x8a\x0e\x91\xd2\xd3\xd5\xd6\xd6\xd7\xd8\xd8\xd7\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd9\xd9\xd9\xd9\xda\xda\xda\xda\xdb\xdb\xdb\xdc\xd9\xda\xda\xda\xda\xda\xdb\xdc\xd9\xd9\xda\xda\xd9\xd9\xdb\xdb\xdb\xdb\xdb\xdb\xdb\xdb\xda\xda\xda\xda\xd9\xd9\xd9\xd9\xd9\xd8\xd8\xd8\xd8\xd7\xdd\xd8\xd8\xd8\xd7\xdd\xd6\xdc\xd8\xd8\xd8\xd5\xdb\xda\xda\xdb\xdc\xd7\xda\xd9\xd8\xd7\xde\xdb\xda\xd9\xd8\xd8\xd5\xdb\xdd\xd8\xd8\xd8\xd7\xdc\xd5\xdb\xdf\xda\xda\xd7\xdf\xd8\xd5\xdd\xda\xdb\xd8\xd8\xd9\xd6\xdf\xdb\xdc\xd5\xdb\xde\xd5\xda\xdd\xda\xd9\xd8\xd9\xd8\xd6\xff\xd8\xd7\xfe\xd5\xda\xd8\xda\xdf\xd8\xda\xda\xda\xd9\xd9\xdc\xd8"));
Time::HiRes::usleep(20000);
snd($sock_b, $port_a, rtp(9, 2001, 4160, 0x7654321, "\x34\x8a\x20\x85\x21\x84\x04\x8a\x0e\x91\xd2\xd3\xd5\xd6\xd6\xd7\xd8\xd8\xd7\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd9\xd9\xd9\xd9\xda\xda\xda\xda\xdb\xdb\xdb\xdc\xd9\xda\xda\xda\xda\xda\xdb\xdc\xd9\xd9\xda\xda\xd9\xd9\xdb\xdb\xdb\xdb\xdb\xdb\xdb\xdb\xda\xda\xda\xda\xd9\xd9\xd9\xd9\xd9\xd8\xd8\xd8\xd8\xd7\xdd\xd8\xd8\xd8\xd7\xdd\xd6\xdc\xd8\xd8\xd8\xd5\xdb\xda\xda\xdb\xdc\xd7\xda\xd9\xd8\xd7\xde\xdb\xda\xd9\xd8\xd8\xd5\xdb\xdd\xd8\xd8\xd8\xd7\xdc\xd5\xdb\xdf\xda\xda\xd7\xdf\xd8\xd5\xdd\xda\xdb\xd8\xd8\xd9\xd6\xdf\xdb\xdc\xd5\xdb\xde\xd5\xda\xdd\xda\xd9\xd8\xd9\xd8\xd6\xff\xd8\xd7\xfe\xd5\xda\xd8\xda\xdf\xd8\xda\xda\xda\xd9\xd9\xdc\xd8"));
rcv($sock_a, $port_b, rtpm(8, 2000, 4000, 0x7654321, "\x54\xd5\x54\xd4\x57\xd6\x51\xd0\x50\xd7\xc5\x17\x04\x03\x00\x01\x00\x00\x01\x01\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"));
rcv_no($sock_sig);
($sock_a, $sock_b, $sock_tc) = new_call(
[qw(198.51.100.14 3008)], [qw(198.51.100.14 3010)],
[qw(198.51.100.18 3012)]
);
($port_a) = offer('G.711 transform', { codec => { transcode => ['PCMU'] } }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.14
s=tester
c=IN IP4 198.51.100.14
t=0 0
m=audio 3008 RTP/AVP 8
a=sendrecv
----------------------------
v=0
o=- 1545997027 1 IN IP4 198.51.100.14
s=tester
t=0 0
m=audio PORT RTP/AVP 8 0
c=IN IP4 203.0.113.1
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=sendrecv
a=rtcp:PORT
SDP
rcv_no($sock_sig);
$NGCP::Rtpengine::req_cb = sub {
($port_sig, $addr_sig, $cookie, $port_tc) = rcv($sock_sig, -1, qr/^(.{16}) d7:command9:transform5:mediald4:type5:audio5:codecld5:inputd5:codec4:PCMA12:payload typei8e10:clock ratei8000e8:channelsi1e6:format0:7:options0:e6:outputd5:codec4:PCMU12:payload typei0e10:clock ratei8000e8:channelsi1e6:format0:7:options0:eee11:destinationd6:family3:IP47:address11:203.0.113.14:porti(\d{5})eeee8:instance12:.{12}e$/);
snd($sock_sig, $port_sig, $cookie . ' ' . Bencode::bencode( {
result => 'ok',
'call-id' => 'foobar',
'from-tag' => 'yolo',
'media' => [
{
id => 'id',
family => 'IP4',
address => '198.51.100.18',
port => 3012,
},
],
} ), $addr_sig );
};
($port_b) = answer('G.711 transform', { }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.14
s=tester
c=IN IP4 198.51.100.14
t=0 0
m=audio 3010 RTP/AVP 0
a=sendrecv
----------------------------
v=0
o=- 1545997027 1 IN IP4 198.51.100.14
s=tester
t=0 0
m=audio PORT RTP/AVP 8
c=IN IP4 203.0.113.1
a=rtpmap:8 PCMA/8000
a=sendrecv
a=rtcp:PORT
SDP
$NGCP::Rtpengine::req_cb = undef;
rcv_no($sock_sig);
snd($sock_a, $port_b, rtp(0, 1000, 3000, 0x1234567, "\x00" x 160));
rcv($sock_b, $port_a, rtpm(0, 1000, 3000, 0x1234567, "\x00" x 160));
rcv_no($sock_a);
rcv_no($sock_tc);
rcv_no($sock_sig);
snd($sock_a, $port_b, rtp(8, 1001, 3160, 0x7894561, "\x00" x 160));
rcv_no($sock_b);
rcv_no($sock_a);
rcv($sock_tc, -1, rtpm(8, 1001, 3160, 0x7894561, "\x00" x 160));
rcv_no($sock_sig);
snd($sock_tc, $port_tc, rtp(0, 1001, 3160, 0x7894561, "\x22" x 160));
rcv($sock_b, $port_a, rtpm(0, 1001, 3160, 0x7894561, "\x22" x 160));
rcv_no($sock_a);
rcv_no($sock_tc);
rcv_no($sock_sig);
snd($sock_b, $port_a, rtp(0, 1300, 3300, 0x1234693, "\x00" x 160));
rcv($sock_a, $port_b, rtpm(8, 1300, 3300, 0x1234693, "\x2a" x 160));
rcv_no($sock_a);
rcv_no($sock_tc);
rcv_no($sock_sig);
$NGCP::Rtpengine::req_cb = sub {
($port_sig, $addr_sig, $cookie) = rcv($sock_sig, -1, qr/^(.{16}) d7:command6:delete7:call-id6:foobar8:from-tag4:yolo12:delete delayi0ee$/);
snd($sock_sig, $port_sig, $cookie . ' ' . Bencode::bencode( { result => 'ok', } ), $addr_sig );
};
rtpe_req('delete', 'delete call', { 'delete-delay' => 0 } );
$NGCP::Rtpengine::req_cb = undef;
($sock_a, $sock_b, $sock_tc) = new_call(
[qw(198.51.100.14 3040)], [qw(198.51.100.14 3042)],
[qw(198.51.100.18 3044)]
);
$NGCP::Rtpengine::req_cb = sub {
($port_sig, $addr_sig, $cookie, $port_tc) = rcv($sock_sig, -1, qr/^(.{16}) d7:command9:transform5:mediald4:type5:audio5:codecld5:inputd5:codec4:PCMA12:payload typei8e10:clock ratei8000e8:channelsi1e6:format0:7:options0:e6:outputd5:codec4:PCMU12:payload typei0e10:clock ratei8000e8:channelsi1e6:format0:7:options0:eee11:destinationd6:family3:IP47:address11:203.0.113.14:porti(\d{5})eeee8:instance12:.{12}e$/);
snd($sock_sig, $port_sig, $cookie . ' ' . Bencode::bencode( {
result => 'ok',
'call-id' => 'foobar',
'from-tag' => 'yolo',
'media' => [
{
id => 'id',
family => 'IP4',
address => '198.51.100.18',
port => 3044,
},
],
} ), $addr_sig );
};
($port_a) = offer('G.711 transform reverse', { codec => { transcode => ['PCMA'] } }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.14
s=tester
c=IN IP4 198.51.100.14
t=0 0
m=audio 3040 RTP/AVP 0
a=sendrecv
----------------------------
v=0
o=- 1545997027 1 IN IP4 198.51.100.14
s=tester
t=0 0
m=audio PORT RTP/AVP 0 8
c=IN IP4 203.0.113.1
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=sendrecv
a=rtcp:PORT
SDP
$NGCP::Rtpengine::req_cb = undef;
rcv_no($sock_sig);
($port_b) = answer('G.711 transform reverse', { }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.14
s=tester
c=IN IP4 198.51.100.14
t=0 0
m=audio 3042 RTP/AVP 8
a=sendrecv
----------------------------
v=0
o=- 1545997027 1 IN IP4 198.51.100.14
s=tester
t=0 0
m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1
a=rtpmap:0 PCMU/8000
a=sendrecv
a=rtcp:PORT
SDP
rcv_no($sock_sig);
snd($sock_a, $port_b, rtp(8, 1000, 3000, 0x1234567, "\x00" x 160));
rcv($sock_b, $port_a, rtpm(8, 1000, 3000, 0x1234567, "\x00" x 160));
rcv_no($sock_a);
rcv_no($sock_tc);
rcv_no($sock_sig);
snd($sock_a, $port_b, rtp(0, 1201, 3360, 0x7894629, "\x00" x 160));
rcv($sock_b, $port_a, rtpm(8, 1201, 3360, 0x7894629, "\x2a" x 160));
rcv_no($sock_a);
rcv_no($sock_tc);
rcv_no($sock_sig);
snd($sock_b, $port_a, rtp(8, 1500, 3500, 0x123475b, "\x00" x 160));
rcv_no($sock_a);
rcv_no($sock_b);
rcv($sock_tc, -1, rtpm(8, 1500, 3500, 0x123475b, "\x00" x 160));
rcv_no($sock_sig);
snd($sock_tc, $port_tc, rtp(0, 1500, 3500, 0x789475b, "\x22" x 160));
rcv($sock_a, $port_b, rtpm(0, 1500, 3500, 0x789475b, "\x22" x 160));
rcv_no($sock_b);
rcv_no($sock_tc);
rcv_no($sock_sig);
done_testing();
#done_testing;NGCP::Rtpengine::AutoTest::terminate('f00');exit;

+ 34
- 0
t/test4.conf View File

@ -0,0 +1,34 @@
[rtpengine]
table = -1
interfaces-config = interface
listen-ng = 2223
foreground = true
log-level = 7
log-stderr = true
transcode-config = tc
[interface-default-4]
name = default
address = 203.0.113.1
[interface-default-6]
name = default
address = 2001:db8:4321::1
[interface-rev-4]
name = rev
address = 2001:db8:4321::1
[interface-rev-6]
name = rev
address = 203.0.113.1
[tc-PCMA-PCMU]
source = PCMA
destination = PCMU
transform = 203.0.113.42:3334
[tc-PCMU-G722]
source = PCMU
destination = G722
transform = 203.0.113.42:3334

Loading…
Cancel
Save