Tempest Field Guide to Stress Tests
===================================

Nova is a distributed, asynchronous system that is prone to race condition
bugs. These bugs will not be easily found during
functional testing but will be encountered by users in large deployments in a
way that is hard to debug. The stress test tries to cause these bugs to happen
in a more controlled environment.


Environment
-----------
This particular framework assumes your working Nova cluster understands Nova
API 2.0. The stress tests can read the logs from the cluster. To enable this
you have to provide the hostname to call 'nova-manage' and
the private key and user name for ssh to the cluster in the
[stress] section of tempest.conf. You also need to provide the
location of the log files:

	target_logfiles = "regexp to all log files to be checked for errors"
	target_private_key_path = "private ssh key for controller and log file nodes"
	target_ssh_user = "username for controller and log file nodes"
	target_controller = "hostname or ip of controller node (for nova-manage)
	log_check_interval = "time between checking logs for errors (default 60s)"

To activate logging on your console please make sure that you activate `use_stderr`
in tempest.conf or use the default `logging.conf.sample` file.

Running default stress test set
-------------------------------

The stress test framework can automatically discover test inside the tempest
test suite. All test flag with the `@stresstest` decorator will be executed.
In order to use this discovery you have to be in the tempest root directory
and execute the following:

	tempest/stress/run_stress.py -a -d 30

Running the sample test
-----------------------

To test installation, do the following (from the tempest/stress directory):

	./run_stress.py -t etc/server-create-destroy-test.json -d 30

This sample test tries to create a few VMs and kill a few VMs.


Additional Tools
----------------

Sometimes the tests don't finish, or there are failures. In these
cases, you may want to clean out the nova cluster. We have provided
some scripts to do this in the ``tools`` subdirectory.
You can use the following script to destroy any keypairs,
floating ips, and servers:

tempest/stress/tools/cleanup.py
