All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bin Meng <bmeng.cn@gmail.com>
To: qemu-devel@nongnu.org, Thomas Huth <thuth@redhat.com>
Cc: "Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Bin Meng" <bin.meng@windriver.com>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
	"Willian Rampazzo" <willianr@redhat.com>
Subject: [PATCH v4 54/54] docs/devel: testing: Document writing portable test cases
Date: Tue, 27 Sep 2022 19:06:32 +0800	[thread overview]
Message-ID: <20220927110632.1973965-55-bmeng.cn@gmail.com> (raw)
In-Reply-To: <20220927110632.1973965-1-bmeng.cn@gmail.com>

From: Bin Meng <bin.meng@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.meng@windriver.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---

Changes in v4:
- Move the new text section after the "QTest" section instead
- Use plural in both cases: "on POSIX hosts as well as Windows hosts"
- Use "The following list shows some best practices"
- Fix typo of delimiter

(no changes since v3)

Changes in v2:
- Minor wording changes
- Drop patches that were already applied in the mainline
- Drop patch: "qga/commands-posix-ssh: Use g_mkdir_with_parents()"
- Drop patch: "tests: Skip iotests and qtest when '--without-default-devices'"
- Drop patch: "tests/qtest: Fix ERROR_SHARING_VIOLATION for win32"

 docs/devel/testing.rst | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/docs/devel/testing.rst b/docs/devel/testing.rst
index aea5b42356..fbb98faabe 100644
--- a/docs/devel/testing.rst
+++ b/docs/devel/testing.rst
@@ -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
 ~~~~~~~~~~~~~~~~~
 
-- 
2.34.1



  parent reply	other threads:[~2022-09-27 13:28 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-27 11:05 [PATCH v4 00/54] tests/qtest: Enable running qtest on Windows Bin Meng
2022-09-27 11:05 ` [PATCH v4 01/54] tests/qtest: i440fx-test: Rewrite create_blob_file() to be portable Bin Meng
2022-09-27 11:05 ` [PATCH v4 02/54] semihosting/arm-compat-semi: Avoid using hardcoded /tmp Bin Meng
2022-10-01  3:41   ` Bin Meng
2022-09-27 11:05 ` [PATCH v4 03/54] tcg: " Bin Meng
2022-10-01  3:42   ` Bin Meng
2022-09-27 11:05 ` [PATCH v4 04/54] util/qemu-sockets: Use g_get_tmp_dir() to get the directory for temporary files Bin Meng
2022-10-01  3:44   ` Bin Meng
2022-10-03 10:28     ` Daniel P. Berrangé
2022-09-27 11:05 ` [PATCH v4 05/54] tests/qtest: ahci-test: Avoid using hardcoded /tmp Bin Meng
2022-09-27 11:05 ` [PATCH v4 06/54] tests/qtest: aspeed_smc-test: " Bin Meng
2022-09-27 11:05 ` [PATCH v4 07/54] tests/qtest: boot-serial-test: " Bin Meng
2022-09-27 11:05 ` [PATCH v4 08/54] tests/qtest: cxl-test: " Bin Meng
2022-09-27 11:05 ` [PATCH v4 09/54] tests/qtest: fdc-test: " Bin Meng
2022-09-27 11:05 ` [PATCH v4 10/54] tests/qtest: generic_fuzz: " Bin Meng
2022-09-27 11:05 ` [PATCH v4 11/54] tests/qtest: virtio_blk_fuzz: " Bin Meng
2022-09-27 11:05 ` [PATCH v4 12/54] tests/qtest: hd-geo-test: " Bin Meng
2022-09-27 12:21   ` Thomas Huth
2022-09-27 11:05 ` [PATCH v4 13/54] tests/qtest: ide-test: " Bin Meng
2022-09-27 11:05 ` [PATCH v4 14/54] tests/qtest: migration-test: " Bin Meng
2022-09-27 14:26   ` Marc-André Lureau
2022-09-27 11:05 ` [PATCH v4 15/54] tests/qtest: pflash-cfi02-test: " Bin Meng
2022-09-27 14:27   ` Marc-André Lureau
2022-09-27 11:05 ` [PATCH v4 16/54] tests/qtest: qmp-test: " Bin Meng
2022-09-27 14:27   ` Marc-André Lureau
2022-09-27 11:05 ` [PATCH v4 17/54] tests/qtest: vhost-user-blk-test: " Bin Meng
2022-09-27 11:05 ` [PATCH v4 18/54] tests/qtest: vhost-user-test: " Bin Meng
2022-09-27 14:28   ` Marc-André Lureau
2022-09-27 11:05 ` [PATCH v4 19/54] tests/qtest: virtio-blk-test: " Bin Meng
2022-09-27 11:05 ` [PATCH v4 20/54] tests/qtest: virtio-scsi-test: " Bin Meng
2022-09-27 11:05 ` [PATCH v4 21/54] tests/qtest: libqtest: " Bin Meng
2022-09-27 11:06 ` [PATCH v4 22/54] tests/unit: test-image-locking: " Bin Meng
2022-09-27 11:06 ` [PATCH v4 23/54] tests/unit: test-qga: " Bin Meng
2022-09-27 11:06 ` [PATCH v4 24/54] tests: vhost-user-bridge: " Bin Meng
2022-09-27 11:06 ` [PATCH v4 25/54] block/vvfat: Unify the mkdir() call Bin Meng
2022-10-01  3:46   ` Bin Meng
2022-09-27 11:06 ` [PATCH v4 26/54] fsdev/virtfs-proxy-helper: Use g_mkdir() Bin Meng
2022-10-01  3:48   ` Bin Meng
2022-10-01 12:12     ` Christian Schoenebeck
2022-09-27 11:06 ` [PATCH v4 27/54] hw/usb: dev-mtp: " Bin Meng
2022-10-01  3:49   ` Bin Meng
2022-09-27 11:06 ` [PATCH v4 28/54] tests/qtest: Skip running virtio-net-test cases that require socketpair() for win32 Bin Meng
2022-09-27 11:06 ` [PATCH v4 29/54] tests/qtest: Build test-filter-{mirror, redirector} cases for posix only Bin Meng
2022-09-27 11:06 ` [PATCH v4 30/54] tests/qtest: qmp-test: Skip running test_qmp_oob for win32 Bin Meng
2022-09-27 11:06 ` [PATCH v4 31/54] accel/qtest: Implement a portable qtest accelerator Bin Meng
2022-09-28  9:00   ` Thomas Huth
2022-09-27 11:06 ` [PATCH v4 32/54] tests/qtest: libqtest: Adapt global_qtest declaration for win32 Bin Meng
2022-09-27 11:06 ` [PATCH v4 33/54] tests/qtest: Use send/recv for socket communication Bin Meng
2022-09-27 11:06 ` [PATCH v4 34/54] tests/qtest: libqtest: Exclude the *_fds APIs for win32 Bin Meng
2022-09-27 11:06 ` [PATCH v4 35/54] tests/qtest: libqtest: Install signal handler via signal() Bin Meng
2022-09-28  9:42   ` Thomas Huth
2022-09-28  9:57     ` Bin Meng
2022-09-28 10:03       ` Thomas Huth
2022-09-27 11:06 ` [PATCH v4 36/54] tests/qtest: Support libqtest to build and run on Windows Bin Meng
2022-09-27 11:06 ` [PATCH v4 37/54] tests/qtest: {ahci, ide}-test: Use relative path for temporary files for win32 Bin Meng
2022-09-27 11:06 ` [PATCH v4 38/54] tests/qtest: bios-tables-test: Adapt the case " Bin Meng
2022-09-27 11:06 ` [PATCH v4 39/54] tests/qtest: boot-serial-test: Close the serial file before starting QEMU Bin Meng
2022-09-27 14:29   ` Marc-André Lureau
2022-09-27 11:06 ` [PATCH v4 40/54] tests/qtest: ide-test: Open file in binary mode Bin Meng
2022-09-27 11:06 ` [PATCH v4 41/54] tests/qtest: microbit-test: Fix socket access for win32 Bin Meng
2022-09-27 11:06 ` [PATCH v4 42/54] tests/qtest: migration-test: Disable IO redirection " Bin Meng
2022-09-27 11:06 ` [PATCH v4 43/54] tests/qtest: migration-test: Make sure QEMU process "to" exited after migration is canceled Bin Meng
2022-09-27 13:15   ` Marc-André Lureau
2022-09-27 13:21     ` Bin Meng
2022-09-27 14:23       ` Marc-André Lureau
2022-09-27 11:06 ` [PATCH v4 44/54] tests/qtest: virtio-net-failover: Disable migration tests for win32 Bin Meng
2022-09-27 11:06 ` [PATCH v4 45/54] tests/qtest: libqtest: Replace the call to close a socket with closesocket() Bin Meng
2022-09-27 11:06 ` [PATCH v4 46/54] tests/qtest: libqtest: Correct the timeout unit of blocking receive calls for win32 Bin Meng
2022-09-27 11:06 ` [PATCH v4 47/54] io/channel-watch: Drop a superfluous '#ifdef WIN32' Bin Meng
2022-09-27 11:06 ` [PATCH v4 48/54] io/channel-watch: Drop the unnecessary cast Bin Meng
2022-09-27 11:06 ` [PATCH v4 49/54] io/channel-watch: Fix socket watch on Windows Bin Meng
2022-09-27 11:06 ` [PATCH v4 50/54] tests/qtest: migration-test: Skip running some TLS cases for win32 Bin Meng
2022-09-27 14:32   ` Marc-André Lureau
2022-09-27 14:38     ` Bin Meng
2022-09-27 14:47       ` Marc-André Lureau
2022-09-27 11:06 ` [PATCH v4 51/54] .gitlab-ci.d/windows.yml: Increase the timeout to 90 minutes Bin Meng
2022-09-27 11:06 ` [PATCH v4 52/54] .gitlab-ci.d/windows.yml: Display meson test logs Bin Meng
2022-09-27 11:06 ` [PATCH v4 53/54] tests/qtest: Enable qtest build on Windows Bin Meng
2022-09-27 13:34   ` Thomas Huth
2022-09-27 11:06 ` Bin Meng [this message]
2022-09-27 13:36   ` [PATCH v4 54/54] docs/devel: testing: Document writing portable test cases Thomas Huth
2022-09-28 10:31 ` [PATCH v4 00/54] tests/qtest: Enable running qtest on Windows Thomas Huth
2022-09-28 15:24   ` Thomas Huth
2022-09-28 15:30     ` Daniel P. Berrangé
2022-10-03  9:25 ` Marc-André Lureau
2022-10-03 10:08   ` Bin Meng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220927110632.1973965-55-bmeng.cn@gmail.com \
    --to=bmeng.cn@gmail.com \
    --cc=alex.bennee@linaro.org \
    --cc=bin.meng@windriver.com \
    --cc=f4bug@amsat.org \
    --cc=marcandre.lureau@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=thuth@redhat.com \
    --cc=willianr@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.