svn commit: r257097 - in head: . etc etc/mtree lib/libcrypt lib/libcrypt/tests share/mk tests tests/lib

Rui Paulo rpaulo at FreeBSD.org
Fri Oct 25 05:25:22 UTC 2013


Author: rpaulo
Date: Fri Oct 25 05:25:19 2013
New Revision: 257097
URL: http://svnweb.freebsd.org/changeset/base/257097

Log:
  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

Added:
  head/etc/mtree/BSD.tests.dist   (contents, props changed)
  head/tests/
  head/tests/Kyuafile   (contents, props changed)
  head/tests/Makefile   (contents, props changed)
  head/tests/README   (contents, props changed)
  head/tests/lib/
  head/tests/lib/Makefile   (contents, props changed)
Modified:
  head/Makefile.inc1
  head/etc/Makefile
  head/lib/libcrypt/Makefile
  head/lib/libcrypt/tests/Makefile
  head/share/mk/bsd.own.mk

Modified: head/Makefile.inc1
==============================================================================
--- head/Makefile.inc1	Fri Oct 25 05:12:31 2013	(r257096)
+++ head/Makefile.inc1	Fri Oct 25 05:25:19 2013	(r257097)
@@ -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

Modified: head/etc/Makefile
==============================================================================
--- head/etc/Makefile	Fri Oct 25 05:12:31 2013	(r257096)
+++ head/etc/Makefile	Fri Oct 25 05:25:19 2013	(r257097)
@@ -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
@@ -314,6 +317,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

Added: head/etc/mtree/BSD.tests.dist
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/etc/mtree/BSD.tests.dist	Fri Oct 25 05:25:19 2013	(r257097)
@@ -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
+        ..
+    ..
+..

Modified: head/lib/libcrypt/Makefile
==============================================================================
--- head/lib/libcrypt/Makefile	Fri Oct 25 05:12:31 2013	(r257096)
+++ head/lib/libcrypt/Makefile	Fri Oct 25 05:25:19 2013	(r257097)
@@ -37,4 +37,9 @@ WARNS?=		2
 
 PRECIOUSLIB=
 
+.if ${MK_TESTS} != "no"
+SUBDIR+=	tests
+.endif
+
 .include <bsd.lib.mk>
+.include <bsd.subdir.mk>

Modified: head/lib/libcrypt/tests/Makefile
==============================================================================
--- head/lib/libcrypt/tests/Makefile	Fri Oct 25 05:12:31 2013	(r257096)
+++ head/lib/libcrypt/tests/Makefile	Fri Oct 25 05:25:19 2013	(r257097)
@@ -2,6 +2,8 @@
 
 # exercise libcrypt
 
+TESTSDIR= ${TESTSBASE}/lib/libcrypt
+
 ATF_TESTS_C= crypt_tests
 
 CFLAGS+= -I${.CURDIR:H}

Modified: head/share/mk/bsd.own.mk
==============================================================================
--- head/share/mk/bsd.own.mk	Fri Oct 25 05:12:31 2013	(r257096)
+++ head/share/mk/bsd.own.mk	Fri Oct 25 05:25:19 2013	(r257097)
@@ -350,6 +350,7 @@ __DEFAULT_YES_OPTIONS = \
     SYSINSTALL \
     TCSH \
     TELNET \
+    TESTS \
     TEXTPROC \
     TOOLCHAIN \
     UNBOUND \

Added: head/tests/Kyuafile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/tests/Kyuafile	Fri Oct 25 05:25:19 2013	(r257097)
@@ -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

Added: head/tests/Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/tests/Makefile	Fri Oct 25 05:25:19 2013	(r257097)
@@ -0,0 +1,11 @@
+# $FreeBSD$
+
+.include <bsd.own.mk>
+
+TESTS_SUBDIRS= lib
+
+TESTSDIR= ${TESTSBASE}
+
+KYUAFILE= yes
+
+.include <bsd.test.mk>

Added: head/tests/README
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/tests/README	Fri Oct 25 05:25:19 2013	(r257097)
@@ -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$

Added: head/tests/lib/Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/tests/lib/Makefile	Fri Oct 25 05:25:19 2013	(r257097)
@@ -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>


More information about the svn-src-head mailing list