diff options
author | rpaulo <rpaulo@FreeBSD.org> | 2013-10-25 05:25:19 +0000 |
---|---|---|
committer | rpaulo <rpaulo@FreeBSD.org> | 2013-10-25 05:25:19 +0000 |
commit | d57a569a3a5d32ff5b19feca57fae3584dc928c0 (patch) | |
tree | d2d64f8bb603e244c2f535208834fc5bfd9f5e27 /tests | |
parent | 147cad9747a9320cd3166bcbff36925a05313d5a (diff) | |
download | FreeBSD-src-d57a569a3a5d32ff5b19feca57fae3584dc928c0.zip FreeBSD-src-d57a569a3a5d32ff5b19feca57fae3584dc928c0.tar.gz |
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
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Kyuafile | 52 | ||||
-rw-r--r-- | tests/Makefile | 11 | ||||
-rw-r--r-- | tests/README | 56 | ||||
-rw-r--r-- | tests/lib/Makefile | 13 |
4 files changed, 132 insertions, 0 deletions
diff --git a/tests/Kyuafile b/tests/Kyuafile new file mode 100644 index 0000000..10cf039 --- /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 0000000..1e25954 --- /dev/null +++ b/tests/Makefile @@ -0,0 +1,11 @@ +# $FreeBSD$ + +.include <bsd.own.mk> + +TESTS_SUBDIRS= lib + +TESTSDIR= ${TESTSBASE} + +KYUAFILE= yes + +.include <bsd.test.mk> diff --git a/tests/README b/tests/README new file mode 100644 index 0000000..2dfbc76 --- /dev/null +++ b/tests/README @@ -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$ diff --git a/tests/lib/Makefile b/tests/lib/Makefile new file mode 100644 index 0000000..29b85b3 --- /dev/null +++ b/tests/lib/Makefile @@ -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> |