
Linux Test Project
http://oss.sgi.com/projects/ltp/


About the Linux Test Project

The Linux Test Project aims to develop a set of tools and tests to verify the
functionality and stability of the Linux kernel.  We hope this will support
Linux development by making unit testing more complete and minimizing user
impact by building a barrier to keep bugs from making it to the user.  The main
goal of the project is regression and functional testing, but there are many
ways this project can grow.  


In the Package
--------------
Here is a short description of what is included in this package

INSTALL
	Installation documentation and quick start guide

README
	This document

CREDITS
	Credits to those who have contributed to the project.

COPYING
	GNU Public License

ChangeLog
	An incomplete list of changes to the project.  We will try harder to
	keep this up to date.

Makefile
	Top level make file for LTP.  

runalltests.sh
	A simple script to run all of the packaged tests in sequential order and
	report the over all result.  

doc/*
	Documentation for the project including man pages for some of the
	tools and library functions.

doio/*
	The doio directory contains three tools: doio, iogen, and growfiles.
	These are elaborate filesystem tests for stressing and testing the
	functionality of the filesystem.  There is also a wrapper for doio
	and iogen called rwtest.  Command examples for these tools can be
	found in runtest/fs.

include/*
lib/*
	The include and lib directories contain headers and codes for common
	routines used by many of the tests.  We have tried to keep this to a
	minimum.  

tests/*
	To date the tests directory contains a number of simple tests called
	'quickhitters'.  These tests are designed to be simple and quick and
	be run in conjunction with each other.  They have some use as stand
	alone tests, but when run many-at-a-time, interesting issues can come
	up.

runtest/*
	This directory should be removed.  Currently it houses command lists that
	are used by pan for automated testing.
pan/*
	The pan directory contains a simple, lightweight test harness.  pan
	has the ability to run tests randomly and in parallel.  See pan's man
	page for more information.


Warning!
--------
Be careful with these tests!

Don't run them on production systems.  Growfiles, doio, and iogen in particular
stress the I/O capabilities of systems and while they should not cause problems
on properly functioning systems, they are intended to find (or cause) problems.


Contact Information and Updates
-------------------------------

URL: http://oss.sgi.com/projects/ltp/
email: owners-ltp@oss.sgi.com

Questions and comments should be sent to the LTP mailing list at
ltp@oss.sgi.com.  To subscribe, send mail to majordomo@oss.sgi.com with
"subscribe ltp" in the body of the message.

A list archive is available at http://oss.sgi.com/projects/ltp/mail-threaded/
