diff options
Diffstat (limited to 'regress/usr.sbin/relayd/relayd.pl')
-rw-r--r-- | regress/usr.sbin/relayd/relayd.pl | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/regress/usr.sbin/relayd/relayd.pl b/regress/usr.sbin/relayd/relayd.pl new file mode 100644 index 00000000000..9ebbc5298a1 --- /dev/null +++ b/regress/usr.sbin/relayd/relayd.pl @@ -0,0 +1,99 @@ +#!/usr/bin/perl +# $OpenBSD: relayd.pl,v 1.1 2011/09/01 17:33:17 bluhm Exp $ + +# Copyright (c) 2010,2011 Alexander Bluhm <bluhm@openbsd.org> +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use strict; +use warnings; +use Socket; +use Socket6; + +use Client; +use Relayd; +use Server; +require 'funcs.pl'; + +sub usage { + die "usage: relay.pl copy|splice [test-args.pl]\n"; +} + +my $test; +our %args; +if (@ARGV and -f $ARGV[-1]) { + $test = pop; + do $test + or die "Do test file $test failed: ", $@ || $!; +} +@ARGV == 1 or usage(); + +my($sport, $rport) = find_ports(num => 2); +my $s = Server->new( + func => \&read_char, + listendomain => AF_INET, + listenaddr => "127.0.0.1", + listenport => $sport, + %{$args{server}}, +); +my $r = Relayd->new( + forward => $ARGV[0], + listendomain => AF_INET, + listenaddr => "127.0.0.1", + listenport => $rport, + connectdomain => AF_INET, + connectaddr => "127.0.0.1", + connectport => $sport, + %{$args{relay}}, + test => $test, +); +my $c = Client->new( + func => \&write_char, + connectdomain => AF_INET, + connectaddr => "127.0.0.1", + connectport => $rport, + %{$args{client}}, +); + +$s->run; +$r->run; +$r->up; +$c->run->up; +$s->up; + +$c->down; +$s->down; +$r->down; + +exit if $args{nocheck}; + +my $clen = $c->loggrep(qr/^LEN: /) // die "no client len" + unless $args{client}{nocheck}; +my $slen = $s->loggrep(qr/^LEN: /) // die "no server len" + unless $args{server}{nocheck}; +!$clen || !$slen || $clen eq $slen + or die "client: $clen", "server: $slen", "len mismatch"; +!defined($args{len}) || !$clen || $clen eq "LEN: $args{len}\n" + or die "client: $clen", "len $args{len} expected"; +!defined($args{len}) || !$slen || $slen eq "LEN: $args{len}\n" + or die "server: $slen", "len $args{len} expected"; + +my $cmd5 = $c->loggrep(qr/^MD5: /) unless $args{client}{nocheck}; +my $smd5 = $s->loggrep(qr/^MD5: /) unless $args{server}{nocheck}; +!$cmd5 || !$smd5 || ref($args{md5}) eq 'ARRAY' || $cmd5 eq $smd5 + or die "client: $cmd5", "server: $smd5", "md5 mismatch"; +my $md5 = ref($args{md5}) eq 'ARRAY' ? join('|', @{$args{md5}}) : $args{md5}; +!$md5 || !$cmd5 || $cmd5 =~ /^MD5: ($md5)$/ + or die "client: $cmd5", "md5 $md5 expected"; +!$md5 || !$smd5 || $smd5 =~ /^MD5: ($md5)$/ + or die "server: $smd5", "md5 $md5 expected"; |