Hi On Wed, Aug 24, 2022 at 2:57 PM Bin Meng <bmeng...@gmail.com> wrote:
> From: Bin Meng <bin.m...@windriver.com> > > 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.m...@windriver.com> > Reviewed-by: Marc-André Lureau <marcandre.lur...@redhat.com> > --- > > docs/devel/testing.rst | 30 ++++++++++++++++++++++++++++++ > 1 file changed, 30 insertions(+) > > diff --git a/docs/devel/testing.rst b/docs/devel/testing.rst > index 3f6ebd5073..8fcabda30f 100644 > --- a/docs/devel/testing.rst > +++ b/docs/devel/testing.rst > @@ -115,6 +115,36 @@ check-block > are in the "auto" group). > See the "QEMU iotests" section below for more information. > > +Writing portable test cases > +~~~~~~~~~~~~~~~~~~~~~~~~~~~ > +Both unit tests and qtests can run on a Linux host as well as a Windows > host. > I believe they can work on other hosts too :) "can run on a Windows host." > +Care must be taken when writing portable test cases that can be built and > run > +successfully on both hosts. The following are some best practices: > "on various hosts" > + > +* Use portable APIs from glib whenever necessary, e.g.: g_setenv(), > + g_mkdtemp(), g_mkdir_with_parents(). > +* 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 delimeter ":" 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. > + > QEMU iotests > ------------ > > -- > 2.34.1 > > > -- Marc-André Lureau