Home | History | Annotate | only in /test/ontest-stc2/src/tools/tet/contrib/ctitools
Up to higher level directory
NameDateSize
Artistic20-Jul-20075.6K
examples/20-Jul-2007
include/26-Feb-2008
Makefiles/20-Mar-2008
README26-Feb-200812.2K
src/20-Jul-2007
STC.INFO30-May-20083.3K

README

      1 #
      2 # Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
      3 # Use is subject to license terms.
      4 #
      5 # ident	"@(#)README	1.5	07/08/15 SMI"
      6 #
      7 
      8 #
      9 # This is free software; you can redistribute it and/or modify it
     10 # under the terms of the "Artistic License" which is located in 
     11 # the file named "Artistic" which is included with this software.
     12 #
     13 
     14 ===============================================================================
     15 
     16 Common Test Infrastructure (CTI) for Test Environment Toolkit (TET)
     17 
     18 CTI for TET is a common set of tools, utilities and application interfaces
     19 which support TET test development and execution.
     20 
     21 ===============================================================================
     22 
     23 CTI Directory Structure 
     24 
     25 Makefiles - contains the standard Makefiles that can be used with test suites
     26 to define most of the building process when using make.
     27 
     28 bin - compiled binary and shell standalone executable utilities.
     29 
     30 examples - example test suites provided to show the use of the CTI interfaces
     31 and CTI command line execution.
     32 
     33 include - CTI header files that are to be included in code.
     34 
     35 lib - compiled and shell script libraries that are linked or sourced into test
     36 scripts to gain access to the CTI API.
     37 
     38 src/defines - Solaris define files used to identify newer versions of Solaris.
     39 
     40 src/lib - source code for the libraries that are built into the above lib
     41 directory.
     42 
     43 src/utils - the CTI command line utility and it's associated tools.  As well
     44 as the build, clean and exec tools, the kmodtool interface and setuid programs
     45 for root and user test suite execution.
     46 
     47 src/scripts - tools to assist in the building and packaging of CTI for TET.
     48 
     49 ===============================================================================
     50 
     51 bin/run_test.ksh (src/utils/run_test.ksh)
     52 
     53 The run_test wrapper is used to execute test suites and passes the 
     54 configuration program the following arguments:
     55 
     56         -F  : Configuration parameter file (name=value pairs)
     57 	-S  : Do the setup only
     58 	-E  : Do the execute only using the prior setup
     59 	-C  : Do the cleanup only for the prior setup
     60 	-L  : Log directory
     61 	-R  : List of remote machines (only for distributed test)
     62 	-I  : Ignore html/sorted_result creation
     63 	-j  : Journal file (-j - goes to stdout)
     64 	-s  : scenario file (tcc option)
     65 	-x  : execute mode config file (tcc option)
     66 
     67 	Following tcc options are passed directly to the 'tcc' command
     68 	without being processed by run_test :
     69 		b, c, e, i, f , g, I, l, n, t, v, y
     70 
     71 ===============================================================================
     72 
     73 src/scripts/build_tet.ksh
     74 
     75 The build_tet.ksh script will build the TET-Lite and Distributed TET versions
     76 of TET along with the CTI software under $TET_ROOT. If the $CODEMGR_WS 
     77 environment variable is set, the built code will also be copied to 
     78 $CODEMGR_WS/proto and be ready for package generation. The 
     79 /src/scripts/solpatch.ksh script is used by build_tet.ksh to patch TET so 
     80 newer versions of Solaris are identified during the build process.
     81 
     82 	Usage: build_tet.ksh <mode>
     83 
     84 	Where <mode> is one of the following arguments :
     85 		lite - to build TET Lite
     86 		inet - to build Distributed TET
     87 
     88 /src/scripts/build_tet_pkg.pl
     89 
     90 The build_tet_pkg.pl script creates TET-Lite or Distributed TET packages from
     91 the built code in $CODEMGR_WS/proto and stores the packages (SUNWstc-tetlite or
     92 SUNWstc-dtet) in the $CODEMGR_WS/packages directory.
     93 
     94 	Usage: build_tet_pkg.pl [-p <pkgdef_dir>] [-P <proto_dir>]
     95 		[-s pkg_spool_dir] mode
     96 
     97 	Where mode is one of the following arguments :
     98 		lite - to build the lite packages (SUNWtetlite)
     99 		inet - to build the distributed tet packages (SUNWdtet)
    100 
    101 Example:
    102 
    103 % setenv CODEMGR_WS /test/ws
    104 % setenv TET_ROOT $CODEMGR_WS/src/tools/tet
    105 % cd $TET_ROOT/contrib/ctitools/src/scripts
    106 % build_tet.ksh inet
    107 % build_tet_pkg.pl inet
    108 
    109 The build and package scripts need to be run on sparc and i386 build servers
    110 to produce sparc and i386 packages.  32-bit sparc, 64-bit sparcv9, 32-bit i386
    111 and 64-bit amd64 binaries are produced. Four runs are required to produce all
    112 combinations of sparc, i386, TET-Lite and Distributed TET packages.
    113 
    114 ===============================================================================
    115 
    116 bin/build_suite_pkg (utils/build_suite_pkg.pl)
    117 
    118 The build_suite_pkg.pl script uses the standard Makefiles with the package
    119 directive to build a package of the current test suite. Script execution can
    120 be modified by supplying custom packaging files and information. This script
    121 can also remove the package with -R suitename.
    122 
    123 	Usage:	build_suite_pkg.pl [ -p <pkgdef_dir>] [ -P <proto_dir>]
    124 		[ -s <pkg_spool_dir> ] <-R | -S> suitedir
    125 
    126 		suitedir - The location of the compiled test suite.
    127 
    128 	This compilation is done with the standard makefiles by using
    129 	the 'package' directive, e.g :
    130 	
    131 		$ /usr/ccs/bin/make package
    132 
    133 	To remove the package, e.g :
    134 
    135 		$ /usr/ccs/bin/make unpackage
    136 
    137 ===============================================================================
    138 
    139 Supported development CTI libraries (languages) :
    140 
    141 CTI support libraries are written for ksh, C, Perl and java.
    142 
    143 The ksh files to be sourced in are :
    144 
    145 	lib/ctiutils.ksh - Common tetlite CTI API interfaces.
    146 	lib/ctidutils.ksh - Distributed CTI API interfaces.
    147 
    148 The C libraries are :
    149 
    150 	lib/libCommonTest.so - Common tetlite and distributed interfaces
    151 		depending on packages installed.
    152 	lib/libCommonTest_s.so - Provides a modified cti_delete() and 
    153 		cti_deleteall() functions that use shared variables
    154 		with the TET libraries.
    155 	lib/libCommonTest_script.so - Shell script like helpers for C
    156 	lib/libCommonTest_thr.so - Threaded CTI interfaces.
    157 
    158 The Perl files to be soureced in are:
    159 
    160 	lib/ctiutils.pl - Common tetlite CTI API interfaces.
    161 
    162 The jave library :
    163 
    164 	lib/CommonTest.jar - Common tetlite and distributed interfaces
    165 		depending on packages installed.
    166 
    167 ===============================================================================
    168 
    169 bin/build_tool  (Source - src/utils/build_tool.ksh)
    170 bin/clean_tool  (Source - src/utils/clean_tool.ksh)
    171 
    172 The build_tool and clean_tool scripts can be used as TCC build and clean tools 
    173 (respectively) to support options in scenario test case names. Both scripts
    174 perform shell variable expansion.
    175 
    176 bin/exec_tool	(Source - src/utils/exec_tool.ksh)
    177 
    178 The exec_tool supports two options: su and kmod.  The "su" option allows a test
    179 case to be run with an arbitary UID, for example:
    180 
    181         /foo/bar/tc1:su=root{3-5}
    182         /foo/bar/tc2:su=uucp
    183 
    184 The "kmod" or "kernel" option specifies that the test case is a kernel module.
    185 This enhancement provides facilities for TET test cases to be written and run 
    186 directly in the kernel, for example:
    187 
    188         /foo/bar/tc3:kmod{1,4-7,10}
    189 
    190 The build and clean tools are simple scripts that basically strip out the above
    191 options from scenario test case names such that the usual TCC build and clean
    192 tools such as make can still be used.
    193 
    194 For more detailed information, please read the comments at the top of each
    195 script.
    196 
    197 NOTE: these scripts are available in the $CTI_ROOT/bin directory.
    198 
    199 ===============================================================================
    200 
    201 lib/[amd64|sparcv9]/libkmodapi.a	(Source - src/lib/C/kmodapi.c)
    202 bin/kmodtool				(Source - src/utils/kmodtool.c)
    203 
    204 Include Files
    205 
    206 include/kmod_support.h
    207 include/tet_kmodapi.h
    208 
    209 The kmodtool and libkmodapi.a library provide support for TET kernel test 
    210 cases.
    211 Kernel test cases look very similar to TET user-level test cases.  They can 
    212 call (some) TET APIs and thus use facilities provided by TET.  These test 
    213 cases are kernel modules which run directly in the kernel, and they can be 
    214 specified in the same scenarios as user-level test cases.
    215 
    216 The file src/lib/kmodapi.c contains the source for some TET APIs available in
    217 the kernel.  Not all TET C routines are available in the kernel.  Some of them
    218 like tet_fork() are not provided simply because they don't make sense in the 
    219 kernel.
    220 
    221 Kernel test cases must include the header file <tet_kmodapi.h> (as opposed to
    222 the standard <tet_api.h>) which is available in $CTI_ROOT/include directory.
    223 They must also be linked with the archive library likmodapi.a (as opposed to
    224 the standard libapi.a) located in $CTI_ROOT/lib.
    225 
    226 The file kmodtool.c is a "fake" user-level test case which acts as a
    227 proxy agent for kernel test case.  To run a kernel test case, you must use
    228 the $CTI_ROOT/bin/exec_tool script as the TCC exec tool.  This can be done 
    229 by adding an entry such as :
    230 
    231 	TET_EXEC_TOOL=${TET_ROOT}/contrib/ctitools/bin/exec_tool
    232 
    233 in tetexec.cfg.  You must also specify the TET_SU_TOOL and TET_KMOD_TOOL
    234 configuration variables, e.g.:
    235 
    236 	TET_SU_TOOL=${TET_ROOT}/contrib/ctitools/bin/sutool
    237 	TET_KMOD_TOOL=${TET_ROOT}/contrib/ctitools/bin/kmodtool
    238 
    239 The sutool utility is needed because kmodtool needs to run as root to modload 
    240 the kernel test case.
    241 
    242 When the exec_tool encounters a scenario test case name such as
    243 
    244 	/foo/bar/mytestcase:kmod
    245 
    246 which has the "kmod" or "kernel" option set, it calls on the sutool utility
    247 to start the user-level kmodtool test case as root, passing in the path
    248 to the kernel test case as argument.  In turn, kmodtool creates a Solaris door
    249 server and then modloads the kernel test case.  During the initialization
    250 phase, the kernel test case sets up a kernel door server and then contacts
    251 kmodtool via kmodtool's door.  Thus these two doors provide a two-way
    252 communication channel between the kernel test case and kmodtool.
    253 
    254 kmodtool acts as proxy agent for the kernel test case because to the TET Test
    255 Case Manager (TCM) the user-level kmodtool is the test case that it is actually
    256 running.  When the TCM executes a test purpose function inside kmodtool, this
    257 function then forwards the request, via the door, to the test case in the 
    258 kernel.
    259 When the call reaches the kernel door server, it in turn calls the actual test
    260 purpose routine in the kernel test case. Conversely, when the kernel test case
    261 calls a kernel TET API (kmodapi.c), the routine forwards the request up to
    262 kmodtool's door server in userland. kmodtool's door server in turn calls the
    263 actual TET API on behalf of the kernel test case.
    264 
    265 This allows you to write test cases that run directly in the kernel and yet
    266 still use many of TET's facilities, such as calling tet_getvar() from
    267 inside the kernel to get configuration variables specified in tetexec.cfg,
    268 or running a distributed kernel test on several remote machines with remote
    269 parts doing synchronization and communication among each other.  And the
    270 same scenario processing facility also applies to kernel tests.  For example,
    271 it's possible to do this
    272 
    273 	:parallel,20:
    274 	/foo/bar/tc1:kernel
    275 	:endparallel:
    276 
    277 which runs 20 instances of the tc1 kernel test case in parallel (this of course
    278 means that all 20 instances of tc1 run within the same address space, which
    279 means tc1 has to be written in such a way that these instances don't interfere
    280 with each other when accessing global kernel resources).  And kernel test cases
    281 can be mixed and matched with userland test cases, for example:
    282 
    283 	:timed_loop,3600:
    284 	  :distributed,1-4,7:
    285 	    :random:
    286 	      /foo/bar/user-tc{3,5,7}
    287 	      /foo/bar/kernel-tc:kmod{1-3}
    288 	    :endrandom:
    289 	  :enddistributed:
    290 	:endtimed_loop:
    291 
    292 As mentioned previously, not all TET functions are available in the kernel.
    293 Some like tet_fork() are not provided because they don't make sense in the
    294 kernel.  While some have slightly different interfaces from the actual TET
    295 version.  In particular those that return an allocated buffer such as
    296 tet_getvar() and tet_remgetlist().  For these routines, you must pass a
    297 buffer that you allocate yourself prior to the call.  This requirement was made
    298 to help remind callers to deallocate those buffers when they are done and
    299 to minimize the chance they forget, which would cause a kernel memory leak.
    300 For a list of TET APIs available in the kernel see the the header file
    301 $CTI_ROOT/include/tet_kmodapi.h.
    302 
    303 ===============================================================================
    304 
    305 bin/sutool	(Source - src/utils/sutool.c)
    306 
    307 sutool is a simple tool, akin to su or sudo, that allows an arbitrary command
    308 to be executed as the specified user (including root).  Unlike su or sudo,
    309 this program does NOT ask for any password.  It changes the UID, EUID,
    310 saved-UID, GID, EGID, saved-GID, and supplementary group list of the process
    311 to those of the specified user's prior to executing the command.
    312 
    313 WARNING: This program is a major security risk.  Do not use if security is an
    314 issue and/or remove the installed binary from the package installation.
    315