Set up the /usr/tests hierarchy.

Populate /usr/tests with the only test programs that currently live
in the tree (those in lib/libcrypt/tests/) and add all the build
machinery to accompany this change.

In particular:

- Add a WITHOUT_TESTS variable that users can define to request that
  no tests be put in /usr/tests.
- Add a top-level Kyuafile for /usr/tests and a way to create similar
  Kyuafiles in top-level subdirectories.
- Add a BSD.tests.dist file to define the directory layout of
  /usr/tests.

Submitted by:	Julio Merino jmmv google.com
Reviewed by:	sjg
MFC after:	2 weeks
This commit is contained in:
Rui Paulo 2013-10-25 05:25:19 +00:00
parent 5e6f3a8ed7
commit e2197f8018
10 changed files with 165 additions and 0 deletions

View File

@ -85,6 +85,9 @@ SUBDIR+=secure
SUBDIR+=share SUBDIR+=share
.endif .endif
SUBDIR+=sys usr.bin usr.sbin SUBDIR+=sys usr.bin usr.sbin
.if ${MK_TESTS} != "no"
SUBDIR+= tests
.endif
.if ${MK_OFED} != "no" .if ${MK_OFED} != "no"
SUBDIR+=contrib/ofed SUBDIR+=contrib/ofed
.endif .endif
@ -489,6 +492,10 @@ _worldtmp:
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.debug.dist \ mtree -deU -f ${.CURDIR}/etc/mtree/BSD.debug.dist \
-p ${WORLDTMP}/usr/lib >/dev/null -p ${WORLDTMP}/usr/lib >/dev/null
.endif .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} .for _mtree in ${LOCAL_MTREE}
mtree -deU -f ${.CURDIR}/${_mtree} -p ${WORLDTMP} > /dev/null mtree -deU -f ${.CURDIR}/${_mtree} -p ${WORLDTMP} > /dev/null
.endfor .endfor

View File

@ -139,6 +139,9 @@ BIN1+= regdomain.xml
BIN2= netstart pccard_ether rc.suspend rc.resume BIN2= netstart pccard_ether rc.suspend rc.resume
MTREE= BSD.include.dist BSD.root.dist BSD.usr.dist BSD.var.dist 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" .if ${MK_SENDMAIL} != "no"
MTREE+= BSD.sendmail.dist MTREE+= BSD.sendmail.dist
.endif .endif
@ -314,6 +317,9 @@ MTREES+= mtree/BSD.debug.dist /usr/lib
.if ${MK_GROFF} != "no" .if ${MK_GROFF} != "no"
MTREES+= mtree/BSD.groff.dist /usr MTREES+= mtree/BSD.groff.dist /usr
.endif .endif
.if ${MK_TESTS} != "no"
MTREES+= mtree/BSD.tests.dist ${TESTSBASE}
.endif
.if ${MK_SENDMAIL} != "no" .if ${MK_SENDMAIL} != "no"
MTREES+= mtree/BSD.sendmail.dist / MTREES+= mtree/BSD.sendmail.dist /
.endif .endif

12
etc/mtree/BSD.tests.dist Normal file
View File

@ -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
..
..
..

View File

@ -37,4 +37,9 @@ WARNS?= 2
PRECIOUSLIB= PRECIOUSLIB=
.if ${MK_TESTS} != "no"
SUBDIR+= tests
.endif
.include <bsd.lib.mk> .include <bsd.lib.mk>
.include <bsd.subdir.mk>

View File

@ -2,6 +2,8 @@
# exercise libcrypt # exercise libcrypt
TESTSDIR= ${TESTSBASE}/lib/libcrypt
ATF_TESTS_C= crypt_tests ATF_TESTS_C= crypt_tests
CFLAGS+= -I${.CURDIR:H} CFLAGS+= -I${.CURDIR:H}

View File

@ -350,6 +350,7 @@ __DEFAULT_YES_OPTIONS = \
SYSINSTALL \ SYSINSTALL \
TCSH \ TCSH \
TELNET \ TELNET \
TESTS \
TEXTPROC \ TEXTPROC \
TOOLCHAIN \ TOOLCHAIN \
UNBOUND \ UNBOUND \

52
tests/Kyuafile Normal file
View File

@ -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

11
tests/Makefile Normal file
View File

@ -0,0 +1,11 @@
# $FreeBSD$
.include <bsd.own.mk>
TESTS_SUBDIRS= lib
TESTSDIR= ${TESTSBASE}
KYUAFILE= yes
.include <bsd.test.mk>

56
tests/README Normal file
View File

@ -0,0 +1,56 @@
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 category subdirectory within src/tests/ provides the
same Kyuafile with auto-discovery features. For example: src/tests/lib/
holds a generic Makefile to install test-suite related material but such
directory does not know upfront which libraries within src/lib/ will
install tests. For this reason, the Kyuafile in src/tests/lib/ has to
also use the auto-discovery features. The same applies for any other
category subdirectory (e.g. bin, usr.sbin, etc.).
--
$FreeBSD$

13
tests/lib/Makefile Normal file
View File

@ -0,0 +1,13 @@
# $FreeBSD$
.include <bsd.own.mk>
TESTSDIR= ${TESTSBASE}/lib
KYUAFILE= yes
CLEANFILES+= Kyuafile
Kyuafile: ${.CURDIR}/../Kyuafile
cp -f ${.CURDIR}/../Kyuafile .
.include <bsd.test.mk>