xref: /openbsd-src/share/man/man5/bsd.regress.mk.5 (revision ae3cb403620ab940fbaabb3055fac045a63d56b7)
1.\" $OpenBSD: bsd.regress.mk.5,v 1.15 2017/08/11 16:51:50 rob Exp $
2.\"
3.\" Copyright (c) 2002 Anil Madhavapeddy
4.\" Copyright (c) 2000 Marc Espie
5.\"
6.\" All rights reserved.
7.\"
8.\" Redistribution and use in source and binary forms, with or without
9.\" modification, are permitted provided that the following conditions
10.\" are met:
11.\" 1. Redistributions of source code must retain the above copyright
12.\"    notice, this list of conditions and the following disclaimer.
13.\" 2. Redistributions in binary form must reproduce the above copyright
14.\"    notice, this list of conditions and the following disclaimer in the
15.\"    documentation and/or other materials provided with the distribution.
16.\"
17.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
18.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
21.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27.\"
28.Dd $Mdocdate: August 11 2017 $
29.Dt BSD.REGRESS.MK 5
30.Os
31.Sh NAME
32.Nm bsd.regress.mk
33.Nd regression test master Makefile fragment
34.Sh SYNOPSIS
35.Fd .include <bsd.regress.mk>
36.Sh DESCRIPTION
37.Nm
38holds the standard routines used by the source regression tests.
39Some variables and targets are for its internal use only.
40The rest are documented here.
41.Pp
42Since this file also includes
43.Nm bsd.prog.mk ,
44all of the usual
45.Ox
46Makefile variables may be used to build the regression
47test programs.
48.Sh TARGETS
49.Bl -tag -width regress
50.It Cm depend
51Build any dependencies required to carry out the current set
52of regression tests.
53.It Cm regress
54Executes all of the regression targets defined in the Makefile.
55If one of the tests fails, the line
56.Qq FAILED
57is printed to the standard output.
58By default, execution continues with the next test and, after running
59all the tests,
60.Sy make Cm regress
61exits with an exit status of 0 even if some of the tests failed.
62.It Cm run-regress-*
63Runs an individual regression test.
64If the exit status of the program indicates an error or timeout,
65then a failure is logged, otherwise the test is marked as a success.
66.El
67.Sh VARIABLES
68.Bl -tag -width Ds
69.It Ev REGRESS_FAIL_EARLY
70If this variable is set to anything but
71.Dq no ,
72the
73.Cm regress
74target will abort as soon as a test fails.
75.It Ev REGRESS_LOG
76Points to the fully-qualified path of a file to which regression
77results are appended.
78Defaults to
79.Pa /dev/null .
80.It Ev REGRESS_MAXTIME
81Maximum limit of CPU seconds to spend on the regression test.
82Exceeding this time will result in a failure being logged.
83.It Ev REGRESS_ROOT_TARGETS
84Targets for which root access is required to run the test.
85The
86.Ev SUDO
87variable is invoked for these targets.
88See also
89.Ev SUDO .
90.It Ev REGRESS_SKIP_SLOW
91If this variable is not empty, skip over all the regression
92tests which have been marked as being 'slow' using the
93.Ev REGRESS_SLOW_TARGETS
94variable.
95.It Ev REGRESS_SLOW_TARGETS
96Targets which are defined as 'slow'.
97All of these tests can be skipped by setting the
98.Ev REGRESS_SKIP_SLOW
99variable.
100.It Ev REGRESS_TARGETS
101Targets which are invoked to run the set of regression tests
102for this Makefile.
103Defaults to
104.Cm run-regress-${PROG} .
105.It Ev SUDO
106Location of a command used to switch to root for certain
107test targets which require it.
108See
109.Xr doas 1 .
110.El
111.Pp
112Some variables are intended to be set at runtime in the environment
113or in
114.Xr mk.conf 5 ,
115but not in the regress Makefile itself.
116.Sh GUIDELINES
117If an individual test passes,
118.Sy make Ar testname
119should return with an exit status of 0.
120If it fails, it should return with a non-zero exit status.
121.Pp
122If a test cannot be executed because a package is not installed or
123some environment variable is not set,
124.Sy make Ar testname
125should print
126.Qq SKIPPED
127to stdout and exit with status 0.
128To skip everything, implement the
129.Cm regress
130target with a command that prints
131.Qq SKIPPED .
132.Pp
133Some tests may require a special setup on the test machine that has
134to be done manually before testing.
135This requirement has to be documented in the Makefile or in a
136.Pa README
137file.
138The test should find out whether the setup exists before running
139and print
140.Qq SKIPPED
141and exit if it is missing.
142.Pp
143Tests should not fail because an intended feature has not been
144implemented yet.
145To avoid such false failures, a test should show the reason, print
146.Qq DISABLED
147to stdout and exit with status 0.
148.Pp
149Tests must be able to run with an
150.Pa obj
151directory.
152In case the test is not linked to the build or the tester forgot
153to run
154.Sy make Cm obj
155before, this directory or symlink may not exist.
156Then the test should run anyway.
157.Pp
158Tests are executed with
159.Sy make Cm regress ,
160but running
161.Sy make Cm all
162or
163.Sy make
164should have the same effect.
165Tests must be runnable by root, and may also succeed when run as a
166regular user.
167Tests must not assume they have a controlling tty,
168to allow them to be run by
169.Xr cron 8 .
170An individual regress test may create a pseudo tty if it needs one.
171.Pp
172Tests should use the binaries installed and the kernel running on
173the local system.
174They may use environment variables to test alternative binaries or
175remote kernels running on other machines.
176In some cases a test may need binaries or libraries or object files
177to be present in
178.Pa /usr/obj/
179that exist only after
180.Sy make Cm build
181was run in
182.Pa /usr/src/ .
183The test must not assume that they have already been built, but
184should run
185.Sy make
186in the appropriate source directory as a dependency.
187For missing generated source or header files a target called
188.Sy make Cm generated
189is common.
190The
191.Pa /usr/src/
192tree can be found with a relative path or with the
193.Ev BSDSRCDIR
194variable.
195.Sh SEE ALSO
196.Xr bsd.port.mk 5
197.Sh HISTORY
198The regression system originally came from
199.Nx ,
200with many tests added by
201.Ox
202since.
203The current Makefile framework was written by Artur Grabowski
204and Marc Espie for
205.Ox 3.1 .
206.Sh BUGS AND LIMITATIONS
207The build system is unable to distinguish between timeouts due to
208.Ev REGRESS_MAXTIME
209being exceeded, or a genuine failure occurring.
210