docs/devel: testing: Document writing portable test cases

Update the best practices of how to write portable test cases that
can be built and run successfully on both Linux and Windows hosts.

Signed-off-by: Bin Meng <bin.meng@windriver.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20220927110632.1973965-55-bmeng.cn@gmail.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
Bin Meng 2022-09-27 19:06:32 +08:00 committed by Thomas Huth
parent 65a2eff0f5
commit 0b49bc1b71

View File

@ -81,6 +81,36 @@ QTest cases can be executed with
make check-qtest
Writing portable test cases
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Both unit tests and qtests can run on POSIX hosts as well as Windows hosts.
Care must be taken when writing portable test cases that can be built and run
successfully on various hosts. The following list shows some best practices:
* Use portable APIs from glib whenever necessary, e.g.: g_setenv(),
g_mkdtemp(), g_mkdir().
* Avoid using hardcoded /tmp for temporary file directory.
Use g_get_tmp_dir() instead.
* Bear in mind that Windows has different special string representation for
stdin/stdout/stderr and null devices. For example if your test case uses
"/dev/fd/2" and "/dev/null" on Linux, remember to use "2" and "nul" on
Windows instead. Also IO redirection does not work on Windows, so avoid
using "2>nul" whenever necessary.
* If your test cases uses the blkdebug feature, use relative path to pass
the config and image file paths in the command line as Windows absolute
path contains the delimiter ":" which will confuse the blkdebug parser.
* Use double quotes in your extra QEMU commmand line in your test cases
instead of single quotes, as Windows does not drop single quotes when
passing the command line to QEMU.
* Windows opens a file in text mode by default, while a POSIX compliant
implementation treats text files and binary files the same. So if your
test cases opens a file to write some data and later wants to compare the
written data with the original one, be sure to pass the letter 'b' as
part of the mode string to fopen(), or O_BINARY flag for the open() call.
* If a certain test case can only run on POSIX or Linux hosts, use a proper
#ifdef in the codes. If the whole test suite cannot run on Windows, disable
the build in the meson.build file.
QAPI schema tests
~~~~~~~~~~~~~~~~~