From 800f098cd167923a86ac90fb2dfd19b4e0351434 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Fri, 9 Apr 2021 12:30:07 -0400 Subject: [PATCH] TT#14008 remove obsolete test scripts and add new kernel tester Change-Id: I2b4921f65deaa4473df92ac28dc4e03c592351e9 --- t/.gitignore | 1 + t/Makefile | 2 + t/test-kernel-module.c | 62 +++++ tests/blist.pl | 33 --- tests/kernel-module-test.pl | 459 ------------------------------------ tests/sdp-parse-test.c | 21 -- 6 files changed, 65 insertions(+), 513 deletions(-) create mode 100644 t/test-kernel-module.c delete mode 100755 tests/blist.pl delete mode 100755 tests/kernel-module-test.pl delete mode 100644 tests/sdp-parse-test.c diff --git a/t/.gitignore b/t/.gitignore index c43e91582..1c0fcbfc1 100644 --- a/t/.gitignore +++ b/t/.gitignore @@ -65,3 +65,4 @@ spandsp_send_fax_t38 spandsp_logging.h aead-aes-crypt tcp_listener.c +test-kernel-module diff --git a/t/Makefile b/t/Makefile index 3d5c37b1f..c1d2e9a7c 100644 --- a/t/Makefile +++ b/t/Makefile @@ -169,6 +169,8 @@ test-transcode: test-transcode.o $(COMMONOBJS) codeclib.o resample.o codec.o ssr test-payload-tracker: test-payload-tracker.o $(COMMONOBJS) ssrc.o aux.o auxlib.o rtp.o crypto.o codeclib.o \ resample.o dtmflib.o +test-kernel-module: test-kernel-module.o $(COMMONOBJS) kernel.o + test-const_str_hash.strhash: test-const_str_hash.strhash.o $(COMMONOBJS) PRELOAD_CFLAGS += -D_GNU_SOURCE -std=c99 diff --git a/t/test-kernel-module.c b/t/test-kernel-module.c new file mode 100644 index 000000000..826832dfa --- /dev/null +++ b/t/test-kernel-module.c @@ -0,0 +1,62 @@ +#include +#include "kernel.h" +#include "../kernel-module/xt_RTPENGINE.h" + +int main(void) { + int ret; + + ret = kernel_setup_table(0); + assert(ret == 0); + + struct rtpengine_target_info reti; + + reti = (struct rtpengine_target_info) { + .local = { + .family = AF_INET, + .u.ipv4 = 0x7f000001, + .port = 4444, + }, + .expected_src = { + .family = AF_INET, + .u.ipv4 = 0x7f000001, + .port = 5555, + }, + .src_mismatch = MSM_IGNORE, + .src_addr = { + .family = AF_INET, + .u.ipv4 = 0x7f000001, + .port = 6666, + }, + .dst_addr = { + .family = AF_INET, + .u.ipv4 = 0x7f000001, + .port = 7777, + }, + .decrypt = { + .cipher = REC_NULL, + .hmac = REH_NULL, + }, + .encrypt = { + .cipher = REC_AEAD_AES_GCM_256, + .hmac = REH_NULL, + .master_key_len = 32, + .master_salt_len = 12, + .session_key_len = 32, + .session_salt_len = 12, + .master_key = { + 0xb8, 0x9a, 0x55, 0xee, 0xd9, 0xb6, 0x6f, 0xca, 0x76, 0xd3, 0x2a, 0x7e, + 0x49, 0xfb, 0x8e, 0xa7, 0xff, 0xa7, 0xa9, 0xcd, 0x46, 0x42, 0x93, 0xf2, + 0xd6, 0x23, 0x2c, 0x65, 0x77, 0x06, 0xdc, 0x71 + }, + .master_salt = { + 0xc5, 0xd5, 0x69, 0x14, 0x90, 0x6a, 0x15, 0xfc, 0x52, 0x7b, 0x0a, 0xdb + }, + }, + .rtp = 1, + }; + + ret = kernel_add_stream(&reti); + assert(ret == 0); + + return 0; +} diff --git a/tests/blist.pl b/tests/blist.pl deleted file mode 100755 index a5f1ad1ab..000000000 --- a/tests/blist.pl +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/perl - -use strict; -use warnings; -use Socket; -use Socket6; - -my $t = $ARGV[0] || "0"; - -my $format = 'SS ia16SS ia16SS ia16SS CCCC LLLLLL'; -my $len = length(pack($format, (0) x 100)); - -open(my $fh, "<", "/proc/rtpengine/$t/blist") or die; -my $buf; -while (sysread($fh, $buf, $len)) { - my @buf = unpack($format, $buf); - for (2,6,10) { - if ($buf[$_] == AF_INET) { - $buf[$_ + 1] = inet_ntoa($buf[$_ + 1]); - } - elsif ($buf[$_] == AF_INET6) { - $buf[$_ + 1] = inet_ntop(AF_INET6, $buf[$_ + 1]); - } - elsif ($buf[$_] == 0) { - $buf[$_ + 1] = '---'; - } - } - for (18, 20, 22) { - $buf[$_] += $buf[$_ + 1] * 2**32; - } - printf("%5u %15s:%-5u -> %15s:%-5u (-> %15s:%-5u) [%u] [%llu %llu %llu]\n", @buf[0,3,4,7,8,11,12,14,18,20,22]); -} -close($fh); diff --git a/tests/kernel-module-test.pl b/tests/kernel-module-test.pl deleted file mode 100755 index 8c38842c7..000000000 --- a/tests/kernel-module-test.pl +++ /dev/null @@ -1,459 +0,0 @@ -#!/usr/bin/perl - -use strict; -use warnings; -use Socket; -use Socket6; - -my %cmds = (noop => 1, add => 2, delete => 3, update => 4, add_call => 5, del_call => 6, add_stream => 7, del_stream => 8, packet => 9); -my %ciphers = ('null' => 1, 'aes-cm' => 2, 'aes-f8' => 3); -my %hmacs = ('null' => 1, 'hmac-sha1' => 2); -STDOUT->autoflush(1); - -open(my $fh, '+>', '/proc/rtpengine/0/control') or die; -$fh->autoflush(1); - -sub re_address { - my ($fam, $addr, $port) = @_; - - $fam //= ''; - $addr //= ''; - $port //= 0; - - if ($fam eq 'inet' || $fam eq 'inet4') { - return pack('V a4 a12 v v', 2, inet_aton($addr), '', $port, 0); - } - if ($fam eq 'inet6') { - return pack('V a16 v v', 10, inet_pton(AF_INET6, $addr), $port, 0); - } - if ($fam eq '') { - return pack('V a16 v v', 0, '', 0, 0); - } - - die; -} -sub re_srtp { - my ($h) = @_; - my %opts = %{$h}; - - # Explicitly initialize the hash entries. - $opts{$_} //= q{} foreach (qw(master_key master_salt mki)); - $opts{$_} //= 0 foreach (qw(last_index auth_tag_len mki_len)); - - return pack('VV a16 a16 a256 Q VV', $ciphers{$opts{cipher}}, $hmacs{$opts{hmac}}, - @opts{qw(master_key master_salt mki last_index auth_tag_len mki_len)}); -} -sub rtpengine_message { - my ($cmd, %args) = @_; - - my $ret = ''; - - # amd64 alignment - $ret .= pack('VV', $cmds{$cmd}, 0); - #print(length($ret) . "\n"); - $ret .= re_address(@{$args{local_addr}}, $args{local_port}); - #print(length($ret) . "\n"); - $ret .= re_address(@{$args{expected_addr}}, $args{expected_port}); - #print(length($ret) . "\n"); - $ret .= pack('V', $args{mismatch} // 0); - #print(length($ret) . "\n"); - $ret .= re_address(@{$args{src_addr}}, $args{src_port}); - #print(length($ret) . "\n"); - $ret .= re_address(@{$args{dst_addr}}, $args{dst_port}); - #print(length($ret) . "\n"); - $ret .= re_address(@{$args{mirror_addr}}, $args{mirror_port}); - #print(length($ret) . "\n"); - $ret .= pack('V', $args{stream_idx} // 0); - #print(length($ret) . "\n"); - $ret .= re_srtp($args{decrypt}); - #print(length($ret) . "\n"); - $ret .= re_srtp($args{encrypt}); - #print(length($ret) . "\n"); - $ret .= pack('V', $args{ssrc} // 0); - #print(length($ret) . "\n"); - $ret .= pack('CCCCCCCCCCCCCCCC V', 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0); - #print(length($ret) . "\n"); - $ret .= pack('C CvV', $args{tos} // 0, $args{flags} // 0, 0, 0); - #print(length($ret) . "\n"); - - return $ret; -} - -sub rtpengine_message_call { - my ($cmd, $idx, $callid) = @_; - - my $ret = ''; - - # amd64 alignment - $ret .= pack('VV V a256', $cmds{$cmd}, 0, $idx, $callid // ''); - - while (length($ret) < 792) { - $ret .= pack('v', 0); - } - - return $ret; -} - -sub rtpengine_message_stream { - my ($cmd, $call_idx, $stream_idx, $stream_name, $max_packets) = @_; - - my $ret = ''; - - # amd64 alignment - $ret .= pack('VV VVV a256', $cmds{$cmd}, 0, $call_idx, $stream_idx, $max_packets // 0, $stream_name // ''); - - while (length($ret) < 792) { - $ret .= pack('v', 0); - } - - return $ret; -} - -sub rtpengine_message_packet { - my ($cmd, $call_idx, $stream_idx, $data) = @_; - - my $ret = ''; - - # amd64 alignment - $ret .= pack('VV VV', $cmds{$cmd}, 0, $call_idx, $stream_idx); - - while (length($ret) < 792) { - $ret .= pack('v', 0); - } - - $ret .= $data; - - return $ret; -} - -my $sleep = 2; - -my @local = qw(inet4 192.168.1.194); -my @src = qw(inet 192.168.1.194); -my @dst = qw(inet 192.168.1.90); -#my @src = qw(inet6 2a00:4600:1:0:a00:27ff:feb0:f7fe); -#my @dst = qw(inet6 2a00:4600:1:0:6884:adff:fe98:6ac5); -my $dec = {cipher => 'null', hmac => 'null'}; -my $enc = {cipher => 'null', hmac => 'null'}; - -my $ret; -my $msg; - -# print("add 9876 -> 1234/6543\n"); -# $ret = syswrite($fh, rtpengine_message('add', local_addr => \@local, local_port => 9876, src_addr => \@src, src_port => 1234, dst_addr => \@dst, dst_port => 6543, tos => 184, decrypt => $dec, encrypt => $enc)) // '-'; -# print("ret = $ret, code = $!\n"); -# sleep($sleep); - -# print("add fail\n"); -# $ret = syswrite($fh, rtpengine_message('add', local_addr => \@local, local_port => 9876, src_addr => \@src, src_port => 1234, dst_addr => \@dst, dst_port => 6543, mirror_addr => \@dst, mirror_port => 6789, tos => 184, decrypt => $dec, encrypt => $enc)) // '-'; -# print("ret = $ret, code = $!\n"); -# sleep($sleep); - -# print("update 9876 -> 1234/6543 & 6789\n"); -# $ret = syswrite($fh, rtpengine_message('update', local_addr => \@local, local_port => 9876, src_addr => \@src, src_port => 1234, dst_addr => \@dst, dst_port => 6543, mirror_addr => \@dst, mirror_port => 6789, tos => 184, decrypt => $dec, encrypt => $enc)) // '-'; -# print("ret = $ret, code = $!\n"); -# sleep($sleep); - -# print("update 9876 -> 2345/7890 & 4321\n"); -# $ret = syswrite($fh, rtpengine_message('update', local_addr => \@local, local_port => 9876, src_addr => \@src, src_port => 2345, dst_addr => \@dst, dst_port => 7890, mirror_addr => \@dst, mirror_port => 4321, tos => 184, decrypt => $dec, encrypt => $enc)) // '-'; -# print("ret = $ret, code = $!\n"); -# sleep($sleep); - -# print("add fail\n"); -# $ret = syswrite($fh, rtpengine_message('add', local_addr => \@local, local_port => 9876, src_addr => \@src, src_port => 1234, dst_addr => \@dst, dst_port => 6543, mirror_addr => \@dst, mirror_port => 6789, tos => 184, decrypt => $dec, encrypt => $enc)) // '-'; -# print("ret = $ret, code = $!\n"); -# sleep($sleep); - -# print("update 9876 -> 1234/6543\n"); -# $ret = syswrite($fh, rtpengine_message('update', local_addr => \@local, local_port => 9876, src_addr => \@src, src_port => 1234, dst_addr => \@dst, dst_port => 6543, tos => 184, decrypt => $dec, encrypt => $enc)) // '-'; -# print("ret = $ret, code = $!\n"); -# sleep($sleep); - -# print("delete\n"); -# $ret = syswrite($fh, rtpengine_message('delete', local_addr => \@local, local_port => 9876, decrypt => $dec, encrypt => $enc)) // '-'; -# print("ret = $ret, code = $!\n"); -# sleep($sleep); - -# print("delete fail\n"); -# $ret = syswrite($fh, rtpengine_message('delete', local_addr => \@local, local_port => 9876, decrypt => $dec, encrypt => $enc)) // '-'; -# print("ret = $ret, code = $!\n"); -# sleep($sleep); - -# print("update fail\n"); -# $ret = syswrite($fh, rtpengine_message('update', local_addr => \@local, local_port => 9876, src_addr => \@src, src_port => 1234, dst_addr => \@dst, dst_port => 6543, tos => 184, decrypt => $dec, encrypt => $enc)) // '-'; -# print("ret = $ret, code = $!\n"); -# sleep($sleep); - - - - - -if (0) { - my (@calls, @streams); - my $runs = 100; - while ($runs >= 0 || @calls || @streams) { - print("$runs to go...\n"); - - my $op = rand() > .3 ? 'add' : 'del'; - $runs < 0 and $op = 'del'; - my $which = rand() > .6 ? 'call' : 'stream'; - if ($op eq 'add' && $which eq 'stream' && !@calls) { - # can't add stream without call - $which = 'call'; - } - if ($op eq 'del' && $which eq 'stream' && !@streams) { - # can't del stream if there aren't any - $which = 'call'; - } - if ($op eq 'del' && $which eq 'call' && !@calls) { - # can't del call if there aren't any - $op = 'add'; - } - - if ($op eq 'add' && $which eq 'call') { - my $name = rand(); - print("creating call $name\n"); - - $msg = rtpengine_message_call('add_call', 0, $name); - $ret = sysread($fh, $msg, length($msg)) // '-'; - #print("reply: " . unpack("H*", $msg) . "\n"); - print("ret = $ret, code = $!\n"); - - my (undef, undef, $idx) = unpack("VV V a256", $msg); - print("index is $idx\n"); - - push(@calls, $idx); - - sleep($sleep); - } - if ($op eq 'add' && $which eq 'stream') { - my $call = $calls[rand(@calls)]; - my $name = rand(); - print("creating stream $name under call idx $call\n"); - - $msg = rtpengine_message_stream('add_stream', $call, 0, $name); - $ret = sysread($fh, $msg, length($msg)) // '-'; - #print("reply: " . unpack("H*", $msg) . "\n"); - print("ret = $ret, code = $!\n"); - - my (undef, undef, undef, $idx) = unpack("VV VV a256", $msg); - print("index is $idx\n"); - - push(@streams, [$call, $idx]); - - sleep($sleep); - } - if ($op eq 'del' && $which eq 'call') { - my $arridx = int(rand(@calls)); - my $call = $calls[$arridx]; - print("deleting call idx $call\n"); - - $msg = rtpengine_message_call('del_call', $call); - $ret = syswrite($fh, $msg) // '-'; - #print("ret = $ret, code = $!, reply: " . unpack("H*", $msg) . "\n"); - print("ret = $ret, code = $!\n"); - - splice(@calls, $arridx, 1); - - # kill streams linked to call - my @to_del; - for my $sidx (0 .. $#streams) { - my $s = $streams[$sidx]; - $s->[0] == $call or next; - print("stream idx $s->[1] got nuked\n"); - push(@to_del, $sidx); - } - my $offset = 0; - while (@to_del) { - my $i = shift(@to_del); - splice(@streams, $i - $offset, 1); - $offset++; - } - - sleep($sleep); - } - if ($op eq 'del' && $which eq 'stream') { - my $arridx = int(rand(@streams)); - my $stream = $streams[$arridx]; - print("deleting stream idx $stream->[1] (call $stream->[0])\n"); - - $msg = rtpengine_message_stream('del_stream', $stream->[0], $stream->[1]); - $ret = syswrite($fh, $msg) // '-'; - #print("ret = $ret, code = $!, reply: " . unpack("H*", $msg) . "\n"); - print("ret = $ret, code = $!\n"); - - splice(@streams, $arridx, 1); - - sleep($sleep); - } - - for (1 .. rand(30)) { - @streams or last; - - my $idx = $streams[rand(@streams)]; - $idx = $idx->[1]; - print("delivering a packet to $idx\n"); - - $msg = rtpengine_message_packet('packet', 0, $idx, 'packet data bla bla ' . rand() . "\n"); - $ret = syswrite($fh, $msg) // '-'; - print("ret = $ret, code = $!\n"); - - sleep($sleep); - } - - $runs--; - } -} - - - - - - - - - -print("creating call\n"); - -$msg = rtpengine_message_call('add_call', 0, 'test call'); -$ret = sysread($fh, $msg, length($msg)) // '-'; -#print("reply: " . unpack("H*", $msg) . "\n"); -print("ret = $ret, code = $!\n"); - -my (undef, undef, $idx1) = unpack("VV V a256", $msg); -print("index is $idx1\n"); - -sleep($sleep); - - - -# print("creating identical call\n"); -# -# $msg = rtpengine_message_call('add_call', 0, 'test call'); -# $ret = sysread($fh, $msg, length($msg)) // '-'; -# #print("reply: " . unpack("H*", $msg) . "\n"); -# print("ret = $ret, code = $!\n"); -# -# my (undef, undef, $idx2) = unpack("VV V a256", $msg); -# print("index is $idx2\n"); -# -# sleep($sleep); - - - -# print("creating other call\n"); -# -# $msg = rtpengine_message_call('add_call', 0, 'another test call'); -# $ret = sysread($fh, $msg, length($msg)) // '-'; -# #print("reply: " . unpack("H*", $msg) . "\n"); -# print("ret = $ret, code = $!\n"); -# -# my (undef, undef, $idx3) = unpack("VV V a256", $msg); -# print("index is $idx3\n"); -# -# sleep($sleep); - - - -for my $exp (0 .. 1000) { - print("creating a stream\n"); - - $msg = rtpengine_message_stream('add_stream', $idx1, 0, 'test stream ' . rand()); - $ret = sysread($fh, $msg, length($msg)) // '-'; - #print("reply: " . unpack("H*", $msg) . "\n"); - print("ret = $ret, code = $!\n"); - - my (undef, undef, undef, $sidx1) = unpack("VV VV a256", $msg); - print("index is $sidx1\n"); - $sidx1 == $exp or die; -} - - - -# print("creating a stream\n"); -# -# $msg = rtpengine_message_stream('add_stream', $idx1, 0, 'test stream'); -# $ret = sysread($fh, $msg, length($msg)) // '-'; -# #print("reply: " . unpack("H*", $msg) . "\n"); -# print("ret = $ret, code = $!\n"); -# -# my (undef, undef, undef, $sidx1) = unpack("VV VV a256", $msg); -# print("index is $sidx1\n"); -# -# sleep($sleep); - - - -# print("creating identical stream\n"); -# -# $msg = rtpengine_message_stream('add_stream', $idx1, 0, 'test stream'); -# $ret = sysread($fh, $msg, length($msg)) // '-'; -# #print("reply: " . unpack("H*", $msg) . "\n"); -# print("ret = $ret, code = $!\n"); -# -# my (undef, undef, undef, $sidx2) = unpack("VV VV a256", $msg); -# print("index is $sidx2\n"); -# -# sleep($sleep); - - - -# print("creating different stream\n"); -# -# $msg = rtpengine_message_stream('add_stream', $idx3, 0, 'test stream'); -# $ret = sysread($fh, $msg, length($msg)) // '-'; -# #print("reply: " . unpack("H*", $msg) . "\n"); -# print("ret = $ret, code = $!\n"); -# -# my (undef, undef, undef, $sidx3) = unpack("VV VV a256", $msg); -# print("index is $sidx3\n"); - -# sleep($sleep); - - - -# print("add 9876 -> 1234/6543\n"); -# $ret = syswrite($fh, rtpengine_message('add', local_addr => \@local, local_port => 9876, src_addr => \@src, src_port => 1234, dst_addr => \@dst, dst_port => 6543, tos => 184, decrypt => $dec, encrypt => $enc, stream_idx => $sidx1, flags => 0x20)) // '-'; -# print("ret = $ret, code = $!\n"); -# sleep($sleep); - - - -# for (1 .. 50) { -# print("delivering a packet\n"); -# -# $msg = rtpengine_message_packet('packet', $idx1, $sidx1, 'packet data bla bla ' . rand() . "\n"); -# $ret = syswrite($fh, $msg) // '-'; -# #print("reply: " . unpack("H*", $msg) . "\n"); -# print("ret = $ret, code = $!\n"); -# -# sleep($sleep); -# } - - - - -# print("deleting stream\n"); -# -# $msg = rtpengine_message_stream('del_stream', $idx1, $sidx1, ''); -# $ret = syswrite($fh, $msg) // '-'; -# #print("ret = $ret, code = $!, reply: " . unpack("H*", $msg) . "\n"); -# print("ret = $ret, code = $!\n"); -# -# sleep($sleep); - - - -# print("deleting call\n"); -# -# $msg = rtpengine_message_call('del_call', $idx1, ''); -# $ret = syswrite($fh, $msg) // '-'; -# #print("ret = $ret, code = $!, reply: " . unpack("H*", $msg) . "\n"); -# print("ret = $ret, code = $!\n"); -# -# sleep($sleep); - - - - -close($fh); diff --git a/tests/sdp-parse-test.c b/tests/sdp-parse-test.c deleted file mode 100644 index 6d6628f6b..000000000 --- a/tests/sdp-parse-test.c +++ /dev/null @@ -1,21 +0,0 @@ -/* gcc -Wall -g `pkg-config glib-2.0 --cflags --libs` sdp-parse-test.c ../daemon/sdp.c -o sdp-parse-test */ -#include -#include -#include - -#include "../daemon/sdp.h" - -int main() { - char sdp[] = "v=0\r\no=root 25669 25669 IN IP4 192.168.51.133\r\ns=session\r\nc=IN IP4 192.168.51.133\r\nt=0 0\r\nm=audio 30018 RTP/AVP 8 0 101\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:101 telephone-event/8000\r\na=fmtp:101 0-16\r\na=silenceSupp:off - - - -\r\na=ptime:20\r\na=sendrecv\r\na=nortpproxy:yes\r\n"; - int len = strlen(sdp); - int i; - GQueue ret = G_QUEUE_INIT; - - i = sdp_parse(sdp, len, &ret); - if (i) - return 0; - - printf("%i stream(s)\n", g_queue_get_length(&ret)); - - return 0; -}