Home | History | Annotate | only in /test/stcnv/usr/src/suites/net/nc
Up to higher level directory
NameDateSize
include/17-Jun-2009
Makefile17-Jun-20091.3K
README17-Jun-200913.2K
src/17-Jun-2009
STC.INFO17-Jun-20094.1K
Targetdirs17-Jun-20091.6K
tests/17-Jun-2009
tet_scen17-Jun-20091.7K

README

      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 2009 Sun Microsystems, Inc.  All rights reserved.
     24 # Use is subject to license terms.
     25 #
     26 # ident	"@(#)README	1.3	09/03/15 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.  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-net-nc
    110   root# pkgadd -d <package-location> SUNWstc-net-nc
    111 
    112 Note: SUNWstc-tetlite which contains CTI-TET framework tools is prerequisite
    113       for SUNWstc-net-nc.
    114 
    115 6. Running the tests
    116 --------------------
    117 
    118 Run the tests from the package like this:
    119 
    120   $ cd /opt/SUNWstc-net-nc && \
    121     export CTI_ROOT=/opt/SUNWstc-tetlite/contrib/ctitools; \
    122     export PATH=$PATH:$CTI_ROOT/bin; \
    123     run_test nc
    124 
    125 The results files will be stored in /var/tmp/results.<PID> directory.
    126 The default journal file name will be /var/tmp/results.<PID>/testlog
    127 where PID is pid of run_test process.
    128 
    129 6.1 Running single test case
    130 ----------------------------
    131 
    132 To run single test case (which can contain several test purposes)
    133 use additional argument for run_test, e.g. for Tflag test case:
    134 
    135   $ run_test nc Tflag
    136 
    137 6.2 Running predefined scenarios
    138 ---------------------------------
    139 
    140 nc test suite is based on CTI-TET framework.  It supports scenarios
    141 and the test suite has predefined the following scenarios:
    142 
    143   - short
    144   - longer
    145 
    146 Scenario definitions reside in the 'tet_scen' file.
    147 
    148 To run e.g. the short scenario use the following command:
    149 
    150   $ run_test nc short
    151 
    152 6.3  Testing custom nc program
    153 ------------------------------
    154 
    155 To test nc program stored at different location than the default
    156 /usr/bin/nc, set STC2_NC_PATH environment variable to
    157 an alternative location.
    158 
    159 7. Building, configuring and running the tests from source code
    160 ---------------------------------------------------------------
    161 
    162 - checkout the test suite source, if desired.  For example,
    163 
    164   $ hg clone ssh://anon@hg.opensolaris.org/hg/test-dev/stcnv-gate
    165 
    166   If the previous Mercurial command was performed in directory
    167   /local/userfoo/testing (say) then the source code of the nc
    168   test suite will be placed at 'usr/src/suites/net/nc'.  For
    169   the rest of this discussion, we will use the string <WS_ROOT>
    170   to refer to /local/userfoo/testing.
    171 
    172 - to build the tests, set CTI-TET variables and run 'make':
    173 
    174   $ export CTI_ROOT=/opt/SUNWstc-tetlite/contrib/ctitools; \
    175     export PATH=$PATH:$CTI_ROOT/bin; \
    176     cd <WS_ROOT>/usr/src/suites/net/nc \
    177     && make
    178 
    179 - run the test suite
    180 
    181   $ cd <WS_ROOT>/usr/src/suites/net/nc && run_test nc
    182 
    183 - examine results
    184 
    185   $ less /var/tmp/results.<number>/testlog
    186 
    187   Full path to the journal file is printed by run_test before start
    188   of the tests and at the end of the run.
    189 
    190 - at some later time the journal can be displayed in comprehensive form
    191   via the following command:
    192 
    193   $ report_writer /var/tmp/results.<number>/testlog /tmp/report.$$
    194 
    195 - you can also build the SUNWstc-net-nc package: 
    196 
    197   $ cd <WS_ROOT>/usr/src/suites/net/nc && make package
    198 
    199   The package will be constructed in 
    200   <WS_ROOT>/packages/`uname -p`/SUNWstc-net-nc/ directory.
    201 
    202   After that it can be converted to the cpio package format via:
    203 
    204   $ pkgtrans -s <WS_ROOT>/packages/`uname -p` \
    205 	/tmp/SUNWstc-net-nc.pkg SUNWstc-net-nc
    206 
    207   The result package /tmp/SUNWstc-net-nc.pkg can be simply copied to
    208   remote sytem and installed:
    209 
    210   $ pkgadd -d SUNWstc-net-nc.pkg all
    211 
    212 8. Notes
    213 --------
    214 
    215 8.1 Solution for bad latency to the tools
    216 -----------------------------------------
    217 
    218 If you run this test suite far from where the gate is exported from it
    219 might be very slow.  In that case it is enough just to recursively copy
    220 tetlite directory from proto area to your local proto/tools directory
    221 and then to set PATH accordingly.
    222 
    223 8.2 Internal variables
    224 ----------------------
    225 
    226 If you need to test nc binary which is not in default location (for
    227 example you want to test it without copying it from a build server)
    228 or need to change port used for testing there is a list of variables
    229 that you can set and export before running the test suite, together
    230 with their default values:
    231 
    232 	variable			default value
    233 	------------------------------+----------------
    234 	STC2_NC_PATH			/usr/bin/nc
    235 	STC2_NC_TEST_PORT 		4444
    236 	STC2_NC_TEST_SOURCE_PORT_FIRST	55555
    237 	STC2_NC_TEST_SOURCE_PORT_LAST	55566
    238 	STC2_NC_WATCHMALLOC 		1
    239 	STC2_NC_DEBUG			0
    240 	STC2_NC_STARTUP_TIMEOUT		10
    241 
    242 8.3 Memory checking
    243 -------------------
    244 
    245 By default every nc command is run with watchmalloc(3MALLOC) checking. 
    246 Setting STC2_NC_WATCHMALLOC environment variable to 0 will cause nc to be run
    247 without the checks.
    248 
    249 8.4 Binding to ports and privileges
    250 -----------------------------------
    251 
    252 All of the tests utilizing TCP/UDP connections are using default port
    253 number STC2_NC_TEST_PORT which is set to unprivileged port.
    254 
    255 This could lead to setup phase (for test purposes which start nc in server
    256 mode first and then perform the test by connecting with nc client process)
    257 failures where bind(3SOCKET) call fails because the port is already
    258 bound by different process.  To overcome this limitation,
    259 the default value can be overriden by setting STC2_NC_TEST_PORT
    260 environment variable to privileged port (smaller than 1024) and
    261 running the test suite with net_privaddr privilege (e.g. under root).
    262 
    263 STC2_NC_TEST_SOURCE_PORT_{FIRST,LAST} port range is used (by calling
    264 try_connect_srcport()) in test purposes using -p flag for setting source
    265 TCP port such as those in vflag or pflag test cases.  Same rules apply w.r.t.
    266 privileged port number as above.
    267 
    268 9. Future work
    269 --------------
    270 
    271 Aside from better test suite coverage, changes should be done which
    272 would make the test suite more robust:
    273 
    274   - addition of timeouts for test purposes
    275   - detection of bind(3socket) failures and restart or using
    276     net_privaddr privilege for running all tests with privileged port
    277 
    278 As with nc(1), patches and contributions are welcome.
    279 
    280 10. Information for developers
    281 ------------------------------
    282 
    283 If you want or need to debug the test suite, set STC2_NC_DEBUG variable to
    284 positive value before running the tests.  It will put some more
    285 information into the journal.
    286 
    287 nc should be executed either using predefined functions such as
    288 listen_wrapper() or start_nc().  In some cases it is needed to execute
    289 it directly.  In such cases it should be started like this:
    290 
    291   $ eval $NC arguments
    292 
    293 This is because of watchmalloc(3MALLOC) checking (see NC_PRELOADS
    294 definition in include/vars for details).
    295 
    296 10.1 Start and end of a test purpose
    297 ------------------------------------
    298 
    299 Each test purpose should begin with a call to init_test() and should
    300 end with a call to finish_test().
    301 
    302 init_test() prints test purpose ID and description to journal file
    303 and sets test_port/test_source_port internals variable to
    304 STC2_NC_TEST_PORT/STC2_NC_TEST_SOURCE_PORT values, respectively.
    305 
    306 finish_test() performs cleanup by killing any potentional left-over nc
    307 processes via stop_nc() which uses internal variable NC_PIDFILE.
    308 
    309 Also note that tet_startup,tet_cleanup variables are set to common_startup
    310 and common_cleanup (defined in src/lib/ksh/common_funcs.ksh), respectively.
    311 
    312 10.2 Internal variables
    313 -----------------------
    314 
    315 start_nc() sets two internal variables which accessible from test purposes:
    316 
    317 	Name	     Meaning
    318 	------------+----------------------------------------------
    319 	NC_PIDFILE   file containing pid of nc process
    320 	NC_ERRFILE   file containing stderr produced by nc process
    321 
    322 Both files have to be removed when the program started by start_nc() exits.
    323 Normally, finish_test() takes care of that but in case start_nc()
    324 is executed with custom pid file and error file the caller has to remove
    325 them.
    326 
    327 To remove custom pid files and kill the processes associated with them
    328 finish_test() can be passed the variables.
    329 
    330 10.3 Adding new tests 
    331 ---------------------
    332 
    333 10.3.1 Adding new test purpose
    334 ------------------------------
    335 
    336 The following steps are needed:
    337 
    338   1. create the file for the test purpose in given test case directory
    339      e.g. tests/uflag/tp_uflag_004_neg.ksh
    340 
    341   2. add new test purpose to TARGET_KSH variable in Makefile
    342      for given test case
    343 
    344   3. include the test purpose in test case script
    345      (e.g. tests/uflag/tc_uflag.ksh)
    346 
    347 10.3.2 Adding new test case
    348 ---------------------------
    349 
    350 To add new test case the following steps are needed:
    351 
    352   1. add new subdirectory in tests/ directory with all necessary files
    353      (Makefile, .ksh script for the test case, files for the test purposes)
    354 
    355   2. modify the following files:
    356 
    357      - tests/Makefile
    358        append new test case directory to SUBDIRS variable definition
    359 
    360      - tet_scen
    361        add a new test case name to appropriate scenario and define
    362        the test case with a path to the script
    363 
    364      - Targetdirs
    365        add new directory for the test case to ROOT.TEST variable
    366 
    367 10.4 Code style
    368 ---------------
    369 
    370 When writing new ksh code make sure that the shell style rules are
    371 followed:
    372 
    373   http://www.opensolaris.org/os/project/shell/shellstyle/
    374 
    375 All tests should run with both ksh88 and ksh93.
    376 
    377 10.5 Using internal functions
    378 -----------------------------
    379 
    380 Temporary files or directories should be created using the nc_mktemp()
    381 or nc_mktemp_dir() routines, respectively. These functions use common
    382 prefix from the NC_TMPFILE_PREFIX variable defined in include/vars file.
    383 
    384 Whenever nc_mktemp() is used directly, its output should be checked and
    385 if it fails (empty string is returned) the caller should bail out.
    386 For example (assuming we are in a function which returns 1 on failure):
    387 
    388     typeset -r tmp_out=$( nc_mktemp test_purpose.out )
    389     [[ -z $tmp_out ]] && return 1
    390 
    391 In a test purpose, finish_test() should be called before returning.
    392 
    393 Upon failure, nc_mktemp() will set the result of the currently running test
    394 purpose to UNRESOLVED.
    395 
    396 Assuming all test cases/purposes use these functions it should be easy to
    397 check for leftover temporary files at the end of test suite run (signaling
    398 there is a problem in test suite code).  This command will perform the
    399 check (with current definition of the common prefix used for 
    400 temporary files/directories) using the NC_TMPFILE_PREFIX definition from
    401 include/vars:
    402 
    403   $ /usr/bin/find /tmp/ -name 'nc_tet-*' 2>/dev/null
    404 
    405 The output of the command should be empty.
    406 
    407 11. Contact us
    408 --------------
    409 
    410 Please e-mail the STC_CONTACT listed in the STC.INFO file if you want to
    411 contact us - your feedback is appreciated.  If you want to file a bug, use
    412 stc/net/nc category.
    413 
    414