1*00b67f09SDavid van Moolenbroek.\" $NetBSD: atf-run.1,v 1.3 2014/12/10 04:38:03 christos Exp $ 2*00b67f09SDavid van Moolenbroek.\" 3*00b67f09SDavid van Moolenbroek.\" 4*00b67f09SDavid van Moolenbroek.\" Automated Testing Framework (atf) 5*00b67f09SDavid van Moolenbroek.\" 6*00b67f09SDavid van Moolenbroek.\" Copyright (c) 2007 The NetBSD Foundation, Inc. 7*00b67f09SDavid van Moolenbroek.\" All rights reserved. 8*00b67f09SDavid van Moolenbroek.\" 9*00b67f09SDavid van Moolenbroek.\" Redistribution and use in source and binary forms, with or without 10*00b67f09SDavid van Moolenbroek.\" modification, are permitted provided that the following conditions 11*00b67f09SDavid van Moolenbroek.\" are met: 12*00b67f09SDavid van Moolenbroek.\" 1. Redistributions of source code must retain the above copyright 13*00b67f09SDavid van Moolenbroek.\" notice, this list of conditions and the following disclaimer. 14*00b67f09SDavid van Moolenbroek.\" 2. Redistributions in binary form must reproduce the above copyright 15*00b67f09SDavid van Moolenbroek.\" notice, this list of conditions and the following disclaimer in the 16*00b67f09SDavid van Moolenbroek.\" documentation and/or other materials provided with the distribution. 17*00b67f09SDavid van Moolenbroek.\" 18*00b67f09SDavid van Moolenbroek.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 19*00b67f09SDavid van Moolenbroek.\" CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 20*00b67f09SDavid van Moolenbroek.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 21*00b67f09SDavid van Moolenbroek.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 22*00b67f09SDavid van Moolenbroek.\" IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 23*00b67f09SDavid van Moolenbroek.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24*00b67f09SDavid van Moolenbroek.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 25*00b67f09SDavid van Moolenbroek.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26*00b67f09SDavid van Moolenbroek.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 27*00b67f09SDavid van Moolenbroek.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 28*00b67f09SDavid van Moolenbroek.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 29*00b67f09SDavid van Moolenbroek.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30*00b67f09SDavid van Moolenbroek.\" 31*00b67f09SDavid van Moolenbroek.Dd November 1, 2010 32*00b67f09SDavid van Moolenbroek.Dt ATF-RUN 1 33*00b67f09SDavid van Moolenbroek.Os 34*00b67f09SDavid van Moolenbroek.Sh NAME 35*00b67f09SDavid van Moolenbroek.Nm atf-run 36*00b67f09SDavid van Moolenbroek.Nd executes a collection of test programs 37*00b67f09SDavid van Moolenbroek.Sh SYNOPSIS 38*00b67f09SDavid van Moolenbroek.Nm 39*00b67f09SDavid van Moolenbroek.Op Fl v Ar var1=value1 Op .. Fl v Ar varN=valueN 40*00b67f09SDavid van Moolenbroek.Op Ar test_program1 Op Ar .. test_programN 41*00b67f09SDavid van Moolenbroek.Nm 42*00b67f09SDavid van Moolenbroek.Fl h 43*00b67f09SDavid van Moolenbroek.Sh DESCRIPTION 44*00b67f09SDavid van Moolenbroek.Nm 45*00b67f09SDavid van Moolenbroekexecutes a collection of test programs or, in other words, a complete 46*00b67f09SDavid van Moolenbroektest suite. 47*00b67f09SDavid van MoolenbroekThe results of each test program are collected by the tool, and are then 48*00b67f09SDavid van Moolenbroekmultiplexed into a single machine-parseable report; see 49*00b67f09SDavid van Moolenbroek.Xr atf-formats 5 50*00b67f09SDavid van Moolenbroekfor more details. 51*00b67f09SDavid van MoolenbroekThis report can later be transformed into many different and saner formats 52*00b67f09SDavid van Moolenbroekusing the 53*00b67f09SDavid van Moolenbroek.Nm atf-report 54*00b67f09SDavid van Moolenbroektool. 55*00b67f09SDavid van Moolenbroek.Pp 56*00b67f09SDavid van MoolenbroekThe list of test programs to execute is read from an 57*00b67f09SDavid van Moolenbroek.Pa Atffile 58*00b67f09SDavid van Moolenbroekpresent in the current directory. 59*00b67f09SDavid van MoolenbroekThis file describes the test suite stored in the directory it lives in, 60*00b67f09SDavid van Moolenbroekwhich aside from the list of test programs also includes meta-data and 61*00b67f09SDavid van Moolenbroekconfiguration variables. 62*00b67f09SDavid van Moolenbroek.Pp 63*00b67f09SDavid van Moolenbroek.Nm 64*00b67f09SDavid van Moolenbroekis also in charge of reading the configuration files that tune the behavior 65*00b67f09SDavid van Moolenbroekof each test program and passing down the necessary variables to them. 66*00b67f09SDavid van MoolenbroekMore details on how this is done are given in the 67*00b67f09SDavid van Moolenbroek.Sx Configuration 68*00b67f09SDavid van Moolenbroeksection. 69*00b67f09SDavid van Moolenbroek.Pp 70*00b67f09SDavid van MoolenbroekIn the first synopsis form, 71*00b67f09SDavid van Moolenbroek.Nm 72*00b67f09SDavid van Moolenbroekparses the 73*00b67f09SDavid van Moolenbroek.Pa Atffile 74*00b67f09SDavid van Moolenbroekin the current directory and runs all the test programs specified in it. 75*00b67f09SDavid van MoolenbroekIf any test program names are given as part of the command line, those are 76*00b67f09SDavid van Moolenbroekthe ones executed instead of the complete list. 77*00b67f09SDavid van Moolenbroek.Pp 78*00b67f09SDavid van MoolenbroekIn the second synopsis form, 79*00b67f09SDavid van Moolenbroek.Nm 80*00b67f09SDavid van Moolenbroekwill print information about all supported options and their purpose. 81*00b67f09SDavid van Moolenbroek.Pp 82*00b67f09SDavid van MoolenbroekThe following options are available: 83*00b67f09SDavid van Moolenbroek.Bl -tag -width XvXvarXvalueXX 84*00b67f09SDavid van Moolenbroek.It Fl h 85*00b67f09SDavid van MoolenbroekShows a short summary of all available options and their purpose. 86*00b67f09SDavid van Moolenbroek.It Fl v Ar var=value 87*00b67f09SDavid van MoolenbroekSets the configuration variable 88*00b67f09SDavid van Moolenbroek.Ar var 89*00b67f09SDavid van Moolenbroekto the given value 90*00b67f09SDavid van Moolenbroek.Ar value . 91*00b67f09SDavid van Moolenbroek.El 92*00b67f09SDavid van Moolenbroek.Ss Configuration 93*00b67f09SDavid van Moolenbroek.Nm 94*00b67f09SDavid van Moolenbroekreads configuration data from multiple places. 95*00b67f09SDavid van MoolenbroekAfter all of these places have been analyzed, a list of variable-value 96*00b67f09SDavid van Moolenbroekpairs are passed to the test programs to be run. 97*00b67f09SDavid van Moolenbroek.Pp 98*00b67f09SDavid van MoolenbroekThe following locations are scanned for configuration data, in order. 99*00b67f09SDavid van MoolenbroekItems down the list override values defined above them: 100*00b67f09SDavid van Moolenbroek.Bl -enum 101*00b67f09SDavid van Moolenbroek.It 102*00b67f09SDavid van MoolenbroekConfiguration variables defined in the 103*00b67f09SDavid van Moolenbroek.Pa Atffile . 104*00b67f09SDavid van Moolenbroek.It 105*00b67f09SDavid van MoolenbroekConfiguration variables defined in the system-wide configuration file 106*00b67f09SDavid van Moolenbroekshared among all test suites. 107*00b67f09SDavid van MoolenbroekThis lives in 108*00b67f09SDavid van Moolenbroek.Pa ${ATF_CONFDIR}/common.conf . 109*00b67f09SDavid van Moolenbroek.It 110*00b67f09SDavid van MoolenbroekConfiguration variables defined in the system-wide test-suite-specific 111*00b67f09SDavid van Moolenbroekconfiguration file. 112*00b67f09SDavid van MoolenbroekThis lives in 113*00b67f09SDavid van Moolenbroek.Pa ${ATF_CONFDIR}/<test-suite>.conf . 114*00b67f09SDavid van Moolenbroek.It 115*00b67f09SDavid van MoolenbroekConfiguration variables defined in the user-specific configuration file 116*00b67f09SDavid van Moolenbroekshared among all test suites. 117*00b67f09SDavid van MoolenbroekThis lives in 118*00b67f09SDavid van Moolenbroek.Pa ${HOME}/.atf/common.conf . 119*00b67f09SDavid van Moolenbroek.It 120*00b67f09SDavid van MoolenbroekConfiguration variables defined in the user-specific test-suite-specific 121*00b67f09SDavid van Moolenbroekconfiguration file. 122*00b67f09SDavid van MoolenbroekThis lives in 123*00b67f09SDavid van Moolenbroek.Pa ${HOME}/.atf/<test-suite>.conf . 124*00b67f09SDavid van Moolenbroek.It 125*00b67f09SDavid van MoolenbroekConfiguration variables provided as part of the command line through the 126*00b67f09SDavid van Moolenbroek.Fl v 127*00b67f09SDavid van Moolenbroekoption. 128*00b67f09SDavid van Moolenbroek.El 129*00b67f09SDavid van Moolenbroek.Pp 130*00b67f09SDavid van MoolenbroekThe value of 131*00b67f09SDavid van Moolenbroek.Va ATF_CONFDIR 132*00b67f09SDavid van Moolenbroekin the above list determined as detailed in 133*00b67f09SDavid van Moolenbroek.Xr atf-config 1 . 134*00b67f09SDavid van Moolenbroek.Pp 135*00b67f09SDavid van MoolenbroekThe following configuration variables are globally recognized: 136*00b67f09SDavid van Moolenbroek.Bl -tag -width XunprivilegedXuserXX 137*00b67f09SDavid van Moolenbroek.It Va unprivileged-user 138*00b67f09SDavid van MoolenbroekThe name of the system user that atf-run will drop root privileges into 139*00b67f09SDavid van Moolenbroekfor test cases defining 140*00b67f09SDavid van Moolenbroek.Sq require.user=unprivileged . 141*00b67f09SDavid van MoolenbroekNote that this is 142*00b67f09SDavid van Moolenbroek.Em not provided for security purposes ; 143*00b67f09SDavid van Moolenbroekthis feature is only for the convenience of the user. 144*00b67f09SDavid van Moolenbroek.El 145*00b67f09SDavid van Moolenbroek.Ss Hooks 146*00b67f09SDavid van Moolenbroek.Nm Ns 's 147*00b67f09SDavid van Moolenbroekinternal behavior can be customized by the system administrator and the 148*00b67f09SDavid van Moolenbroekuser by means of hooks. 149*00b67f09SDavid van MoolenbroekThese hooks are written in the shell script language for simplicity and 150*00b67f09SDavid van Moolenbroekare stored in the following files, which are read in the order provided 151*00b67f09SDavid van Moolenbroekbelow: 152*00b67f09SDavid van Moolenbroek.Bl -enum 153*00b67f09SDavid van Moolenbroek.It 154*00b67f09SDavid van Moolenbroek${ATF_CONFDIR}/atf-run.hooks 155*00b67f09SDavid van Moolenbroek.It 156*00b67f09SDavid van Moolenbroek${HOME}/.atf/atf-run.hooks 157*00b67f09SDavid van Moolenbroek.El 158*00b67f09SDavid van Moolenbroek.Pp 159*00b67f09SDavid van MoolenbroekThe following hooks are supported: 160*00b67f09SDavid van Moolenbroek.Bl -tag -width infoXstartXhookXX 161*00b67f09SDavid van Moolenbroek.It info_start_hook 162*00b67f09SDavid van MoolenbroekCalled before 163*00b67f09SDavid van Moolenbroek.Nm 164*00b67f09SDavid van Moolenbroekexecutes any test program. 165*00b67f09SDavid van MoolenbroekThe purpose of this hook is to write additional 166*00b67f09SDavid van Moolenbroek.Sq info 167*00b67f09SDavid van Moolenbroekstanzas to the top of the output report; these are defined by the 168*00b67f09SDavid van Moolenbroek.Sq application/X-atf-tps format 169*00b67f09SDavid van Moolenbroekdescribed in 170*00b67f09SDavid van Moolenbroek.Xr atf-formats 5 . 171*00b67f09SDavid van MoolenbroekAlways use the 172*00b67f09SDavid van Moolenbroek.Sq atf_tps_writer_info 173*00b67f09SDavid van Moolenbroekfunction to print these. 174*00b67f09SDavid van Moolenbroek.Pp 175*00b67f09SDavid van MoolenbroekThis takes no parameters. 176*00b67f09SDavid van Moolenbroek.It info_end_hook 177*00b67f09SDavid van MoolenbroekSimilar to 178*00b67f09SDavid van Moolenbroek.Sq info_start_hook 179*00b67f09SDavid van Moolenbroekbut executed after all test programs have been run so that additional 180*00b67f09SDavid van Moolenbroek.Sq info 181*00b67f09SDavid van Moolenbroekstanzas can be added to the bottom of the output report. 182*00b67f09SDavid van Moolenbroek.Pp 183*00b67f09SDavid van MoolenbroekThis takes no parameters. 184*00b67f09SDavid van Moolenbroek.El 185*00b67f09SDavid van Moolenbroek.Pp 186*00b67f09SDavid van MoolenbroekAll hooks are accompanied by a function named 187*00b67f09SDavid van Moolenbroek.Sq default_<hook_name> 188*00b67f09SDavid van Moolenbroekthat can be executed by them to invoke the default behavior built into 189*00b67f09SDavid van Moolenbroek.Nm . 190*00b67f09SDavid van MoolenbroekFor example, in order to extend the default 191*00b67f09SDavid van Moolenbroek.Sq info_start_hook 192*00b67f09SDavid van Moolenbroekhook, we could write the following function: 193*00b67f09SDavid van Moolenbroek.Bd -literal -offset indent 194*00b67f09SDavid van Moolenbroekinfo_start_hook() 195*00b67f09SDavid van Moolenbroek{ 196*00b67f09SDavid van Moolenbroek default_info_start_hook "${@}" 197*00b67f09SDavid van Moolenbroek 198*00b67f09SDavid van Moolenbroek atf_tps_writer_info "uptime" "$(uptime)" 199*00b67f09SDavid van Moolenbroek} 200*00b67f09SDavid van Moolenbroek.Ed 201*00b67f09SDavid van Moolenbroek.Sh SEE ALSO 202*00b67f09SDavid van Moolenbroek.Xr atf-report 1 , 203*00b67f09SDavid van Moolenbroek.Xr atf-test-program 1 , 204*00b67f09SDavid van Moolenbroek.Xr atf 7 205