diff options
author | 2011-09-02 10:45:36 +0000 | |
---|---|---|
committer | 2011-09-02 10:45:36 +0000 | |
commit | 9d1e6fe85fd62b66cfbb180db0a68f1a5f723965 (patch) | |
tree | bcf207ba77ce1efe760307b073947591d0c655ee | |
parent | Add email address for diffs and remove plural man pages. ok jmc@ (diff) | |
download | wireguard-openbsd-9d1e6fe85fd62b66cfbb180db0a68f1a5f723965.tar.xz wireguard-openbsd-9d1e6fe85fd62b66cfbb180db0a68f1a5f723965.zip |
Add tests for relayd protocol http 1.0 and 1.1.
-rw-r--r-- | regress/usr.sbin/relayd/Proc.pm | 6 | ||||
-rw-r--r-- | regress/usr.sbin/relayd/Relayd.pm | 5 | ||||
-rw-r--r-- | regress/usr.sbin/relayd/args-http-log.pl | 23 | ||||
-rw-r--r-- | regress/usr.sbin/relayd/args-http-persistent.pl | 25 | ||||
-rw-r--r-- | regress/usr.sbin/relayd/args-http-tcp.pl | 17 | ||||
-rw-r--r-- | regress/usr.sbin/relayd/args-http.pl | 20 | ||||
-rw-r--r-- | regress/usr.sbin/relayd/funcs.pl | 105 | ||||
-rw-r--r-- | regress/usr.sbin/relayd/relayd.pl | 26 |
8 files changed, 190 insertions, 37 deletions
diff --git a/regress/usr.sbin/relayd/Proc.pm b/regress/usr.sbin/relayd/Proc.pm index b43f13978bc..e5c0e157cdb 100644 --- a/regress/usr.sbin/relayd/Proc.pm +++ b/regress/usr.sbin/relayd/Proc.pm @@ -1,4 +1,4 @@ -# $OpenBSD: Proc.pm,v 1.1 2011/09/01 17:33:17 bluhm Exp $ +# $OpenBSD: Proc.pm,v 1.2 2011/09/02 10:45:36 bluhm Exp $ # Copyright (c) 2010,2011 Alexander Bluhm <bluhm@openbsd.org> # @@ -130,8 +130,8 @@ sub loggrep { } open(my $fh, '<', $self->{logfile}) or die ref($self), " log file open failed: $!"; - my $match = first { /$regex/ } <$fh>; - return $match if $match; + my @match = grep { /$regex/ } <$fh>; + return wantarray ? @match : $match[0] if @match; close($fh); # pattern not found if ($kid == 0) { diff --git a/regress/usr.sbin/relayd/Relayd.pm b/regress/usr.sbin/relayd/Relayd.pm index 9cd55d868be..405cf40cadc 100644 --- a/regress/usr.sbin/relayd/Relayd.pm +++ b/regress/usr.sbin/relayd/Relayd.pm @@ -1,4 +1,4 @@ -# $OpenBSD: Relayd.pm,v 1.1 2011/09/01 17:33:17 bluhm Exp $ +# $OpenBSD: Relayd.pm,v 1.2 2011/09/02 10:45:36 bluhm Exp $ # Copyright (c) 2010,2011 Alexander Bluhm <bluhm@openbsd.org> # @@ -46,9 +46,10 @@ sub new { $self->{connectport} or croak "$class connect port not given"; + my $test = basename($self->{test} || ""); open(my $fh, '>', $self->{conffile}) or die ref($self), " conf file $self->{conffile} create failed: $!"; - my $test = basename($self->{test} || ""); + print $fh "log all\n"; my @protocol = @{$self->{protocol}}; my $proto = shift @protocol; diff --git a/regress/usr.sbin/relayd/args-http-log.pl b/regress/usr.sbin/relayd/args-http-log.pl new file mode 100644 index 00000000000..37c773d9764 --- /dev/null +++ b/regress/usr.sbin/relayd/args-http-log.pl @@ -0,0 +1,23 @@ +# test http connection over http relay + +use strict; +use warnings; + +our %args = ( + client => { + func => \&http_client, + }, + relay => { + protocol => [ "http", + "request header log foo", + "response header log bar", + ], + }, + server => { + func => \&http_server, + }, + len => 251, + md5 => "bc3a3f39af35fe5b1687903da2b00c7f", +); + +1; diff --git a/regress/usr.sbin/relayd/args-http-persistent.pl b/regress/usr.sbin/relayd/args-http-persistent.pl new file mode 100644 index 00000000000..49bd34f7b51 --- /dev/null +++ b/regress/usr.sbin/relayd/args-http-persistent.pl @@ -0,0 +1,25 @@ +# test persistent http 1.1 connection over http relay + +use strict; +use warnings; + +my @lengths = (251, 65536, 0, 1, 2, 3, 4, 5); +our %args = ( + client => { + func => \&http_client, + lengths => \@lengths, + }, + relay => { + protocol => [ "http", + "request header log foo", + "response header log bar", + ], + }, + server => { + func => \&http_server, + }, + lengths => \@lengths, + md5 => "bc3a3f39af35fe5b1687903da2b00c7f", +); + +1; diff --git a/regress/usr.sbin/relayd/args-http-tcp.pl b/regress/usr.sbin/relayd/args-http-tcp.pl new file mode 100644 index 00000000000..3c9a4f3fc9b --- /dev/null +++ b/regress/usr.sbin/relayd/args-http-tcp.pl @@ -0,0 +1,17 @@ +# test http connection over tcp relay + +use strict; +use warnings; + +our %args = ( + client => { + func => \&http_client, + }, + server => { + func => \&http_server, + }, + len => 251, + md5 => "bc3a3f39af35fe5b1687903da2b00c7f", +); + +1; diff --git a/regress/usr.sbin/relayd/args-http.pl b/regress/usr.sbin/relayd/args-http.pl new file mode 100644 index 00000000000..4aa918a468e --- /dev/null +++ b/regress/usr.sbin/relayd/args-http.pl @@ -0,0 +1,20 @@ +# test http connection over http relay + +use strict; +use warnings; + +our %args = ( + client => { + func => \&http_client, + }, + relay => { + protocol => [ "http" ], + }, + server => { + func => \&http_server, + }, + len => 251, + md5 => "bc3a3f39af35fe5b1687903da2b00c7f", +); + +1; diff --git a/regress/usr.sbin/relayd/funcs.pl b/regress/usr.sbin/relayd/funcs.pl index c628e791194..397c1e92634 100644 --- a/regress/usr.sbin/relayd/funcs.pl +++ b/regress/usr.sbin/relayd/funcs.pl @@ -1,4 +1,4 @@ -# $OpenBSD: funcs.pl,v 1.1 2011/09/01 17:33:17 bluhm Exp $ +# $OpenBSD: funcs.pl,v 1.2 2011/09/02 10:45:36 bluhm Exp $ # Copyright (c) 2010,2011 Alexander Bluhm <bluhm@openbsd.org> # @@ -83,19 +83,40 @@ sub write_char { print STDERR "MD5: ", $ctx->hexdigest, "\n"; } -sub errignore { - $SIG{PIPE} = 'IGNORE'; - $SIG{__DIE__} = sub { - die @_ if $^S; - warn @_; - my $soerror; - $soerror = getsockopt(STDIN, SOL_SOCKET, SO_ERROR); - print STDERR "ERROR IN: ", unpack('i', $soerror), "\n"; - $soerror = getsockopt(STDOUT, SOL_SOCKET, SO_ERROR); - print STDERR "ERROR OUT: ", unpack('i', $soerror), "\n"; - IO::Handle::flush(\*STDERR); - POSIX::_exit(0); - }; +sub http_client { + my $self = shift; + my @lengths = @{$self->{lengths} || [ shift // $self->{len} // 251 ]}; + my $vers = $self->{lengths} ? "1.1" : "1.0"; + + foreach my $len (@lengths) { + { + local $\ = "\r\n"; + print "GET /$len HTTP/$vers"; + print "Host: foo.bar"; + print ""; + } + IO::Handle::flush(\*STDOUT); + + { + local $\ = "\n"; + local $/ = "\r\n"; + local $_ = <STDIN>; + chomp; + print STDERR; + m{^HTTP/$vers 200 OK$} + or die ref($self), " http response not ok"; + while (<STDIN>) { + chomp; + last if /^$/; + print STDERR; + if (/^Content-Length: (.*)/) { + $1 == $len or die ref($self), + " bad content length $1"; + } + } + } + read_char($self, $vers eq "1.1" ? $len : undef); + } } ######################################################################## @@ -104,23 +125,61 @@ sub errignore { sub read_char { my $self = shift; - my $max = $self->{max}; + my $max = shift // $self->{max}; my $ctx = Digest::MD5->new(); my $len = 0; - while (<STDIN>) { - $len += length($_); - $ctx->add($_); - print STDERR "."; - if ($max && $len >= $max) { - print STDERR "\nMax"; - last; + if (defined($max) && $max == 0) { + print STDERR "Max\n"; + } else { + while (<STDIN>) { + $len += length($_); + $ctx->add($_); + print STDERR "."; + if (defined($max) && $len >= $max) { + print STDERR "\nMax"; + last; + } } + print STDERR "\n"; } - print STDERR "\n"; print STDERR "LEN: ", $len, "\n"; print STDERR "MD5: ", $ctx->hexdigest, "\n"; } +sub http_server { + my $self = shift; + + my($url, $vers); + do { + { + local $\ = "\n"; + local $/ = "\r\n"; + local $_ = <STDIN>; + return unless defined $_; + chomp; + print STDERR; + ($url, $vers) = m{^GET (.*) HTTP/(1\.[01])$} + or die ref($self), " http request not ok"; + while (<STDIN>) { + chomp; + last if /^$/; + print STDERR; + } + } + + $url =~ /(\d+)$/; + my $len = $1; + { + local $\ = "\r\n"; + print "HTTP/$vers 200 OK"; + print "Content-Length: $len" if $vers eq "1.1"; + print ""; + } + write_char($self, $len); + IO::Handle::flush(\*STDOUT); + } while ($vers eq "1.1"); +} + 1; diff --git a/regress/usr.sbin/relayd/relayd.pl b/regress/usr.sbin/relayd/relayd.pl index 9ebbc5298a1..73fbb2b6c23 100644 --- a/regress/usr.sbin/relayd/relayd.pl +++ b/regress/usr.sbin/relayd/relayd.pl @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $OpenBSD: relayd.pl,v 1.1 2011/09/01 17:33:17 bluhm Exp $ +# $OpenBSD: relayd.pl,v 1.2 2011/09/02 10:45:36 bluhm Exp $ # Copyright (c) 2010,2011 Alexander Bluhm <bluhm@openbsd.org> # @@ -77,16 +77,24 @@ $r->down; exit if $args{nocheck}; -my $clen = $c->loggrep(qr/^LEN: /) // die "no client len" +my @clen = $c->loggrep(qr/^LEN: /) or die "no client len" unless $args{client}{nocheck}; -my $slen = $s->loggrep(qr/^LEN: /) // die "no server len" +my @slen = $s->loggrep(qr/^LEN: /) or 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"; +!@clen || !@slen || @clen ~~ @slen + or die "client: @clen", "server: @slen", "len mismatch"; +!defined($args{len}) || !$clen[0] || $clen[0] eq "LEN: $args{len}\n" + or die "client: $clen[0]", "len $args{len} expected"; +!defined($args{len}) || !$slen[0] || $slen[0] eq "LEN: $args{len}\n" + or die "server: $slen[0]", "len $args{len} expected"; +foreach my $len (@{$args{lengths} || []}) { + my $clen = shift @clen; + $clen eq "LEN: $len\n" + or die "client: $clen", "len $len expected"; + my $slen = shift @slen; + $slen eq "LEN: $len\n" + or die "server: $slen", "len $len expected"; +} my $cmd5 = $c->loggrep(qr/^MD5: /) unless $args{client}{nocheck}; my $smd5 = $s->loggrep(qr/^MD5: /) unless $args{server}{nocheck}; |