From fde17a1e40f55fed25c398d808966740f7bcc4db Mon Sep 17 00:00:00 2001 From: david Date: Mon, 12 Nov 2012 20:44:41 +0000 Subject: [PATCH] Tests for UNIX sockets implementation in Ncat Added tests for UNIX domain sockets to the ncat_test.pl script. Added tests for: 1. listening on and connecting to UNIX STREAM socket. 2. listening on and connecting to (client with random socket) UNIX DGRAM socket. 3. connecting to UNIX DGRAM socket with given source socket (with "-s"). --- ncat/test/ncat-test.pl | 59 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/ncat/test/ncat-test.pl b/ncat/test/ncat-test.pl index 20c74c970..df52af74d 100755 --- a/ncat/test/ncat-test.pl +++ b/ncat/test/ncat-test.pl @@ -21,6 +21,8 @@ my $HOST = "localhost"; my $IPV6_ADDR = "::1"; my $PORT = 40000; my $PROXY_PORT = 40001; +my $UNIXSOCK = "ncat.unixsock"; +my $UNIXSOCK_TMP = "ncat.unixsock_tmp"; my $BUFSIZ = 1024; @@ -531,6 +533,36 @@ sub { }; kill_children; +# Test UNIX domain sockets listening +($s_pid, $s_out, $s_in) = ncat("-l", "-U", $UNIXSOCK); +test "Server UNIX socket listen on $UNIXSOCK (STREAM)", +sub { + my $resp; + + unlink($UNIXSOCK); + my ($c_pid, $c_out, $c_in) = ncat("-U", $UNIXSOCK); + syswrite($c_in, "abc\n"); + $resp = timeout_read($s_out); + $resp eq "abc\n" or die "Server got \"$resp\", not \"abc\\n\" from client"; +}; +kill_children; +unlink($UNIXSOCK); + +($s_pid, $s_out, $s_in) = ncat("-l", "-U", "--udp", $UNIXSOCK); +test "Server UNIX socket listen on $UNIXSOCK --udp (DGRAM)", +sub { + my $resp; + + unlink($UNIXSOCK); + my ($c_pid, $c_out, $c_in) = ncat("-U", "--udp", $UNIXSOCK); + syswrite($c_in, "abc\n"); + $resp = timeout_read($s_out); + $resp eq "abc\n" or die "Server got \"$resp\", not \"abc\\n\" from client"; +}; +kill_children; +unlink($UNIXSOCK); + + server_client_test "Connect success exit code", [], ["--send-only"], sub { my ($pid, $code); @@ -1231,6 +1263,33 @@ sub { }; kill_children; +# Test connecting to UNIX datagram socket with -s +test "Connect to UNIX datagram socket with -s", +sub { + my ($pid, $code); + local $SIG{CHLD} = sub { }; + local *SOCK; + my $buff; + + unlink($UNIXSOCK); + unlink($UNIXSOCK_TMP); + + socket(SOCK, AF_UNIX, SOCK_DGRAM, 0) or die; + bind(SOCK, sockaddr_un($UNIXSOCK)) or die; + + my ($c_pid, $c_out, $c_in) = ncat("-U", "--udp", "-s", $UNIXSOCK_TMP, $UNIXSOCK); + syswrite($c_in, "abc\n"); + close($c_in); + + my $peeraddr = recv(SOCK, $buff, 4, 0) or die; + my ($path) = sockaddr_un($peeraddr); + $path eq $UNIXSOCK_TMP or die "Client connected to prosy with source socket path $path, not $UNIXSOCK_TMP"; +}; +kill_children; +unlink($UNIXSOCK); +unlink($UNIXSOCK_TMP); + + # HTTP proxy tests. sub http_request {