summaryrefslogtreecommitdiff
path: root/regress/usr.sbin/syslogd/Makefile
blob: 75732799d54255acfdc792bccb9361cf02b8b2da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#	$OpenBSD: Makefile,v 1.26 2019/07/12 19:31:29 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
# p5-Socket6		Perl defines relating to AF_INET6 sockets
# p5-IO-Socket-SSL	perl interface to SSL sockets
# p5-BSD-Resource	BSD process resource limit and priority functions
#
# This package enables additional interoperability tests
# rsyslog		syslog daemon supporting databases, TCP, SSL, RELP
#
# 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 $@; \
    eval { require BSD::Resource } or print $@; \
'
.if ! empty (PERL_REQUIRE)
regress:
	@echo "${PERL_REQUIRE}"
	@echo install these perl packages for additional tests
	@echo SKIPPED
.endif

# Automatically generate regress targets from test cases in directory.

PROGS =			ttylog
PERLS =			Client.pm Proc.pm RSyslogd.pm Server.pm \
			Syslogc.pm   Syslogd.pm funcs.pl syslogd.pl
ARGS !=			cd ${.CURDIR} && ls args-*.pl
.if exists (/usr/local/sbin/rsyslogd)
TARGETS ?=		${ARGS}
.else
TARGETS ?=		${ARGS:Nargs-rsyslog*}
.endif
REGRESS_TARGETS =	${TARGETS:S/^/run-/}
LDFLAGS +=		-lutil
CLEANFILES +=		*.log *.log.? *.conf ktrace.out stamp-*
CLEANFILES +=		*.out *.sock *.ktrace *.fstat ttylog *.ph */*.ph
CLEANFILES +=		*.pem *.req *.key *.crt *.srl empty toobig diskimage

.MAIN: all

REGRESS_SETUP_ONCE +=	setup
setup:
	@echo '\n======== $@ ========'
	[ -z "${SUDO}" ] || ${SUDO} true
	${SUDO} /etc/rc.d/syslogd stop

REGRESS_CLEANUP +=	cleanup
cleanup:
	@echo '\n======== $@ ========'
	-${SUDO} /etc/rc.d/syslogd restart

# 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 =	-I.
PERLPATH =
.else
PERLINC =	-I${.CURDIR} -I${.OBJDIR}
PERLPATH =	${.CURDIR}/
.endif

# The arg tests take a perl hash with arguments controlling the
# test parameters.  Generally they consist of client, syslogd, server.

.for a in ${ARGS}
run-$a: $a
	@echo '\n======== $@ ========'
	time SUDO=${SUDO} KTRACE=${KTRACE} SYSLOGD=${SYSLOGD} perl ${PERLINC} ${PERLPATH}syslogd.pl ${PERLPATH}$a
.endfor

# create certificates for TLS

127.0.0.1.crt:
	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 $@
	${SUDO} rm -f /etc/ssl/private/127.0.0.1:6514.key
	${SUDO} rm -f /etc/ssl/127.0.0.1:6514.crt
	${SUDO} rm -f /etc/ssl/private/127.0.0.1.key
	${SUDO} rm -f /etc/ssl/127.0.0.1.crt
	${SUDO} cp 127.0.0.1.key /etc/ssl/private/127.0.0.1.key
	${SUDO} cp 127.0.0.1.crt /etc/ssl/127.0.0.1.crt
	${SUDO} cp 127.0.0.1.key /etc/ssl/private/::1.key
	${SUDO} cp 127.0.0.1.crt /etc/ssl/::1.crt
	${SUDO} cp 127.0.0.1.key /etc/ssl/private/localhost.key
	${SUDO} cp 127.0.0.1.crt /etc/ssl/localhost.crt

ca.crt fake-ca.crt:
	openssl req -batch -new -subj /L=OpenBSD/O=syslogd-regress/OU=ca/CN=root/ -nodes -newkey rsa -keyout ${@:R}.key -x509 -out $@

client.req server.req:
	openssl req -batch -new -subj /L=OpenBSD/O=syslogd-regress/OU=${@:R}/CN=localhost/ -nodes -newkey rsa -keyout ${@:R}.key -out $@

client.crt server.crt: ca.crt ${@:R}.req
	openssl x509 -CAcreateserial -CAkey ca.key -CA ca.crt -req -in ${@:R}.req -out $@

empty:
	true >$@

toobig:
	dd if=/dev/zero of=$@ bs=1 count=1 seek=50M

sys/syscall.ph: /usr/include/sys/syscall.h
	cd /usr/include && h2ph -h -d ${.OBJDIR} ${@:R:S/$/.h/}

# Create a full file system on vnd to trigger ENOSPC error.

.PHONY: disk mount unconfig

disk: unconfig
	dd if=/dev/zero of=diskimage bs=512 count=4k
	vnconfig vnd0 diskimage
	newfs -b 4096 -f 2048 -m 0 vnd0c

mount: disk
	mkdir -p /mnt/regress-syslogd
	mount /dev/vnd0c /mnt/regress-syslogd

unconfig:
	-umount -f /dev/vnd0c 2>/dev/null || true
	-rmdir /mnt/regress-syslogd 2>/dev/null || true
	-vnconfig -u vnd0 2>/dev/null || true

stamp-filesystem:
	@echo '\n======== $@ ========'
	${SUDO} ${.MAKE} -C ${.CURDIR} mount
	${SUDO} chmod 1777 /mnt/regress-syslogd
	date >$@

REGRESS_CLEANUP +=	cleanup-filesystem
cleanup-filesystem:
	@echo '\n======== $@ ========'
	rm -f stamp-filesystem
	-${SUDO} umount /mnt/regress-syslogd
	-${SUDO} ${.MAKE} -C ${.CURDIR} unconfig

${REGRESS_TARGETS:M*filesystem*}: stamp-filesystem
${REGRESS_TARGETS:M*tls*}: client.crt server.crt 127.0.0.1.crt
${REGRESS_TARGETS:M*multilisten*}: 127.0.0.1.crt
${REGRESS_TARGETS:M*empty*}: empty
${REGRESS_TARGETS:M*toobig*}: toobig
${REGRESS_TARGETS:M*fake*}: fake-ca.crt
${REGRESS_TARGETS:M*sendsyslog*}: sys/syscall.ph
${REGRESS_TARGETS}: ttylog

# make perl syntax check for all args files

.PHONY: syntax libevent

syntax: stamp-syntax

stamp-syntax: ${PERLS} ${ARGS}
.for p in ${PERLS}
	@perl -c ${PERLINC} ${PERLPATH}$p
.endfor
.for a in ${ARGS}
	@perl -c ${PERLPATH}$a
.endfor
	@date >$@

# run the tests with all variants of libevent backend
libevent:
	cd ${.CURDIR} && EVENT_NOKQUEUE=1 EVENT_NOPOLL=1 ${MAKE} regress
	cd ${.CURDIR} && EVENT_NOKQUEUE=1 EVENT_NOSELECT=1 ${MAKE} regress
	cd ${.CURDIR} && EVENT_NOPOLL=1 EVENT_NOSELECT=1 ${MAKE} regress

.include <bsd.regress.mk>