xref: /openbsd/regress/usr.sbin/syslogd/Makefile (revision 55cc5ba3)
1#	$OpenBSD: Makefile,v 1.31 2020/12/17 00:51:13 bluhm Exp $
2
3# The following ports must be installed for the regression tests:
4# p5-IO-Socket-INET6	object interface for AF_INET and AF_INET6 domain sockets
5# p5-Socket6		Perl defines relating to AF_INET6 sockets
6# p5-IO-Socket-SSL	perl interface to SSL sockets
7# p5-BSD-Resource	BSD process resource limit and priority functions
8#
9# This package enables additional interoperability tests
10# rsyslog		syslog daemon supporting databases, TCP, SSL, RELP
11#
12# Check wether all required perl packages are installed.  If some
13# are missing print a warning and skip the tests, but do not fail.
14
15PERL_REQUIRE !=	perl -Mstrict -Mwarnings -e ' \
16    eval { require IO::Socket::INET6 } or print $@; \
17    eval { require Socket6 } or print $@; \
18    eval { require IO::Socket::SSL } or print $@; \
19    eval { require BSD::Resource } or print $@; \
20'
21.if ! empty (PERL_REQUIRE)
22regress:
23	@echo "${PERL_REQUIRE}"
24	@echo install these perl packages for additional tests
25	@echo SKIPPED
26.endif
27
28# Automatically generate regress targets from test cases in directory.
29
30PROGS =			ttylog
31PERLS =			Client.pm Proc.pm RSyslogd.pm Server.pm \
32			Syslogc.pm   Syslogd.pm funcs.pl syslogd.pl
33ARGS !=			cd ${.CURDIR} && ls args-*.pl
34REGRESS_TARGETS =	${ARGS:S/^/run-/}
35.if ! exists(/usr/local/sbin/rsyslogd)
36REGRESS_SKIP_TARGETS =	${REGRESS_TARGETS:Mrun-args-rsyslog*}
37.endif
38LDFLAGS +=		-lutil
39CLEANFILES +=		*.log *.log.? *.conf ktrace.out stamp-* *.pid
40CLEANFILES +=		*.out *.sock *.ktrace *.fstat ttylog *.ph */*.ph
41CLEANFILES +=		*.pem *.req *.key *.crt *.srl empty toobig diskimage
42
43run-args-rsyslog-client-tls.pl run-args-rsyslog-tls.pl:
44	# rsyslogd TLS client side is totally unreliable.  Startup of
45	# GnuTLS may take a long time on slow machines.  Disable test.
46	@echo DISABLED
47
48.MAIN: all
49
50REGRESS_SETUP_ONCE +=	setup
51setup:
52	[ -z "${SUDO}" ] || ${SUDO} true
53	${SUDO} /etc/rc.d/syslogd stop
54
55REGRESS_CLEANUP +=	cleanup
56cleanup:
57	-${SUDO} /etc/rc.d/syslogd restart
58
59# Set variables so that make runs with and without obj directory.
60# Only do that if necessary to keep visible output short.
61
62.if ${.CURDIR} == ${.OBJDIR}
63PERLINC =	-I.
64PERLPATH =
65.else
66PERLINC =	-I${.CURDIR} -I${.OBJDIR}
67PERLPATH =	${.CURDIR}/
68.endif
69
70# The arg tests take a perl hash with arguments controlling the
71# test parameters.  Generally they consist of client, syslogd, server.
72
73.for a in ${ARGS}
74run-$a: $a
75	time SUDO=${SUDO} KTRACE=${KTRACE} SYSLOGD=${SYSLOGD} perl ${PERLINC} ${PERLPATH}syslogd.pl ${PERLPATH}$a
76.endfor
77
78# create certificates for TLS
79
80127.0.0.1.crt:
81	openssl req -batch -new -subj /L=OpenBSD/O=syslogd-regress/OU=syslogd/CN=127.0.0.1/ -nodes -newkey rsa -keyout 127.0.0.1.key -x509 -out $@
82	${SUDO} rm -f /etc/ssl/private/127.0.0.1:6514.key
83	${SUDO} rm -f /etc/ssl/127.0.0.1:6514.crt
84	${SUDO} rm -f /etc/ssl/private/127.0.0.1.key
85	${SUDO} rm -f /etc/ssl/127.0.0.1.crt
86	${SUDO} cp 127.0.0.1.key /etc/ssl/private/127.0.0.1.key
87	${SUDO} cp 127.0.0.1.crt /etc/ssl/127.0.0.1.crt
88	${SUDO} cp 127.0.0.1.key /etc/ssl/private/::1.key
89	${SUDO} cp 127.0.0.1.crt /etc/ssl/::1.crt
90	${SUDO} cp 127.0.0.1.key /etc/ssl/private/localhost.key
91	${SUDO} cp 127.0.0.1.crt /etc/ssl/localhost.crt
92
93ca.crt fake-ca.crt:
94	openssl req -batch -new -subj /L=OpenBSD/O=syslogd-regress/OU=ca/CN=root/ -nodes -newkey rsa -keyout ${@:R}.key -x509 -out $@
95
96client.req server.req:
97	openssl req -batch -new -subj /L=OpenBSD/O=syslogd-regress/OU=${@:R}/CN=localhost/ -nodes -newkey rsa -keyout ${@:R}.key -out $@
98
99client.crt server.crt: ca.crt ${@:R}.req
100	openssl x509 -CAcreateserial -CAkey ca.key -CA ca.crt -req -in ${@:R}.req -out $@
101
102empty:
103	true >$@
104
105toobig:
106	dd if=/dev/zero of=$@ bs=1 count=1 seek=50M
107
108sys/syscall.ph: /usr/include/sys/syscall.h
109	cd /usr/include && h2ph -h -d ${.OBJDIR} ${@:R:S/$/.h/}
110
111# Create a full file system on vnd to trigger ENOSPC error.
112
113.PHONY: disk mount unconfig
114
115disk: unconfig
116	dd if=/dev/zero of=diskimage bs=512 count=4k
117	vnconfig vnd0 diskimage
118	newfs -b 4096 -f 2048 -m 0 vnd0c
119
120mount: disk
121	mkdir -p /mnt/regress-syslogd
122	mount /dev/vnd0c /mnt/regress-syslogd
123
124unconfig:
125	-umount -f /dev/vnd0c 2>/dev/null || true
126	-rmdir /mnt/regress-syslogd 2>/dev/null || true
127	-vnconfig -u vnd0 2>/dev/null || true
128
129stamp-filesystem:
130	${SUDO} ${.MAKE} -C ${.CURDIR} mount
131	${SUDO} chmod 1777 /mnt/regress-syslogd
132	date >$@
133
134REGRESS_CLEANUP +=	cleanup-filesystem
135cleanup-filesystem:
136	rm -f stamp-filesystem
137	-${SUDO} umount /mnt/regress-syslogd
138	-${SUDO} ${.MAKE} -C ${.CURDIR} unconfig
139
140${REGRESS_TARGETS:M*filesystem*}: stamp-filesystem
141${REGRESS_TARGETS:M*tls*}: client.crt server.crt 127.0.0.1.crt
142${REGRESS_TARGETS:M*multilisten*}: 127.0.0.1.crt
143${REGRESS_TARGETS:M*empty*}: empty
144${REGRESS_TARGETS:M*toobig*}: toobig
145${REGRESS_TARGETS:M*fake*}: fake-ca.crt
146${REGRESS_TARGETS:M*sendsyslog*}: sys/syscall.ph
147${REGRESS_TARGETS}: ttylog
148
149# make perl syntax check for all args files
150
151.PHONY: syntax libevent
152
153syntax: stamp-syntax
154
155stamp-syntax: ${PERLS} ${ARGS}
156.for p in ${PERLS}
157	@perl -c ${PERLINC} ${PERLPATH}$p
158.endfor
159.for a in ${ARGS}
160	@perl -c ${PERLPATH}$a
161.endfor
162	@date >$@
163
164# run the tests with all variants of libevent backend
165libevent:
166	cd ${.CURDIR} && EVENT_NOKQUEUE=1 EVENT_NOPOLL=1 ${MAKE} regress
167	cd ${.CURDIR} && EVENT_NOKQUEUE=1 EVENT_NOSELECT=1 ${MAKE} regress
168	cd ${.CURDIR} && EVENT_NOPOLL=1 EVENT_NOSELECT=1 ${MAKE} regress
169
170.include <bsd.regress.mk>
171