diff --git a/t/Makefile b/t/Makefile index a5cef6491..f8d4c1226 100644 --- a/t/Makefile +++ b/t/Makefile @@ -111,7 +111,7 @@ include ../lib/common.Makefile daemon-tests-templ-def daemon-tests-templ-def-offer daemon-tests-t38 daemon-tests-evs-dtx \ daemon-tests-transform daemon-tests-http daemon-tests-heuristic daemon-tests-asymmetric \ daemon-tests-dtx-no-shift daemon-tests-rtcp daemon-tests-redis-subscribe daemon-tests-rtp-ext \ - daemon-tests-bundle + daemon-tests-bundle daemon-tests-dtls TESTS= test-bitstr aes-crypt aead-aes-crypt test-const_str_hash.strhash ifeq ($(with_transcoding),yes) @@ -158,7 +158,7 @@ daemon-tests: daemon-tests-main daemon-tests-jb daemon-tests-pubsub daemon-tests daemon-tests-sdp-orig-replacements daemon-tests-moh daemon-tests-evs-dtx daemon-tests-transform \ daemon-tests-transcode-config daemon-tests-codec-prefs daemon-tests-http daemon-tests-heuristic \ daemon-tests-asymmetric daemon-tests-rtcp daemon-tests-redis-subscribe daemon-tests-rtp-ext \ - daemon-tests-bundle + daemon-tests-bundle daemon-tests-dtls daemon-test-deps: tests-preload.so $(MAKE) -C ../daemon @@ -290,6 +290,9 @@ daemon-tests-rtp-ext: daemon-test-deps daemon-tests-bundle: daemon-test-deps ./auto-test-helper "$@" perl -I../perl auto-daemon-tests-bundle.pl +daemon-tests-dtls: daemon-test-deps + ./auto-test-helper "$@" perl -I../perl auto-daemon-tests-dtls.pl + test-bitstr: test-bitstr.o test-mix-buffer: test-mix-buffer.o $(COMMONOBJS) mix_buffer.o ssrc.o rtp.o crypto.o helpers.o \ diff --git a/t/auto-daemon-tests-dtls.pl b/t/auto-daemon-tests-dtls.pl new file mode 100644 index 000000000..ca1ae1284 --- /dev/null +++ b/t/auto-daemon-tests-dtls.pl @@ -0,0 +1,181 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use NGCP::Rtpengine::Test; +use NGCP::Rtpclient::SRTP; +use NGCP::Rtpengine::AutoTest; +use Test::More; +use Test2::Tools::Compare qw(); +use NGCP::Rtpclient::ICE; +use NGCP::Rtpclient::DTLS; +use POSIX; +use IO::Multiplex; + +$ENV{RTPENGINE_EXTENDED_TESTS} or exit(); + + +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 ($sock_a, $sock_b, $sock_c, $sock_d, $port_a, $port_b, $ssrc, $ssrc_b, $resp, + $sock_ax, $sock_bx, $port_ax, $port_bx, $t_a, $t_b, $t_c, $t_d, + $sock_cx, $sock_dx, $port_c, $port_d, $port_cx, $port_dx, + $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, $tmp_blob, + $pwd_a, $pwd_b, $packet, $tid, $dtls, $mux, $fingerprint, @components); + + + + + +my $dtls_func = sub { + my ($tag, $data) = @_; + my $component = $components[$tag]; + my ($sock, $port) = @$component; + snd($sock, $port, $data); +}; + +sub mux_input { + my ($self, $mux, $fh, $input) = @_; + my $peer = $mux->udp_peer($fh); + $dtls->input($fh, $input, $peer); + + for my $comp (@$dtls) { + $comp->{_connected} or return; + } + + $mux->endloop(); +}; + +($sock_a, $sock_ax, $sock_b, $sock_bx) = new_call([qw(198.51.100.35 3008)], [qw(198.51.100.35 3009)], + [qw(198.51.100.35 3010)], [qw(198.51.100.35 3011)]); + +$mux = IO::Multiplex->new(); +$mux->set_callback_object(__PACKAGE__); +$mux->add($sock_a); +$mux->add($sock_ax); +$dtls = NGCP::Rtpclient::DTLS::Group->new($mux, $dtls_func, [[$sock_a], [$sock_ax]]); +$fingerprint = $dtls->[0]->fingerprint(); + +($port_a, $port_ax) = offer('DTLS bkw', { 'transport-protocol' => 'RTP/AVP' }, <accept(); + +$mux->loop(); + +rtpe_req('delete', 'delete'); + + + +($sock_a, $sock_ax, $sock_b, $sock_bx) = new_call([qw(198.51.100.35 3000)], [qw(198.51.100.35 3001)], + [qw(198.51.100.35 3002)], [qw(198.51.100.35 3003)]); + +$mux = IO::Multiplex->new(); +$mux->set_callback_object(__PACKAGE__); +$mux->add($sock_b); +$mux->add($sock_bx); +$dtls = NGCP::Rtpclient::DTLS::Group->new($mux, $dtls_func, [[$sock_b], [$sock_bx]]); +$fingerprint = $dtls->[0]->fingerprint(); + +($port_a, $port_ax) = offer('DTLS fwd', { 'transport-protocol' => 'RTP/SAVP', SDES => 'off' }, <connect(); + +$mux->loop(); + +rtpe_req('delete', 'delete'); + + + +#done_testing;NGCP::Rtpengine::AutoTest::terminate('f00');exit; +done_testing();