summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbluhm <bluhm@openbsd.org>2011-09-02 17:02:10 +0000
committerbluhm <bluhm@openbsd.org>2011-09-02 17:02:10 +0000
commit3a4f532ca2a9083a798edfd70a694b2b5375706c (patch)
treecb0b9ba536c006d766caf551cf64f98189bcf24d
parentAdd tests for relayd protocol http 1.0 and 1.1. (diff)
downloadwireguard-openbsd-3a4f532ca2a9083a798edfd70a694b2b5375706c.tar.xz
wireguard-openbsd-3a4f532ca2a9083a798edfd70a694b2b5375706c.zip
Add tests for relayd http put and https.
-rw-r--r--regress/usr.sbin/relayd/Makefile7
-rw-r--r--regress/usr.sbin/relayd/args-http-persistent.pl2
-rw-r--r--regress/usr.sbin/relayd/args-http-put.pl26
-rw-r--r--regress/usr.sbin/relayd/args-https-persistent.pl29
-rw-r--r--regress/usr.sbin/relayd/args-https-put.pl30
-rw-r--r--regress/usr.sbin/relayd/args-https.pl28
-rw-r--r--regress/usr.sbin/relayd/funcs.pl32
7 files changed, 140 insertions, 14 deletions
diff --git a/regress/usr.sbin/relayd/Makefile b/regress/usr.sbin/relayd/Makefile
index a471c10eeb8..d8eee4778ca 100644
--- a/regress/usr.sbin/relayd/Makefile
+++ b/regress/usr.sbin/relayd/Makefile
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.1 2011/09/01 17:33:17 bluhm Exp $
+# $OpenBSD: Makefile,v 1.2 2011/09/02 17:02:10 bluhm Exp $
# The following ports must be installed for the regression tests:
# p5-IO-Socket-INET6 object interface for AF_INET and AF_INET6 domain sockets
@@ -36,8 +36,7 @@ run-regress-$a: $a
server-cert.pem:
openssl req -batch -new -nodes -newkey rsa -keyout server-key.pem -subj /CN=localhost/ -x509 -out $@
-${REGRESS_TARGETS:M*ssl-client*}: /etc/ssl/127.0.0.1.crt
-
-${REGRESS_TARGETS:M*ssl-server*}: server-cert.pem
+${REGRESS_TARGETS:M*ssl*} ${REGRESS_TARGETS:M*https*}: \
+ /etc/ssl/127.0.0.1.crt server-cert.pem
.include <bsd.regress.mk>
diff --git a/regress/usr.sbin/relayd/args-http-persistent.pl b/regress/usr.sbin/relayd/args-http-persistent.pl
index 49bd34f7b51..08b644f6f31 100644
--- a/regress/usr.sbin/relayd/args-http-persistent.pl
+++ b/regress/usr.sbin/relayd/args-http-persistent.pl
@@ -3,7 +3,7 @@
use strict;
use warnings;
-my @lengths = (251, 65536, 0, 1, 2, 3, 4, 5);
+my @lengths = (251, 16384, 0, 1, 2, 3, 4, 5);
our %args = (
client => {
func => \&http_client,
diff --git a/regress/usr.sbin/relayd/args-http-put.pl b/regress/usr.sbin/relayd/args-http-put.pl
new file mode 100644
index 00000000000..c33f4fb8562
--- /dev/null
+++ b/regress/usr.sbin/relayd/args-http-put.pl
@@ -0,0 +1,26 @@
+# test persistent http 1.1 put over http relay
+
+use strict;
+use warnings;
+
+my @lengths = (251, 16384, 0, 1, 2, 3, 4, 5);
+our %args = (
+ client => {
+ func => \&http_client,
+ lengths => \@lengths,
+ method => "PUT",
+ },
+ 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-https-persistent.pl b/regress/usr.sbin/relayd/args-https-persistent.pl
new file mode 100644
index 00000000000..3cd869c33db
--- /dev/null
+++ b/regress/usr.sbin/relayd/args-https-persistent.pl
@@ -0,0 +1,29 @@
+# test persistent http 1.1 connection over http relay
+
+use strict;
+use warnings;
+
+my @lengths = (251, 16384, 0, 1, 2, 3, 4, 5);
+our %args = (
+ client => {
+ func => \&http_client,
+ lengths => \@lengths,
+ ssl => 1,
+ },
+ relay => {
+ protocol => [ "http",
+ "request header log foo",
+ "response header log bar",
+ ],
+ forwardssl => 1,
+ listenssl => 1,
+ },
+ server => {
+ func => \&http_server,
+ ssl => 1,
+ },
+ lengths => \@lengths,
+ md5 => "bc3a3f39af35fe5b1687903da2b00c7f",
+);
+
+1;
diff --git a/regress/usr.sbin/relayd/args-https-put.pl b/regress/usr.sbin/relayd/args-https-put.pl
new file mode 100644
index 00000000000..7284e0cbbfd
--- /dev/null
+++ b/regress/usr.sbin/relayd/args-https-put.pl
@@ -0,0 +1,30 @@
+# test persistent https 1.1 put over http relay
+
+use strict;
+use warnings;
+
+my @lengths = (251, 16384, 0, 1, 2, 3, 4, 5);
+our %args = (
+ client => {
+ func => \&http_client,
+ lengths => \@lengths,
+ method => "PUT",
+ ssl => 1,
+ },
+ relay => {
+ protocol => [ "http",
+ "request header log foo",
+ "response header log bar",
+ ],
+ forwardssl => 1,
+ listenssl => 1,
+ },
+ server => {
+ func => \&http_server,
+ ssl => 1,
+ },
+ lengths => \@lengths,
+ md5 => "bc3a3f39af35fe5b1687903da2b00c7f",
+);
+
+1;
diff --git a/regress/usr.sbin/relayd/args-https.pl b/regress/usr.sbin/relayd/args-https.pl
new file mode 100644
index 00000000000..65b1014c56d
--- /dev/null
+++ b/regress/usr.sbin/relayd/args-https.pl
@@ -0,0 +1,28 @@
+# test https connection over http relay
+
+use strict;
+use warnings;
+
+our %args = (
+ client => {
+ func => \&http_client,
+ ssl => 1,
+ },
+ relay => {
+ protocol => [ "http",
+ "request header log foo",
+ "response header log bar",
+ ],
+ forwardssl => 1,
+ listenssl => 1,
+
+ },
+ server => {
+ func => \&http_server,
+ ssl => 1,
+ },
+ len => 251,
+ md5 => "bc3a3f39af35fe5b1687903da2b00c7f",
+);
+
+1;
diff --git a/regress/usr.sbin/relayd/funcs.pl b/regress/usr.sbin/relayd/funcs.pl
index 397c1e92634..c928208c7fa 100644
--- a/regress/usr.sbin/relayd/funcs.pl
+++ b/regress/usr.sbin/relayd/funcs.pl
@@ -1,4 +1,4 @@
-# $OpenBSD: funcs.pl,v 1.2 2011/09/02 10:45:36 bluhm Exp $
+# $OpenBSD: funcs.pl,v 1.3 2011/09/02 17:02:10 bluhm Exp $
# Copyright (c) 2010,2011 Alexander Bluhm <bluhm@openbsd.org>
#
@@ -87,14 +87,18 @@ sub http_client {
my $self = shift;
my @lengths = @{$self->{lengths} || [ shift // $self->{len} // 251 ]};
my $vers = $self->{lengths} ? "1.1" : "1.0";
+ my $method = $self->{method} || "GET";
foreach my $len (@lengths) {
{
local $\ = "\r\n";
- print "GET /$len HTTP/$vers";
+ print "$method /$len HTTP/$vers";
print "Host: foo.bar";
+ print "Content-Length: $len"
+ if $vers eq "1.1" && $method eq "PUT";
print "";
}
+ write_char($self, $len) if $method eq "PUT";
IO::Handle::flush(\*STDOUT);
{
@@ -115,7 +119,8 @@ sub http_client {
}
}
}
- read_char($self, $vers eq "1.1" ? $len : undef);
+ read_char($self, $vers eq "1.1" ? $len : undef)
+ if $method eq "GET";
}
}
@@ -151,8 +156,9 @@ sub read_char {
sub http_server {
my $self = shift;
- my($url, $vers);
+ my($method, $url, $vers);
do {
+ my $len;
{
local $\ = "\n";
local $/ = "\r\n";
@@ -160,24 +166,32 @@ sub http_server {
return unless defined $_;
chomp;
print STDERR;
- ($url, $vers) = m{^GET (.*) HTTP/(1\.[01])$}
+ ($method, $url, $vers) = m{^(\w+) (.*) HTTP/(1\.[01])$}
or die ref($self), " http request not ok";
+ $method =~ /^(GET|PUT)$/
+ or die ref($self), " unknown method: $method";
+ ($len) = $url =~ /(\d+)$/;
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)
+ if $method eq "PUT";
- $url =~ /(\d+)$/;
- my $len = $1;
{
local $\ = "\r\n";
print "HTTP/$vers 200 OK";
- print "Content-Length: $len" if $vers eq "1.1";
+ print "Content-Length: $len"
+ if $vers eq "1.1" && $method eq "GET";
print "";
}
- write_char($self, $len);
+ write_char($self, $len) if $method eq "GET";
IO::Handle::flush(\*STDOUT);
} while ($vers eq "1.1");
}