From ff2e907130712001fe7887757f212477df35caed Mon Sep 17 00:00:00 2001 From: jmmv Date: Sat, 28 Dec 2013 20:05:31 +0000 Subject: [PATCH] Set up the /usr/tests hierarchy. This is a MFC of the following into stable/10: - r257097 Set up the /usr/tests hierarchy. - r257098 Add missing WITHOUTTESTS file. - r257100 Add a tests(7) manual page. - r257105 Disable WITHTESTS= for now. - r257848 Fix buildworld when WITHTESTS is enabled. - r257850 Subsume the functionality of MKATF into MKTESTS. - r257851 Handle the removal of the test suite when WITHOUTTESTS=yes. - r257852 Install category Kyuafiles from their category directories. - r258232 Install BSD.tests.mtree when MKTESTS is yes. Note that building with WITH_TESTS is still broken at this point (and hence why WITHOUT_TESTS is the set as the default). Subsequent pullups will fix the remaining issues. git-svn-id: svn://svn.freebsd.org/base/stable/10@260013 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f --- Makefile.inc1 | 37 +++-- UPDATING | 6 + etc/Makefile | 6 + etc/mtree/BSD.tests.dist | 12 ++ etc/mtree/Makefile | 4 + lib/Makefile | 12 +- lib/libcrypt/Makefile | 5 + lib/libcrypt/tests/Makefile | 2 + lib/tests/Makefile | 10 ++ libexec/Makefile | 8 +- share/doc/Makefile | 2 +- share/man/man1/Makefile | 2 +- share/man/man4/Makefile | 2 +- share/man/man7/Makefile | 4 + share/man/man7/hier.7 | 6 + share/man/man7/tests.7 | 199 +++++++++++++++++++++++ share/mk/Makefile | 2 +- share/mk/bsd.own.mk | 15 ++ tests/Kyuafile | 52 ++++++ tests/Makefile | 10 ++ tests/README | 55 +++++++ tests/lib/Makefile | 13 ++ tools/build/mk/OptionalObsoleteFiles.inc | 105 ++++++------ tools/build/options/WITHOUT_TESTS | 2 + usr.bin/Makefile | 8 +- 25 files changed, 499 insertions(+), 80 deletions(-) create mode 100644 etc/mtree/BSD.tests.dist create mode 100644 lib/tests/Makefile create mode 100644 share/man/man7/tests.7 create mode 100644 tests/Kyuafile create mode 100644 tests/Makefile create mode 100644 tests/README create mode 100644 tests/lib/Makefile create mode 100644 tools/build/options/WITHOUT_TESTS diff --git a/Makefile.inc1 b/Makefile.inc1 index 6fd6835db..13c676aa5 100644 --- a/Makefile.inc1 +++ b/Makefile.inc1 @@ -85,6 +85,9 @@ SUBDIR+=secure SUBDIR+=share .endif SUBDIR+=sys usr.bin usr.sbin +.if ${MK_TESTS} != "no" +SUBDIR+= tests +.endif .if ${MK_OFED} != "no" SUBDIR+=contrib/ofed .endif @@ -489,6 +492,10 @@ _worldtmp: mtree -deU -f ${.CURDIR}/etc/mtree/BSD.debug.dist \ -p ${WORLDTMP}/usr/lib >/dev/null .endif +.if ${MK_TESTS} != "no" + mtree -deU -f ${.CURDIR}/etc/mtree/BSD.tests.dist \ + -p ${WORLDTMP}${TESTSBASE} >/dev/null +.endif .for _mtree in ${LOCAL_MTREE} mtree -deU -f ${.CURDIR}/${_mtree} -p ${WORLDTMP} > /dev/null .endfor @@ -1487,7 +1494,7 @@ _prebuild_libs= ${_kerberos5_lib_libasn1} \ ${_secure_lib_libcrypto} ${_lib_libldns} \ ${_secure_lib_libssh} ${_secure_lib_libssl} -.if ${MK_ATF} != "no" +.if ${MK_TESTS} != "no" _lib_atf_libatf_c= lib/atf/libatf-c .endif @@ -1597,10 +1604,12 @@ ${_lib}__PL: .PHONY .MAKE .if exists(${.CURDIR}/${_lib}) ${_+_}@${ECHODIR} "===> ${_lib} (obj,depend,all,install)"; \ cd ${.CURDIR}/${_lib} && \ - ${MAKE} DIRPRFX=${_lib}/ obj && \ - ${MAKE} DIRPRFX=${_lib}/ depend && \ - ${MAKE} -DNO_PROFILE -DNO_PIC DIRPRFX=${_lib}/ all && \ - ${MAKE} -DNO_PROFILE -DNO_PIC DIRPRFX=${_lib}/ install + ${MAKE} -DNO_TESTS DIRPRFX=${_lib}/ obj && \ + ${MAKE} -DNO_TESTS DIRPRFX=${_lib}/ depend && \ + ${MAKE} -DNO_TESTS -DNO_PROFILE -DNO_PIC \ + DIRPRFX=${_lib}/ all && \ + ${MAKE} -DNO_TESTS -DNO_PROFILE -DNO_PIC \ + DIRPRFX=${_lib}/ install .endif .endfor @@ -1609,10 +1618,10 @@ ${_lib}__L: .PHONY .MAKE .if exists(${.CURDIR}/${_lib}) ${_+_}@${ECHODIR} "===> ${_lib} (obj,depend,all,install)"; \ cd ${.CURDIR}/${_lib} && \ - ${MAKE} DIRPRFX=${_lib}/ obj && \ - ${MAKE} DIRPRFX=${_lib}/ depend && \ - ${MAKE} DIRPRFX=${_lib}/ all && \ - ${MAKE} DIRPRFX=${_lib}/ install + ${MAKE} -DNO_TESTS DIRPRFX=${_lib}/ obj && \ + ${MAKE} -DNO_TESTS DIRPRFX=${_lib}/ depend && \ + ${MAKE} -DNO_TESTS DIRPRFX=${_lib}/ all && \ + ${MAKE} -DNO_TESTS DIRPRFX=${_lib}/ install .endif .endfor @@ -1622,10 +1631,12 @@ ${_lib}__L: .PHONY .MAKE lib/libpam__L: .PHONY .MAKE ${_+_}@${ECHODIR} "===> lib/libpam (obj,depend,all,install)"; \ cd ${.CURDIR}/lib/libpam && \ - ${MAKE} DIRPRFX=lib/libpam/ obj && \ - ${MAKE} DIRPRFX=lib/libpam/ depend && \ - ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET all && \ - ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET install + ${MAKE} -DNO_TESTS DIRPRFX=lib/libpam/ obj && \ + ${MAKE} -DNO_TESTS DIRPRFX=lib/libpam/ depend && \ + ${MAKE} -DNO_TESTS DIRPRFX=lib/libpam/ \ + -D_NO_LIBPAM_SO_YET all && \ + ${MAKE} -DNO_TESTS DIRPRFX=lib/libpam/ \ + -D_NO_LIBPAM_SO_YET install _prereq_libs: ${_prereq_libs:S/$/__PL/} _startup_libs: ${_startup_libs:S/$/__L/} diff --git a/UPDATING b/UPDATING index cee1817cb..0638cc6cf 100644 --- a/UPDATING +++ b/UPDATING @@ -27,6 +27,12 @@ older version of current is a bit fragile. big-endian integer in accordance with RFC 4402. __FreeBSD_version is bumped to 1000701. +20131108: + The WITHOUT_ATF build knob has been removed and its functionality + has been subsumed into the more generic WITHOUT_TESTS. If you were + using the former to disable the build of the ATF libraries, you + should change your settings to use the latter. + 20131031: The default version of mtree is nmtree which is obtained from NetBSD. The output is generally the same, but may vary diff --git a/etc/Makefile b/etc/Makefile index 0370b99a4..d763df6d4 100644 --- a/etc/Makefile +++ b/etc/Makefile @@ -139,6 +139,9 @@ BIN1+= regdomain.xml BIN2= netstart pccard_ether rc.suspend rc.resume MTREE= BSD.include.dist BSD.root.dist BSD.usr.dist BSD.var.dist +.if ${MK_TESTS} != "no" +MTREE+= BSD.tests.dist +.endif .if ${MK_SENDMAIL} != "no" MTREE+= BSD.sendmail.dist .endif @@ -317,6 +320,9 @@ MTREES+= mtree/BSD.debug.dist /usr/lib .if ${MK_GROFF} != "no" MTREES+= mtree/BSD.groff.dist /usr .endif +.if ${MK_TESTS} != "no" +MTREES+= mtree/BSD.tests.dist ${TESTSBASE} +.endif .if ${MK_SENDMAIL} != "no" MTREES+= mtree/BSD.sendmail.dist / .endif diff --git a/etc/mtree/BSD.tests.dist b/etc/mtree/BSD.tests.dist new file mode 100644 index 000000000..37f37e918 --- /dev/null +++ b/etc/mtree/BSD.tests.dist @@ -0,0 +1,12 @@ +# $FreeBSD$ +# +# Please see the file src/etc/mtree/README before making changes to this file. +# + +/set type=dir uname=root gname=wheel mode=0755 +. + lib + libcrypt + .. + .. +.. diff --git a/etc/mtree/Makefile b/etc/mtree/Makefile index 3228c6c24..f24867b8e 100644 --- a/etc/mtree/Makefile +++ b/etc/mtree/Makefile @@ -6,6 +6,7 @@ FILES= ${_BSD.debug.dist} \ BSD.include.dist \ BSD.root.dist \ ${_BSD.sendmail.dist} \ + ${_BSD.tests.dist} \ BSD.usr.dist \ BSD.var.dist @@ -18,6 +19,9 @@ _BSD.groff.dist= BSD.groff.dist .if ${MK_SENDMAIL} != "no" _BSD.sendmail.dist= BSD.sendmail.dist .endif +.if ${MK_TESTS} != "no" +_BSD.tests.dist= BSD.tests.dist +.endif NO_OBJ= FILESDIR= /etc/mtree diff --git a/lib/Makefile b/lib/Makefile index 1ededeccd..e78ff8f6a 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -127,7 +127,8 @@ SUBDIR= ${SUBDIR_ORDERED} \ libyaml \ libz \ ${_atf} \ - ${_clang} + ${_clang} \ + ${_tests} .if exists(${.CURDIR}/csu/${MACHINE_ARCH}-elf) _csu=csu/${MACHINE_ARCH}-elf @@ -141,10 +142,6 @@ _csu=csu # NB: keep these sorted by MK_* knobs -.if ${MK_ATF} != "no" -_atf= atf -.endif - .if ${MK_ATM} != "no" _libngatm= libngatm .endif @@ -254,6 +251,11 @@ _libsmutil= libsmutil _libtelnet= libtelnet .endif +.if ${MK_TESTS} != "no" +_atf= atf +_tests= tests +.endif + .if ${MK_UNBOUND} != "no" _libunbound= libunbound .endif diff --git a/lib/libcrypt/Makefile b/lib/libcrypt/Makefile index 7274e287b..798b4b635 100644 --- a/lib/libcrypt/Makefile +++ b/lib/libcrypt/Makefile @@ -37,4 +37,9 @@ WARNS?= 2 PRECIOUSLIB= +.if ${MK_TESTS} != "no" +SUBDIR+= tests +.endif + .include +.include diff --git a/lib/libcrypt/tests/Makefile b/lib/libcrypt/tests/Makefile index 8c818bdda..51adc2dcc 100644 --- a/lib/libcrypt/tests/Makefile +++ b/lib/libcrypt/tests/Makefile @@ -2,6 +2,8 @@ # exercise libcrypt +TESTSDIR= ${TESTSBASE}/lib/libcrypt + ATF_TESTS_C= crypt_tests CFLAGS+= -I${.CURDIR:H} diff --git a/lib/tests/Makefile b/lib/tests/Makefile new file mode 100644 index 000000000..935fd709d --- /dev/null +++ b/lib/tests/Makefile @@ -0,0 +1,10 @@ +# $FreeBSD$ + +.include + +TESTSDIR= ${TESTSBASE}/lib + +.PATH: ${.CURDIR:H:H}/tests +KYUAFILE= yes + +.include diff --git a/libexec/Makefile b/libexec/Makefile index 0b9c9618a..576335f2d 100644 --- a/libexec/Makefile +++ b/libexec/Makefile @@ -33,10 +33,6 @@ SUBDIR= ${_atf} \ ulog-helper \ ${_ypxfr} -.if ${MK_ATF} != "no" -_atf= atf -.endif - .if ${MK_AT} != "no" _atrun= atrun .endif @@ -76,4 +72,8 @@ _smrsh= smrsh _telnetd= telnetd .endif +.if ${MK_TESTS} != "no" +_atf= atf +.endif + .include diff --git a/share/doc/Makefile b/share/doc/Makefile index 1ec57e86d..a4fe61d6c 100644 --- a/share/doc/Makefile +++ b/share/doc/Makefile @@ -9,7 +9,7 @@ SUBDIR= ${_IPv6} \ ${_llvm} \ ${_roffdocs} -.if ${MK_ATF} != "no" +.if ${MK_TESTS} != "no" _atf= atf .endif diff --git a/share/man/man1/Makefile b/share/man/man1/Makefile index 23bc1d8ae..97885a6a8 100644 --- a/share/man/man1/Makefile +++ b/share/man/man1/Makefile @@ -5,7 +5,7 @@ MAN= builtin.1 intro.1 -.if ${MK_ATF} != "no" +.if ${MK_TESTS} != "no" ATF= ${.CURDIR}/../../../contrib/atf .PATH: ${ATF}/doc MAN+= atf-test-program.1 diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile index 260b9b58d..f3e8a540f 100644 --- a/share/man/man4/Makefile +++ b/share/man/man4/Makefile @@ -827,7 +827,7 @@ _nvram2env.4= nvram2env.4 SUBDIR= man4.${MACHINE_CPUARCH} .endif -.if ${MK_ATF} != "no" +.if ${MK_TESTS} != "no" ATF= ${.CURDIR}/../../../contrib/atf .PATH: ${ATF}/doc _atf_test_case.4= atf-test-case.4 diff --git a/share/man/man7/Makefile b/share/man/man7/Makefile index 7e9c43bcd..6b9402c4c 100644 --- a/share/man/man7/Makefile +++ b/share/man/man7/Makefile @@ -29,6 +29,10 @@ MAN= adding_user.7 \ sticky.7 \ tuning.7 +.if ${MK_TESTS} != "no" +MAN+= tests.7 +.endif + MLINKS= intro.7 miscellaneous.7 MLINKS+= security.7 securelevel.7 MLINKS+= c99.7 c.7 diff --git a/share/man/man7/hier.7 b/share/man/man7/hier.7 index 9c4f14b0e..b11378773 100644 --- a/share/man/man7/hier.7 +++ b/share/man/man7/hier.7 @@ -702,6 +702,12 @@ source code for files in source code for files in .Pa /usr/sbin .El +.Pp +.It Pa tests/ +The +.Fx +test suite. +See tests(7) for more details. .El .It Pa /var/ multi-purpose log, temporary, transient, and spool files diff --git a/share/man/man7/tests.7 b/share/man/man7/tests.7 new file mode 100644 index 000000000..1570d5055 --- /dev/null +++ b/share/man/man7/tests.7 @@ -0,0 +1,199 @@ +.\" $FreeBSD$ +.\" $NetBSD: tests.kyua.7,v 1.2 2013/07/20 21:39:59 wiz Exp $ +.\" +.\" Copyright (c) 2010 The NetBSD Foundation, Inc. +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND +.\" CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +.\" IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd October 19, 2013 +.Dt TESTS 7 +.Os +.Sh NAME +.Nm tests +.Nd introduction to the FreeBSD test suite +.Sh DESCRIPTION +The +.Fx +test suite provides a collection of automated tests for two major purposes. +On the one hand, the test suite aids +.Em developers +in catching bugs and regressions in the code when they performing modifications +to the source tree. +On the other hand, the test suite allows +.Em end users +(and, in particular, system administrators) to verify that fresh installations +of the +.Fx +operating system behave correctly in their hardware platform and also to ensure +that the system does not suffer from regressions during regular system +operation and maintenance. +.Pp +The +.Fx +test suite is installed under the +.Pa /usr/tests +hierarchy. +.Pp +This manual page describes how to execute the test suite and how to configure +some of its optional features. +.Ss When to run the tests? +Before diving into the details of how to run the test suite, here are some +scenarios in which you should be running them: +.Bl -bullet -offset indent +.It +After a fresh installation of +.Fx +to ensure that the system works correctly on your hardware platform. +.It +After an upgrade of +.Fx +to a different version to ensure that the new code works well on your +hardware platform and that the upgrade did not introduce regressions in your +configuration. +.It +After performing changes to the source tree to catch any bugs and/or regressions +introduced by the modifications. +.It +Periodically, maybe from a +.Xr cron 8 +job, to ensure that any changes to the system (such as the installation of +third-party packages or manual modifications to configuration files) do not +introduce unexpected failures. +.El +.Ss Running the tests +First of all, you will need to install the +.Sq ports/devel/kyua +package. +.Pp +Use the following command to run the whole test suite: +.Bd -literal -offset indent +$ kyua test -k /usr/tests/Kyuafile +.Ed +.Pp +The above will go through all test programs in +.Pa /usr/tests +recursively, execute them, store their results and debugging data in Kyua +database (by default in +.Pa ~/.kyua/store.db ) , +and print a summary of the results. +This summary includes a brief count of all total tests run and how many of +them failed. +.Pp +It is possible to restrict which tests to run by providing their names in +the command line. +For example, this would execute the tests for the +.Xr cp 1 +and +.Xr cut 1 +utilities: +.Bd -literal -offset indent +$ kyua test -k /usr/tests/Kyuafile bin/cp usr.bin/cut +.Ed +.Ss Obtaining reports of the tests execution +Additional information of the results of the execution can be later extracted +from the database by using the various reporting commands of Kyua. +For example, the following would extract a plain-text report of the executed +tests and show which ones failed: +.Bd -literal -offset indent +$ kyua report +.Ed +.Pp +This other example would generate an HTML report ready to be published on a +web server: +.Bd -literal -offset indent +$ kyua report-html --output ~/public_html/tests +.Ed +.Pp +For further details on the command-line interface of Kyua, please refer +to its manual page +.Xr kyua 1 . +.\".Ss Configuring the tests +.\"Some test cases in the +.\".Fx +.\"test suite require the administrator to manually set up some configuration +.\"properties before they can run. +.\"Unless these properties are defined, the tests that require them will be marked +.\"as skipped and thus they will not be really executed. +.\".Pp +.\"Test suites are configured by defining the values to their configuration +.\"variables in +.\".Pa /usr/local/etc/kyua/kyua.conf . +.\"The format of this file is detailed in +.\".Xr kyua.conf 5 . +.\".Pp +.\"The following configuration variables are available in the +.\".Fx +.\"test suite: +.\".Bl -tag +.\".It NONE REGISTERED YET +.\"TBD. +.Ss What to do if something fails? +If there is +.Em any failure +during the execution of the test suite, please considering reporting it to the +.Fx +developers so that the failure can be analyzed and fixed. +To do so, either send a message to the appropriate mailing list or file a +problem report. +For more details please refer to: +.Bl -bullet -offset indent -compact +.It +.Lk http://lists.freebsd.org/ "FreeBSD Mailing Lists" +.It +.Lk http://www.freebsd.org/send-pr.html "Submit a FreeBSD Problem Report" +.El +.Sh FILES +.Bl -tag -compact -width usrXlocalXetcXkyuaXkyuaXconfXX +.It Pa /usr/local/etc/kyua/kyua.conf +System-wide configuration file for +.Xr kyua 1 . +.It Pa ~/.kyua/kyua.conf +User-specific configuration file for +.Xr kyua 1 ; +overrides the system file. +.It Pa ~/.kyua/store.db +Default database used by Kyua to maintain the data of the executed tests. +.It Pa /usr/tests/ +Location of the +.Fx +test suite. +.It Pa /usr/tests/Kyuafile +Top-level test suite definition file. +.El +.Sh SEE ALSO +.Xr kyua 1 . +.Sh HISTORY +The collection of test programs in +.Pa /usr/tests +first appeared in +.Fx 11.0 . +.Pp +The +.Nm +manual page first appeared in +.Nx 6.0 +and was later ported to +.Fx 11.0 . +.Sh AUTHORS +.An Julio Merino Aq Mt jmmv@google.com diff --git a/share/mk/Makefile b/share/mk/Makefile index d07402b89..c776134e0 100644 --- a/share/mk/Makefile +++ b/share/mk/Makefile @@ -43,7 +43,7 @@ FILES= \ NO_OBJ= FILESDIR= ${BINDIR}/mk -.if ${MK_ATF} != "no" +.if ${MK_TESTS} != "no" FILES+= atf.test.mk FILES+= plain.test.mk FILES+= tap.test.mk diff --git a/share/mk/bsd.own.mk b/share/mk/bsd.own.mk index 972a5268c..c292d6e52 100644 --- a/share/mk/bsd.own.mk +++ b/share/mk/bsd.own.mk @@ -376,6 +376,7 @@ __DEFAULT_NO_OPTIONS = \ PKGTOOLS \ SHARED_TOOLCHAIN \ SVN \ + TESTS \ USB_GADGET_EXAMPLES # @@ -555,6 +556,20 @@ MK_CLANG_FULL:= no MK_LLDB:= no .endif +.if defined(NO_TESTS) +# This should be handled above along the handling of all other NO_* options. +# However, the above is broken when WITH_*=yes are passed to make(1) as +# command line arguments. See PR bin/183762. +# +# Because the TESTS option is new and it will default to yes, it's likely +# that people will pass WITHOUT_TESTS=yes to make(1) directly and get a broken +# build. So, just in case, it's better to explicitly handle this case here. +# +# TODO(jmmv): Either fix make to allow us putting this override where it +# belongs above or fix this file to cope with the make bug. +MK_TESTS:= no +.endif + # # Set defaults for the MK_*_SUPPORT variables. # diff --git a/tests/Kyuafile b/tests/Kyuafile new file mode 100644 index 000000000..10cf039ae --- /dev/null +++ b/tests/Kyuafile @@ -0,0 +1,52 @@ +-- $FreeBSD$ +-- +-- Copyright 2011 Google Inc. +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are +-- met: +-- +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * Redistributions in binary form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- * Neither the name of Google Inc. nor the names of its contributors +-- may be used to endorse or promote products derived from this software +-- without specific prior written permission. +-- +-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +-- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +-- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +-- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +-- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +-- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +-- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +-- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +-- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +-- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-- Automatically recurses into any subdirectory that holds a Kyuafile. +-- As such, this Kyuafile is suitable for installation into the root of +-- the tests hierarchy as well as into any other subdirectory that needs +-- "auto-discovery" of tests. +-- +-- This file is based on the Kyuafile.top sample file distributed in the +-- kyua-cli package. + +syntax(2) + +local directory = fs.dirname(current_kyuafile()) +for file in fs.files(directory) do + if file == "." or file == ".." then + -- Skip these special entries. + else + local kyuafile_relative = fs.join(file, "Kyuafile") + local kyuafile_absolute = fs.join(directory, kyuafile_relative) + if fs.exists(kyuafile_absolute) then + include(kyuafile_relative) + end + end +end diff --git a/tests/Makefile b/tests/Makefile new file mode 100644 index 000000000..88386eb37 --- /dev/null +++ b/tests/Makefile @@ -0,0 +1,10 @@ +# $FreeBSD$ + +.include + +SUBDIR= # still empty + +TESTSDIR= ${TESTSBASE} +KYUAFILE= yes + +.include diff --git a/tests/README b/tests/README new file mode 100644 index 000000000..416cea7f0 --- /dev/null +++ b/tests/README @@ -0,0 +1,55 @@ +src/tests: The FreeBSD test suite +================================= + +This file describes the build infrastructure of the FreeBSD test suite. +If you are only interested in using the test suite itself, please refer +to tests(7) instead. + +The build of the test suite is organized in the following manner: + +* The build of all test artifacts is protected by the MK_TESTS knob. + The user can disable these with the WITHOUT_TESTS setting in + src.conf(5). + +* The goal for /usr/tests/ (the installed test programs) is to follow + the same hierarchy as /usr/src/ wherever possible, which in turn drives + several of the design decisions described below. This simplifies the + discoverability of tests. We want a mapping such as: + + /usr/src/bin/cp/ -> /usr/tests/bin/cp/ + /usr/src/lib/libc/ -> /usr/tests/lib/libc/ + /usr/src/usr.bin/cut/ -> /usr/tests/usr.bin/cut/ + ... and many more ... + +* Test programs for specific utilities and libraries are located next + to the source code of such programs. For example, the tests for the + src/lib/libcrypt/ library live in src/lib/libcrypt/tests/. The tests/ + subdirectory is optional and should, in general, be avoided. + +* The src/tests/ hierarchy (this directory) provides generic test + infrastructure and glue code to join all test programs together into + a single test suite definition. + +* The src/tests/ hierarchy also includes cross-functional test programs: + i.e. test programs that cover more than a single utility or library + and thus don't fit anywhere else in the tree. Consider this to follow + the same rationale as src/share/man/: this directory contains generic + manual pages while the manual pages that are specific to individual + tools or libraries live next to the source code. + +In order to keep the src/tests/ hierarchy decoupled from the actual test +programs being installed --which is a worthy goal because it simplifies +the addition of new test programs and simplifies the maintenance of the +tree-- the top-level Kyuafile does not know which subdirectories may +exist upfront. Instead, such Kyuafile automatically detects, at +run-time, which */Kyuafile files exist and uses those directly. + +Similarly, every directory in src/ that wants to install a Kyuafile to +just recurse into other subdirectories reuses this Kyuafile with +auto-discovery features. As an example, take a look at src/lib/tests/ +whose sole purpose is to install a Kyuafile into /usr/tests/lib/. +The goal in this specific case is for /usr/tests/lib/ to be generated +entirely from src/lib/. + +-- +$FreeBSD$ diff --git a/tests/lib/Makefile b/tests/lib/Makefile new file mode 100644 index 000000000..29b85b3f2 --- /dev/null +++ b/tests/lib/Makefile @@ -0,0 +1,13 @@ +# $FreeBSD$ + +.include + +TESTSDIR= ${TESTSBASE}/lib + +KYUAFILE= yes + +CLEANFILES+= Kyuafile +Kyuafile: ${.CURDIR}/../Kyuafile + cp -f ${.CURDIR}/../Kyuafile . + +.include diff --git a/tools/build/mk/OptionalObsoleteFiles.inc b/tools/build/mk/OptionalObsoleteFiles.inc index 82d837336..c9e1c0293 100644 --- a/tools/build/mk/OptionalObsoleteFiles.inc +++ b/tools/build/mk/OptionalObsoleteFiles.inc @@ -68,56 +68,6 @@ OLD_FILES+=usr/share/man/man1/batch.1.gz OLD_FILES+=usr/share/man/man8/atrun.8.gz .endif -.if ${MK_ATF} == no -OLD_FILES+=usr/bin/atf-sh -OLD_DIRS+=usr/include/atf-c -OLD_FILES+=usr/include/atf-c/build.h -OLD_FILES+=usr/include/atf-c/check.h -OLD_FILES+=usr/include/atf-c/config.h -OLD_FILES+=usr/include/atf-c/defs.h -OLD_FILES+=usr/include/atf-c/error.h -OLD_FILES+=usr/include/atf-c/error_fwd.h -OLD_FILES+=usr/include/atf-c/macros.h -OLD_FILES+=usr/include/atf-c/tc.h -OLD_FILES+=usr/include/atf-c/tp.h -OLD_FILES+=usr/include/atf-c/utils.h -OLD_FILES+=usr/include/atf-c/atf-c.h -OLD_FILES+=usr/include/atf-c.h -OLD_DIRS+=usr/include/atf-c++ -OLD_FILES+=usr/include/atf-c++/build.hpp -OLD_FILES+=usr/include/atf-c++/check.hpp -OLD_FILES+=usr/include/atf-c++/config.hpp -OLD_FILES+=usr/include/atf-c++/macros.hpp -OLD_FILES+=usr/include/atf-c++/tests.hpp -OLD_FILES+=usr/include/atf-c++/utils.hpp -OLD_FILES+=usr/include/atf-c++/atf-c++.hpp -OLD_FILES+=usr/include/atf-c++.hpp -OLD_FILES+=usr/lib/libatf-c_p.a -OLD_FILES+=usr/lib/libatf-c.so.1 -OLD_FILES+=usr/lib/libatf-c.so -OLD_FILES+=usr/lib/libatf-c++.a -OLD_FILES+=usr/lib/libatf-c++_p.a -OLD_FILES+=usr/lib/libatf-c++.so.1 -OLD_FILES+=usr/lib/libatf-c++.so -OLD_FILES+=usr/lib/libatf-c.a -OLD_FILES+=usr/libexec/atf-check -OLD_DIRS+=usr/share/atf -OLD_FILES+=usr/share/atf/libatf-sh.subr -OLD_DIRS+=usr/share/doc/atf -OLD_FILES+=usr/share/doc/atf/AUTHORS -OLD_FILES+=usr/share/doc/atf/COPYING -OLD_FILES+=usr/share/doc/atf/NEWS -OLD_FILES+=usr/share/doc/atf/README -OLD_FILES+=usr/share/man/man1/atf-check.1.gz -OLD_FILES+=usr/share/man/man1/atf-sh.1.gz -OLD_FILES+=usr/share/man/man1/atf-test-program.1.gz -OLD_FILES+=usr/share/man/man3/atf-c-api.3.gz -OLD_FILES+=usr/share/man/man3/atf-c++-api.3.gz -OLD_FILES+=usr/share/man/man3/atf-sh-api.3.gz -OLD_FILES+=usr/share/man/man4/atf-test-case.4.gz -OLD_FILES+=usr/share/mk/atf.test.mk -.endif - .if ${MK_ATM} == no OLD_FILES+=rescue/atmconfig OLD_FILES+=sbin/atmconfig @@ -4141,6 +4091,61 @@ OLD_FILES+=usr/share/man/man1/telnet.1.gz OLD_FILES+=usr/share/man/man8/telnetd.8.gz .endif +.if ${MK_TESTS} == no +# ATF libraries. +OLD_FILES+=usr/bin/atf-sh +OLD_DIRS+=usr/include/atf-c +OLD_FILES+=usr/include/atf-c/build.h +OLD_FILES+=usr/include/atf-c/check.h +OLD_FILES+=usr/include/atf-c/config.h +OLD_FILES+=usr/include/atf-c/defs.h +OLD_FILES+=usr/include/atf-c/error.h +OLD_FILES+=usr/include/atf-c/error_fwd.h +OLD_FILES+=usr/include/atf-c/macros.h +OLD_FILES+=usr/include/atf-c/tc.h +OLD_FILES+=usr/include/atf-c/tp.h +OLD_FILES+=usr/include/atf-c/utils.h +OLD_FILES+=usr/include/atf-c.h +OLD_DIRS+=usr/include/atf-c++ +OLD_FILES+=usr/include/atf-c++/build.hpp +OLD_FILES+=usr/include/atf-c++/check.hpp +OLD_FILES+=usr/include/atf-c++/config.hpp +OLD_FILES+=usr/include/atf-c++/macros.hpp +OLD_FILES+=usr/include/atf-c++/tests.hpp +OLD_FILES+=usr/include/atf-c++/utils.hpp +OLD_FILES+=usr/include/atf-c++.hpp +OLD_FILES+=usr/lib/libatf-c_p.a +OLD_FILES+=usr/lib/libatf-c.so.1 +OLD_FILES+=usr/lib/libatf-c.so +OLD_FILES+=usr/lib/libatf-c++.a +OLD_FILES+=usr/lib/libatf-c++_p.a +OLD_FILES+=usr/lib/libatf-c++.so.1 +OLD_FILES+=usr/lib/libatf-c++.so +OLD_FILES+=usr/lib/libatf-c.a +OLD_FILES+=usr/libexec/atf-check +OLD_DIRS+=usr/share/atf +OLD_FILES+=usr/share/atf/libatf-sh.subr +OLD_DIRS+=usr/share/doc/atf +OLD_FILES+=usr/share/doc/atf/AUTHORS +OLD_FILES+=usr/share/doc/atf/COPYING +OLD_FILES+=usr/share/doc/atf/NEWS +OLD_FILES+=usr/share/doc/atf/README +OLD_FILES+=usr/share/man/man1/atf-check.1.gz +OLD_FILES+=usr/share/man/man1/atf-sh.1.gz +OLD_FILES+=usr/share/man/man1/atf-test-program.1.gz +OLD_FILES+=usr/share/man/man3/atf-c-api.3.gz +OLD_FILES+=usr/share/man/man3/atf-c++-api.3.gz +OLD_FILES+=usr/share/man/man3/atf-sh-api.3.gz +OLD_FILES+=usr/share/man/man4/atf-test-case.4.gz +OLD_FILES+=usr/share/mk/atf.test.mk + +# Test suite. +TESTS_DIRS!=find ${DESTDIR}/usr/tests -type d | sed -e 's,^${DESTDIR}/,,' +OLD_DIRS+=${TESTS_DIRS} +TESTS_FILES!=find ${DESTDIR}/usr/tests \! -type d | sed -e 's,^${DESTDIR}/,,' +OLD_FILES+=${TESTS_FILES} +.endif + #.if ${MK_TOOLCHAIN} == no # to be filled in #.endif diff --git a/tools/build/options/WITHOUT_TESTS b/tools/build/options/WITHOUT_TESTS new file mode 100644 index 000000000..05aeeb86a --- /dev/null +++ b/tools/build/options/WITHOUT_TESTS @@ -0,0 +1,2 @@ +.\" $FreeBSD$ +Set to not build any test programs nor install them in /usr/tests. diff --git a/usr.bin/Makefile b/usr.bin/Makefile index 92958ae55..cbee3fb2b 100644 --- a/usr.bin/Makefile +++ b/usr.bin/Makefile @@ -210,10 +210,6 @@ SUBDIR= alias \ SUBDIR+= at .endif -.if ${MK_ATF} != "no" -_atf= atf -.endif - .if ${MK_ATM} != "no" SUBDIR+= atm .endif @@ -332,6 +328,10 @@ SUBDIR+= vacation SUBDIR+= telnet .endif +.if ${MK_TESTS} != "no" +_atf= atf +.endif + .if ${MK_TEXTPROC} != "no" SUBDIR+= checknr SUBDIR+= colcrt -- 2.42.0