1 # 2 # CDDL HEADER START 3 # 4 # The contents of this file are subject to the terms of the 5 # Common Development and Distribution License (the "License"). 6 # You may not use this file except in compliance with the License. 7 # 8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 # or http://www.opensolaris.org/os/licensing. 10 # See the License for the specific language governing permissions 11 # and limitations under the License. 12 # 13 # When distributing Covered Code, include this CDDL HEADER in each 14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 # If applicable, add the following below this CDDL HEADER, with the 16 # fields enclosed by brackets "[]" replaced with your own identifying 17 # information: Portions Copyright [yyyy] [name of copyright owner] 18 # 19 # CDDL HEADER END 20 # 21 22 # 23 # Copyright 2008 Sun Microsystems, Inc. All rights reserved. 24 # Use is subject to license terms. 25 # 26 # ident "@(#)README 1.1 08/11/10 SMI" 27 # 28 29 # 30 # README file for nc(1) CTI-TET test suite. 31 # 32 33 1. Introduction 34 2. Test coverage 35 3. System requirements 36 4. System changes 37 5. Installation 38 6. Configuring and running the tests 39 7. Building, configuring and running the tests from source code 40 8. Notes 41 9. Future work 42 10. Information for developers 43 11. Contact us 44 45 46 1. Introduction 47 --------------- 48 49 The Netcat test suite residing here is set of basic functionality tests 50 for Netcat implementation shipped with Solaris. It is based on unit 51 tests developed for pre-RTI testing of nc(1) integration into ON. 52 53 The test suite uses CTI-TET, Common Test Infrastructure (CTI) for Test 54 Environment Toolkit (TET). Please see the following link for more 55 information about CTI-TET both in OpenSolaris context and in general: 56 57 http://opensolaris.org/os/community/testing/testsuites/ctifortet/ 58 59 The test suite is intended to be run by anyone from OpenSolaris community 60 who wants to contribute a bug fix or RFE to Netcat shipped with Solaris. 61 62 If you want to make a change in this test suite be sure you read "Information 63 for developers" section before progressing any further. 64 65 2. Test coverage 66 ---------------- 67 68 With every RFE, new test purpose or test case should be added. The same 69 for serious bugs. Most of the functionality is covered by the tests with the 70 exception of features which require setup of servers (e.g. SOCKS support). 71 72 All tests should PASS. If not, please report a bug. 73 74 3. System requirements 75 ---------------------- 76 77 3.1 Access to your local machine 78 -------------------------------- 79 80 All tests run on local machine only. Root access is not required 81 unless the tests are set to use privileged port (see section 8) or test 82 suite package is installed/removed. 83 84 The test suite can be run both on SPARC and i386. Those two are the only 85 relevant modes because we use only shell scripts in this test suite. 86 87 3.2 Network interfaces 88 ---------------------- 89 90 All tests need two loopback interface (lo0) instances, configured with 91 IPv4 (127.0.0.1) and IPv6 address (::1/128). 92 93 4. System changes 94 ----------------- 95 96 This test suite does not currently modify system configuration in any way. 97 98 5. Installation 99 --------------- 100 101 This section is for those who want to install the test suite package. If you 102 want to run the tests from source code, see section 7. 103 104 The package will be installed into /opt. It is recommended that you install 105 the package from scratch, rather than on top of an existing installation. 106 Thus, if an old version of the tests is installed, remove it and install it 107 again: 108 109 root# pkgrm SUNWstc-nc 110 root# pkgadd -d <package-location> SUNWstc-nc 111 112 Note: SUNWstc-tetlite which contains CTI-TET framework tools is prerequisite 113 for SUNWstc-nc. 114 115 6. Running the tests 116 ------------------------------------ 117 118 Run the tests from the package like this: 119 120 $ cd /opt/SUNWstc-nc && \ 121 export TET_SUITE_ROOT=/opt/SUNWstc-nc; \ 122 export TET_ROOT=/opt/SUNWstc-tetlite; \ 123 export CTI_ROOT=$TET_ROOT/contrib/ctitools; \ 124 export PATH=$PATH:$CTI_ROOT/bin; \ 125 run_test nc 126 127 The results files will be stored in /var/tmp/results.<PID> directory. 128 The default journal file name will be /var/tmp/results.<PID>/testlog 129 where PID is pid of run_test process. 130 131 6.1 Running single test case 132 ---------------------------- 133 134 To run single test case (which can contain several test purposes) 135 use additional argument for run_test, e.g. for Tflag test case: 136 137 $ run_test nc Tflag 138 139 6.2 Running predefined scenarios 140 --------------------------------- 141 142 nc test suite is based on CTI-TET framework. It supports scenarios 143 and the test suite has predefined the following scenarios: 144 145 - short 146 - longer 147 148 Scenario definitions reside in the 'tet_scen' file. 149 150 To run e.g. the short scenario use the following command: 151 152 $ run_test nc short 153 154 6.3 Testing custom nc program 155 ------------------------------ 156 157 To test nc program stored at different location than the default 158 /usr/bin/nc, set STC2_NC_PATH environment variable to 159 an alternative location. 160 161 7. Building, configuring and running the tests from source code 162 --------------------------------------------------------------- 163 164 - checkout the test suite source, if desired: 165 166 $ hg clone ssh://anon@hg.opensolaris.org/hg/test-dev/ostest-stc2 167 168 - set CODEMGR_WS environment variable to the location of the source directory: 169 170 If the previous Mercurial command was performed in directory 171 /local/userfoo/testing (e.g.) then do the following: 172 173 $ export CODEMGR_WS=/local/userfoo/testing/ostest-stc2 174 175 This variable is needed by the following commands. 176 177 NOTE: Do not use Teamware commands for any build related action 178 with this test suite otherwise they will not work because 179 of collision with internal variable names. 180 181 - set CTI-TET variables and create the scripts: 182 183 $ export TET_ROOT=/opt/SUNWstc-tetlite; \ 184 export CTI_ROOT=$TET_ROOT/contrib/ctitools; \ 185 export TET_SUITE_ROOT=$CODEMGR_WS/src/suites/net; \ 186 export PATH=$PATH:$CTI_ROOT/bin; \ 187 cd $TET_SUITE_ROOT/nc \ 188 && make 189 190 - run the test suite 191 192 $ cd $TET_SUITE_ROOT && run_test nc 193 194 - examine results 195 196 $ less /var/tmp/results.<number>/testlog 197 198 Full path to the journal file is printed by run_test before start 199 of the tests and at the end of the run. 200 201 - at some later time the journal can be displayed in comprehensive form 202 via the following command: 203 204 $ report_writer /var/tmp/results.<number>/testlog /tmp/report.$$ 205 206 - you can also build the SUNWstc-nc package: 207 208 $ cd $TET_SUITE_ROOT/nc && make package 209 210 The package will be constructed in 211 $CODEMGR_WS/packages/`uname -p`/SUNWstc-nc/ directory. 212 213 After that it can be converted to the cpio package format via: 214 215 $ pkgtrans -s $CODEMGR_WS/packages/`uname -p` \ 216 /tmp/SUNWstc-nc.pkg SUNWstc-nc 217 218 The result package /tmp/SUNWstc-nc.pkg can be simply copied to 219 remote sytem and installed: 220 221 $ pkgadd -d SUNWstc-nc.pkg all 222 223 8. Notes 224 -------- 225 226 8.1 Solution for bad latency to the tools 227 ----------------------------------------- 228 229 If you run this test suite far from where the gate is exported from it 230 might be very slow. In that case it's enough just to recursively copy 231 tetlite directory from proto area to your local proto/tools directory 232 and then to set PATH accordingly. 233 234 8.2 Internal variables 235 ---------------------- 236 237 If you need to test nc binary which is not in default location (for 238 example you want to test it without copying it from a build server) 239 or need to change port used for testing there is a list of variables 240 that you can set and export before running the test suite, together 241 with their default values: 242 243 variable default value 244 ------------------------------+---------------- 245 STC2_NC_PATH /usr/bin/nc 246 STC2_NC_TEST_PORT 4444 247 STC2_NC_TEST_SOURCE_PORT_FIRST 55555 248 STC2_NC_TEST_SOURCE_PORT_LAST 55566 249 STC2_NC_WATCHMALLOC 1 250 STC2_NC_DEBUG 0 251 STC2_NC_STARTUP_TIMEOUT 10 252 253 8.3 Memory checking 254 ------------------- 255 256 By default every nc command is run with watchmalloc(3MALLOC) checking. 257 Setting STC2_NC_WATCHMALLOC environment variable to 0 will cause nc to be run 258 without the checks. 259 260 8.4 Binding to ports and privileges 261 ----------------------------------- 262 263 All of the tests utilizing TCP/UDP connections are using default port 264 number STC2_NC_TEST_PORT which is set to unprivileged port. 265 266 This could lead to setup phase (for test purposes which start nc in server 267 mode first and then perform the test by connecting with nc client process) 268 failures where bind(3SOCKET) call fails because the port is already 269 bound by different process. To overcome this limitation, 270 the default value can be overriden by setting STC2_NC_TEST_PORT 271 environment variable to privileged port (smaller than 1024) and 272 running the test suite with net_privaddr privilege (e.g. under root). 273 274 STC2_NC_TEST_SOURCE_PORT_{FIRST,LAST} port range is used (by calling 275 try_connect_srcport()) in test purposes using -p flag for setting source 276 TCP port such as those in vflag or pflag test cases. Same rules apply w.r.t. 277 privileged port number as above. 278 279 9. Future work 280 -------------- 281 282 Aside from better test suite coverage, changes should be done which 283 would make the test suite more robust: 284 285 - addition of timeouts for test purposes 286 - detection of bind(3socket) failures and restart or using 287 net_privaddr privilege for running all tests with privileged port 288 289 As with nc(1), patches and contributions are welcome. 290 291 10. Information for developers 292 ------------------------------ 293 294 If you want or need to debug the test suite, set STC2_NC_DEBUG variable to 295 positive value before running the tests. It will put some more 296 information into the journal. 297 298 nc should be executed either using predefined functions such as 299 listen_wrapper() or start_nc(). In some cases it is needed to execute 300 it directly. In such cases it should be started like this: 301 302 $ eval $NC arguments 303 304 This is because of watchmalloc(3MALLOC) checking (see NC_PRELOADS 305 definition in include/vars for details). 306 307 10.1 Start and end of a test purpose 308 ------------------------------------ 309 310 Each test purpose should begin with a call to init_test() and should 311 end with a call to finish_test(). 312 313 init_test() prints test purpose ID and description to journal file 314 and sets test_port/test_source_port internals variable to 315 STC2_NC_TEST_PORT/STC2_NC_TEST_SOURCE_PORT values, respectively. 316 317 finish_test() performs cleanup by killing any potentional left-over nc 318 processes via stop_nc() which uses internal variable NC_PIDFILE. 319 320 Also note that tet_startup,tet_cleanup variables are set to common_startup 321 and common_cleanup (defined in src/lib/ksh/common_funcs.ksh), respectively. 322 323 10.2 Internal variables 324 ----------------------- 325 326 start_nc() sets two internal variables which accessible from test purposes: 327 328 Name Meaning 329 ------------+---------------------------------------------- 330 NC_PIDFILE file containing pid of nc process 331 NC_ERRFILE file containing stderr produced by nc process 332 333 Both files have to be removed when the program started by start_nc() exits. 334 Normally, finish_test() takes care of that but in case start_nc() 335 is executed with custom pid file and error file the caller has to remove 336 them. 337 338 To remove custom pid files and kill the processes associated with them 339 finish_test() can be passed the variables. 340 341 10.3 Adding new tests 342 --------------------- 343 344 10.3.1 Adding new test purpose 345 ------------------------------ 346 347 The following steps are needed: 348 349 1. create the file for the test purpose in given test case directory 350 e.g. tests/uflag/tp_uflag_004_neg.ksh 351 352 2. add new test purpose to TARGET_KSH variable in Makefile 353 for given test case 354 355 3. include the test purpose in test case script 356 (e.g. tests/uflag/tc_uflag.ksh) 357 358 10.3.2 Adding new test case 359 --------------------------- 360 361 To add new test case the following steps are needed: 362 363 1. add new subdirectory in tests/ directory with all necessary files 364 (Makefile, .ksh script for the test case, files for the test purposes) 365 366 2. modify the following files: 367 368 - tests/Makefile 369 append new test case directory to SUBDIRS variable definition 370 371 - tet_scen 372 add a new test case name to appropriate scenario and define 373 the test case with a path to the script 374 375 - Targetdirs 376 add new directory for the test case to ROOT.TEST variable 377 378 10.4 Code style 379 --------------- 380 381 When writing new ksh code make sure that the shell style rules are 382 followed: 383 384 http://www.opensolaris.org/os/project/shell/shellstyle/ 385 386 All tests should run with both ksh88 and ksh93. 387 388 10.5 Using internal functions 389 ----------------------------- 390 391 Temporary files or directories should be created using the nc_mktemp() 392 or nc_mktemp_dir() routines, respectively. These functions use common 393 prefix from the NC_TMPFILE_PREFIX variable defined in include/vars file. 394 395 Assuming all test cases/purposes use these functions it should be easy to 396 check for leftover temporary files at the end of test suite run (signaling 397 there is a problem in test suite code). This command will perform the 398 check (with current definition of the common prefix used for 399 temporary files/directories): 400 401 $ /usr/bin/find /tmp/ -name 'nc_tet-*' 2>/dev/null 402 403 The output of the command should be empty. 404 405 11. Contact us 406 -------------- 407 408 This test suite was developed by Vladimir Kotal, first version was 409 integrated under RFE 6646967 (netcat needs a test suite). 410 411 Please e-mail the STC_CONTACT listed in the STC.INFO file if you want to 412 contact us - your feedback is appreciated. If you want to file a bug, use 413 stc/net/nc category. 414 415