ltpmenu2: fix focus on paged container
[ltp-debian.git] / doc / ltp-howto.txt
blobffc9d42636798ae137775c582ddb245dbfc88374
3 Linux Test Project HOWTO
5 10 October 2000 
7 Nate Straz
9 Abstract
11 This document explains some of the more in depth topics of
12 the Linux Test Project and related testing issues. It does
13 not cover basic installation procedures. See the INSTALL
14 and README files in the tarball for that information.
16 1 Preface
18 This document was written to help bring the community up
19 to speed on the ins and outs of the Linux Test Project.
21 1.1 Copyright 
23 Copyright (c) 2000 by SGI, Inc. 
25 Please freely copy and distribute (sell or give away) this
26 document in any format.  It's requested that corrections
27 and/or comments be fowarded to the document maintainer.
28 You may create a derivative work and distribute it provided
29 that you: 
31 * Send your derivative work (in the most suitable format
32   such as sgml) to the LDP (Linux Documentation Project)
33   or the like for posting on the Internet.  If not the LDP,
34   then let the LDP know where it is available. 
36 * License the derivative work with this same license or use
37   GPL. Include a copyright notice and at least a pointer
38   to the license used. 
40 * Give due credit to previous authors and major contributors. 
42 If you're considering making a derived work other than a
43 translation, it's requested that you discuss your plans
44 with the current maintainer. 
46 1.2 Disclaimer 
48 Use the information in this document at your own risk. I
49 disavow any potential liability for the contents of this
50 document. Use of the concepts, examples, and/or other content
51 of this document is entirely at your own risk. 
53 All copyrights are owned by their owners, unless specifically
54 noted otherwise.  Use of a term in this document should
55 not be regarded as affecting the validity of any trademark
56 or service mark. 
58 Naming of particular products or brands should not be seen
59 as endorsements. 
61 You are strongly recommended to take a backup of your system
62 before major installation and backups at regular intervals. 
64 2 Introduction 
66 2.1 What is the Linux Test Project? 
68 The Linux Test Project (LTP) is an effort to create a set
69 of tools and tests to verify the functionality and stability
70 of the Linux kernel. We hope this will support Linux development
71 by making unit testing more complete and minimizing user
72 impact by building a barrier to keep bugs from making it
73 to the user. 
75 2.2 What is wrong with the current testing model? 
77 The Linux development community utilizes two important (some
78 out argue most important) testing techniques in its normal
79 operations: Design and Code Inspections. The intent of LTP
80 is to support this by giving developers an ever growing
81 set of tools to help identify any operational problems in
82 their code that may be missed by human review. One of the
83 toughest categories of problems to catch with inspection
84 is that of interaction of features. With a continuously
85 improving set of tests and tools, developers can get an
86 indication of whether their changes may have broken some
87 other functionality. 
89 There is no such thing as a perfect test base.  It is only
90 useful it if keeps up with new and changing functionality,
91 and if it actually gets used. 
93 2.3 Are you doing benchmarking? 
95 Not at  this time. We are more interested in functional,
96 regression, and stress testing the Linux kernel. Benchmarking
97 may be workable to compare the performance among kernel
98 versions. 
100 2.4 Are you doing standards testing? 
102 No, we are leaving that to the Linux Standards Base (LSB).
103  See the Linux Standards Base [http://www.linuxbase.org/||web site]
104 for more information. 
106 3 Structure 
108 The basic building block of the test project is a test case
109 that consists of a single action and a verification that
110 the action worked.  The result of the test case is usually
111 restricted to PASS/FAIL. 
113 A test program is a runnable program that contains one or
114 more test cases. Test programs often understand command
115 line options which alter their behavior. The options could
116 determine the amount of memory tested, the location of temporary
117 files, the type of network packet used, or any other useful
118 parameter.
120 Test tags are used to pair a unique identifier with a test
121 program and a set of command line options. Test tags are
122 the basis for test suites.
124 4 Writing Tests 
126 Writing a test case is a lot easier than most people think.
127  Any code that you write to examine how a part of the kernel
128 works can be adapted into a test case.  All that is needed
129 is a way to report the result of the action to the rest
130 of the world.  There are several ways of doing this, some
131 more involved than others. 
133 4.1 Exit Style Tests 
135 Probably the simplest way of reporting the results of a test
136 case is the exit status of your program.  If your test program
137 encounters unexpected or incorrect results, exit the test
138 program with a non-zero exit status, i.e. exit(1). Conversely,
139 if your program completes as expected, return a zero exit
140 status, i.e. exit(0). Any test driver should be able to
141 handle this type of error reporting. If a test program has
142 multiple test cases you won't know which test case failed,
143 but you will know the program that failed. 
145 4.2 Formatted Output Tests 
147 The next easiest way of reporting the results is to write
148 the results of each test case to standard output. This allows
149 for the testing results to be more understandable to both
150 the tester and the analysis tools. When the results are
151 written in a standard way, tools can be used to analyze
152 the results. 
154 5 Testing Tools
156 The Linux Test Project has not yet decided on a "final" test
157 harness.  We have provided a simple solution with pan to
158 make due until a complete solution has been found/created
159 that compliments the Linux kernel development process. 
160 Several people have said we should use such and such a test
161 harness. Until we find we need a large complex test harness,
162 we will apply the KISS concept.   
164 5.1 Pan
166 pan is a simple test driver with the ability to keep track
167 of orphaned processes and capture test output. It works
168 by reading a list of test tags and command lines and runs
169 them. By default pan will select a command randomly from
170 the list of test tags, wait for it to finish. Through command
171 line options you can run through the entire list sequentially,
172 run n tests, keep n test running at all times, and buffer
173 test output. Pan can be nested to create very complex test
174 environments.
176 Pan uses an active file, also called a zoo file to keep track
177 of which tests are currently running. This file holds the
178 pid, tag, and a portion of the command line. When you start
179 pan it becomes a test tag in itself, thus it requires a
180 name for itself. Pan updates the active file to show which
181 test tags are currently running. When a test tag exits,
182 pan will overwrite the first character with a '#'. The active
183 file can be shared between multiple instances of pan so
184 you know which tests were running when the system crashes
185 by looking at one file. 
187 A pan file contains a list of test tags for pan to run. The
188 format of a pan file is as follows:
190 testtag testprogram -o one -p two other command line options
192 # This is a comment. It is a good idea to describe the test 
194 # tags in your pan file. Tests programs can have different 
196 # behaviors depending on the command line options so it is 
198 # helpful to describe what each test tag is meant to verify
199 or # provoke.
201 # Some more test cases
203 mm01 mmap001 -m 10000
205 # 40 Mb mmap() test.
207 # Creates a 10000 page mmap, touches all of the map, sync's 
209 # it, and munmap()s it.
211 mm03 mmap001 -i 0 -I 1 -m 100
213 # repetitive mmapping test.
215 # Creates a one page map repetitively for one minute.
217 dup02 dup02
219 # Negative test for dup(2) with bad fd
221 kill09 kill09 
223 # Basic test for kill(2)
225 fs-suite01 pan -e -a fs-suite01.zoo -n fs-suite01 -f runtest/fs
227 # run the entire set of file system tests
229 The test tags are simple identifiers, no spaces are allowed.
230 The test of the line is the program to run, which is done
231 using execvp(3). Lines starting with '#' are comments and
232 ignored by pan. It is a good practice to include descriptions
233 with your test tags so you can have a reminder what a certain
234 obscure test tag tries to do.
236 5.1.1 Examples
238 The most basic way to run pan is by passing the test program
239 and parameters on the command line. This will run the single
240 program once and wrap the output. 
242 $ pan -a ltp.zoo -n tutor sleep 4
244 <<<test_start>>> 
246 tag=cmdln stime=971450564
248 cmdline="sleep 4"
250 contacts=""
252 analysis=exit
254 initiation_status="ok"
256 <<<test_output>>>
258 <<<execution_status>>>
260 duration=103341903 termination_type=exited termination_id=0
261 corefile=no cutime=0 cstime=0
263 <<<test_end>>>
265 $ cat ltp.zoo
267 #9357,tutor,pan/pan -a ltp.zoo -n tutor sleep 4 
269 #9358,cmdln,sleep 4
273 How it works
275 This example shows the two parameters that are always required
276 by pan, the active file and a test tag for pan. The "sleep
277 4" on the end of the command line is a test program and
278 parameters that pan should run. This test is given the tag
279 "cmdln." Pan will run one test randomly, which ends
280 up being cmdln since it is the only test that we told pan
281 about. 
283 In the active file, ltp.zoo, pan writes the pid, test tag,
284 and part of the command line for the currently running tests.
285 The command lines are truncated so each line will fit on
286 an 80 column display. When a test tag finishes, pan will
287 place a '#' at the beginning of the line to mark it as available.
288 Here you can see that cmdln and tutor, the name we gave
289 pan, ran to completion. If the computer hangs, you can read
290 this file to see which test programs were running.
292 We have run one test once. Let's do something a little more
293 exciting. Let's run one test several times, at the same
294 time. 
296 $ pan -a ltp.zoo -n tutor -x 3 -s 3 -O /tmp sleep 1
298 <<<test_start>>>
300 tag=cmdln stime=971465653
302 cmdline="sleep 1"
304 contacts=""
306 analysis=exit
308 initiation_status="ok"
310 <<<test_output>>>
314 <<<execution_status>>>
316 duration=103326814 termination_type=exited termination_id=0
317 corefile=no
319 cutime=1 cstime=0
321 <<<test_end>>>
323 <<<test_start>>>
325 tag=cmdln stime=971465653
327 cmdline="sleep 1"
329 contacts=""
331 analysis=exit
333 initiation_status="ok"
335 <<<test_output>>>
339 <<<execution_status>>>
341 duration=103326814 termination_type=exited termination_id=0
342 corefile=no
344 cutime=0 cstime=1
346 <<<test_end>>>
348 <<<test_start>>>
350 tag=cmdln stime=971465653
352 cmdline="sleep 1"
354 contacts=""
356 analysis=exit
358 initiation_status="ok"
360 <<<test_output>>>
364 <<<execution_status>>>
366 duration=103326814 termination_type=exited termination_id=0
367 corefile=no
369 cutime=0 cstime=0
371 <<<test_end>>>
373 How it works
375 In this example we run another fake test from the command
376 line, but we run it three times (-s 3) and keep three test
377 tags active at the same time (-x 3). The -O parameter is
378 a directory where temporary files can be created to buffer
379 the output of each test tag. You can see in the output that
380 cmdln ran three times. If the -O option were omitted, your
381 test output would be mixed, making it almost worthless. 
383 * Using a pan file to run multiple tests
385 * Nesting pan
387 For more information on pan see the man page doc/man1/pan.1.
389 5.2 Scanner
391 scanner is a results analysis tool that understands the rts
392 style output which pan generates by default. It will produce
393 a table summarizing which tests passed and which failed.
394   
396 5.3 The Quick-hitter Package
398 Many of the tests released use the Quick-hitter test package
399 to perform tasks like create and move to a temporary directory,
400 handle some common command line parameters, loop, run in
401 parallel, handle signals, and clean up. 
403 There is an example test case, doc/examples/quickhit.c, which
404 shows how the quick-hitter package can be used. The file
405 is meant to be a supplement to the documentation, not a
406 working test case. Use any of the tests in tests/ as a template.
408 6 To Do 
410 There are a lot of things that still need to be done to make
411 this a complete kernel testing system. The following sections
412 will discuss some of the to do items in detail.  
414 6.1 Configuration Analysis 
416 While the number of configuration options for the Linux kernel
417 is seen as a strength to developers and users alike, it
418 is a curse to testers.  To create a powerful automated testing
419 system, we need to be able to determine what the configuration
420 on the booted box is and then determine which tests should
421 be run on that box. 
423 The Linux kernel has hundreds of configuration options that
424 can be set to compile the kernel.  There are more options
425 that can be set when you boot the kernel and while it is
426 running.  There are also many patches that can be applied
427 to the kernel to add functionality or change behavior.   
429 6.2 Result Comparison 
431 A lot of testing will be done in the life of the Linux Test
432 Project. Keeping track of the results from all the testing
433 will require some infrastructure. It would be nice to take
434 that output from a test machine, feed it to a program and
435 receive a list of items that broke since the last run on
436 that machine, or were fixed, or work on another test machine
437 but not on this one.   
439 7 Contact information and updates 
441 URL: http://ltp.sourceforge.net/
443 mailing list: ltp-list@lists.sourceforge.net 
445 list archive: https://sourceforge.net/mailarchive/forum.php?forum_name=ltp-list
447 Questions and comments should be sent to the LTP mailing
448 list at ltp-list@lists.sourceforge.net.  To subscribe, please go to
449 https://lists.sourceforge.net/lists/listinfo/ltp-list. 
451 The source is also available via CVS.  See the web site for
452 a web interface and check out instructions. 
454 8 Glossary 
456 Test IEEE/ANSI([footnote] Kit, Edward, Software Testing in the Real World:
457 Improving the Process. P. 82. ACM Press, 1995.) : 
458  (i) An activity in which a system or component is executed
459 under specified conditions, the results are observed or
460 record, and an evaluation is made of some aspect of the
461 system or component. 
462  (ii) A set of one or more test cases. 
464 Test Case A test assertion with a single result that
465   is being verified. This allows designations such as PASS
466   or FAIL to be applied to a single bit of functionality.
467    A single test case may be one of many test cases for
468   testing the complete functionality of a system. 
469   IEEE/ANSI: 
470   (i)A set of test inputs, execution conditions, and expected
471   results developed for a particular objective. 
472   (ii) The smallest entity that is always executed as a unit,
473   from beginning to end. 
475 Test Driver A program that handles the execution of
476   test programs. It is responsible for starting the test
477   programs, capturing their output, and recording their
478   results. Pan is an example of a test driver.
480 Test Framework A mechanism for organizing a group of
481   tests.  Frameworks may have complex or very simple API's,
482   drivers and result logging mechanisms. Examples of frameworks
483   are TETware and DejaGnu. 
485 Test Harness A Test harness is the mechanism that connects
486   a test program to a test framework.  It may be a specification
487   of exit codes,  or a set of libraries for formatting messages
488   and determining exit codes.  In TETware, the tet_result()
489   API is the test harness. 
491 Test Program A single invokable program.  A test program
492   can contain one or more test cases. The test harness's
493   API allows for reporting/analysis of the individual test
494   cases. 
496 Test Suite A collection of tests programs, assertions,
497   cases grouped together under a framework.   
499 Test Tag An identifier that corresponds to a command
500   line which runs a test.  The tag is a single word that
501   matches a test program with a set of command line arguments.