Files

151 lines
6.3 KiB
Plaintext
Raw Permalink Normal View History

WRITING TESTS WITH TPKG
(c) NLnet Labs, 2005. Miek Gieben
Licensed under the GPL version 2.
Introduction
In itself tpkg doesn't make writing tests any easier, it is just a
container format. The following sections will over some guidelines
and guidance on creating new tests.
As always, looking at other tests will help you understand tpkg
better :-)
Handy Commands
tpkg list <testname.tpkg> - list the contents of a test
tpkg fake <testname.tpkg> - fake a testrun - this write a
.done file
Writing a Test
First choose a language. tpkg itself is writting in bash, and the
scripts are also assumed to be shell scripts, but nothing prevents
you from using the #!-syntax to fork another interpreter.
Next comes to actual scripting/writing.
Step 1
Execute a 'tpkg tmpl <testname>', where <testname>
is a descriptive name for you test. Assume our test
is called 'bug001'.
tpkg will create a subdirectory named bug001.dir and
will put the following files in there:
- bug001.dsc - description file
- bug001.test - main test script
- bug001.help - help file for the user
The description file is line based, multiline entries
will not be parsed correctly. Also tpkg using the
colon ':' as a delimeter, so that character cannot
be used in the for instance the "Description:" line.
All files that are used in a test MUST have the same
prefix. In this case that is 'bug001'.
Step 2
Fill out the bug001.dsc file, i.e. add a description
in there. You are now ready to create your test in
bug001.test. (Also check step 3, 4 and 5).
Step 2a
Fill out the bug001.help file. Thing like special
arguments to the test can be put in this file.
Step 3
Are there things that need to be done before the
test can be run, i.e. setting up some environment?
This can be done best in a .pre script. If you create
such a script you must also add that to bug001.dsc,
under 'Pre:'. If this script fails, the main test
script is not execeuted and the test is aborted.
Step 4
Anything that was setup with a pre script should be
taken down with a post script. Everything that applies
for the pre-script also applies for a post script, except
that a failure of the post script doesn't abort the test.
Step 5
Do you need any extra files? If yes, list them under
"AuxFiles:" in the description file.
Step 6
When you are happy about your test, and it works:
bash ./bug001.test executes correctly, you can create
your test package. Go up one directory:
cd ..
And create your test:
tpkg create bug001.tpkg
This will get all files from the bug001.dir/ and will
create the shell archive named bug001.tpkg
Step 7
Test your test:
tpkg exe bug001.tpkg
This should create a .done-bug001 and a result-bug001
file. If the test failed you can re-examine the test
by unpacking it:
tpkg extract bug001.tpkg
This will re-create the bug001.dir/ with all the files
in it.
Step 8
If everything is gone allright the test can be added
to the archive of the package that you are testing.
Pittfalls
The following list are known pittfalls and how to avoid them:
* Path issues
When a test is executed from subversion, by using the
post-commit hook, the $PATH is cleared for security
reasons. This also means that some utilities that might be
used in the test cannot be found.
It is prudent to (re)set the $PATH at the top of each
test script, or use absolute pathnames for /all/ external
commands in your test.
* Relative path issues
Each test is executed in a random subdirectory, there it
is also unpacked. So anything you reference with ../ will
need an extra ../ when the final test is ready. Almost
always this will not be an issue because the writing and
testing of the test also happens in a subdirectory. But
keep this in mind when a test doen't work as a final
package.
Conventions
.tpkg.var.master
Sometimes you want to provide the main test script with information
only available in the pre script. Also some tests may need
information from other tests.
tpkg uses a files named ".tpkg.var.master" for this purpose. This file
is /not/ stored in the temporary directory where the test is
executed, because it must survive after the test has completed.
Things like usernames, paths or other environment variables
might be stored in this file.
When writing to the file be sure to use >> in stead of > which
destroys any previous content.
.tpkg.var.master lives for the duration of all the tests.
It is deleted when 'tpkg clean' runs
.tpkg.var.test
During the run of a test one might want to exchange
information from a .pre script to the main test. For
instance when the pre script sets up a server it may want
to communicate the port number to the test script.
"tpkg.var.test" is meant for these local exchanges.
The file lives in the temporary subdirectory where the
test is executed. This also means it is removed after
the test has run.