aboutsummaryrefslogtreecommitdiff
path: root/regress/tests/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'regress/tests/Makefile')
-rw-r--r--regress/tests/Makefile105
1 files changed, 105 insertions, 0 deletions
diff --git a/regress/tests/Makefile b/regress/tests/Makefile
new file mode 100644
index 0000000..5298c7c
--- /dev/null
+++ b/regress/tests/Makefile
@@ -0,0 +1,105 @@
+# $OpenBSD: Makefile,v 1.2 2015/07/16 17:00:41 reyk 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
+# p5-Socket6 Perl defines relating to AF_INET6 sockets
+# p5-IO-Socket-SSL perl interface to SSL sockets
+#
+# Check wether all required perl packages are installed. If some
+# are missing print a warning and skip the tests, but do not fail.
+
+PERL_REQUIRE != perl -Mstrict -Mwarnings -e ' \
+ eval { require IO::Socket::INET6 } or print $@; \
+ eval { require Socket6 } or print $@; \
+ eval { require IO::Socket::SSL } or print $@; \
+'
+.if ! empty (PERL_REQUIRE)
+regress:
+ @echo "${PERL_REQUIRE}"
+ @echo install these perl packages for additional tests
+.endif
+
+# Fill out these variables if you want to test httpd with
+# the httpd process running on a remote machine. You have to specify
+# a local and remote ip address for the tcp connections. To control
+# the remote machine you need a hostname for ssh to log in. All the
+# test files must be in the same directory local and remote.
+
+LOCAL_ADDR ?=
+REMOTE_ADDR ?=
+REMOTE_SSH ?=
+
+# Automatically generate regress targets from test cases in directory.
+
+ARGS != cd ${.CURDIR} && ls args-*.pl
+TARGETS ?= ${ARGS}
+REGRESS_TARGETS = ${TARGETS:S/^/run-regress-/}
+CLEANFILES += *.log httpd.conf ktrace.out stamp-*
+CLEANFILES += *.pem *.req *.crt *.key *.srl md5-*
+
+HTDOCS = 512 1048576 1073741824
+HTDOCS_MD5 = ${HTDOCS:S/^/${.OBJDIR}\/md5-/}
+HTDOCS_SPARSE = yes
+CLEANFILES += ${HTDOCS}
+
+# Set variables so that make runs with and without obj directory.
+# Only do that if necessary to keep visible output short.
+
+.if ${.CURDIR} == ${.OBJDIR}
+PERLINC =
+PERLPATH =
+.else
+PERLINC = -I${.CURDIR}
+PERLPATH = ${.CURDIR}/
+.endif
+
+# The arg tests take a perl hash with arguments controlling the
+# test parameters. Generally they consist of client, httpd, server.
+
+.for a in ${ARGS}
+run-regress-$a: $a ${HTDOCS_MD5}
+ @echo '\n======== $@ ========'
+ time SUDO=${SUDO} KTRACE=${KTRACE} HTTPD=${HTTPD} perl ${PERLINC} ${PERLPATH}httpd.pl ${.OBJDIR} ${PERLPATH}$a
+.endfor
+
+# htdocs
+
+.for d in ${HTDOCS}
+${.OBJDIR}/$d:
+ @echo '\n======== file: $d ========'
+.if (${HTDOCS_SPARSE} != "yes")
+ @dd if=/dev/arandom of=$@ count=$$(($d / 512)) bs=512
+.else
+ @dd of=$@ seek=$$(($d / 512)) bs=512 count=0 status=none
+.endif
+
+${.OBJDIR}/md5-$d: ${.OBJDIR}/$d
+ @md5 -q ${.OBJDIR}/$d > $@
+.endfor
+
+# create certificates for TLS
+
+ca.crt:
+ openssl req -batch -new -subj /L=OpenBSD/O=httpd-regress/OU=ca/CN=root/ -nodes -newkey rsa -keyout ca.key -x509 -out ca.crt
+
+server.req:
+ openssl req -batch -new -subj /L=OpenBSD/O=httpd-regress/OU=server/CN=localhost/ -nodes -newkey rsa -keyout server.key -out server.req
+
+server.crt: ca.crt server.req
+ openssl x509 -CAcreateserial -CAkey ca.key -CA ca.crt -req -in server.req -out server.crt
+
+${REGRESS_TARGETS:M*tls*} ${REGRESS_TARGETS:M*https*}: server.crt
+
+# make perl syntax check for all args files
+
+.PHONY: syntax
+
+syntax: stamp-syntax
+
+stamp-syntax: ${ARGS}
+.for a in ${ARGS}
+ @perl -c ${PERLPATH}$a
+.endfor
+ @date >$@
+
+.include <bsd.regress.mk>