The currently existing 9pfs test cases are all solely using the 9pfs 'synth'
fileystem driver, which is a very simple and purely simulated (in RAM only)
filesystem. There are issues though where the 'synth' fs driver is not
sufficient. For example the following two bugs need test cases running the
9pfs 'local' fs driver:

https://bugs.launchpad.net/qemu/+bug/1336794
https://bugs.launchpad.net/qemu/+bug/1877384

This patch set for that reason introduces 9pfs test cases using the 9pfs
'local' filesystem driver along to the already existing tests on 'synth'.
It consists of 3 parts:

1. Mandatory qos patches 1 and 2 lay the ground by removing a limitation of
   the qtest/qos subsystem: support for more than one device using the same
   (official) QEMU device name.

2. Optional qos patches 3 to 6 were used for debugging the qtest framework.
   I found them very useful to get insight how the qos graph is built, how
   the generated QEMU commands looks like, and what environemnt variables are
   already available in qtests. I thought they might helpful for other people
   as well, either in suggested or some modified form. Especially as it's not
   obvious sometimes why certain tests are simply ignored by the qtest
   framework (e.g. because of a missing link in qos path from test node to
   qos root node, or certain devices been auto marked as 'unavailable' after
   QMP negotiation with QEMU). I introduced several new QTEST_* environment
   variables for the individual debugging aspects; maybe they could simply
   use one and the same variable like QTEST_DEBUG instead.
   Note: patch 3 uses coloured output to mark the individual graph nodes as
   either available or unavailable. It does not check for tty color support
   right now. I'm not sure if there is already some QEMU util function that
   could be used for that check.

3. Patches 7 to 12 actually introduce 9pfs 'local' test cases using the qtest
   framework. They only work in conjunction with qos patches 1 and 2. These
   'local' tests are adding a test directory 'qtest-9p-local' inside the
   current working directory (using get_current_dir()), which is typically the
   build directory, before running the tests. That test directory is
   automatically recreated next time the test suite is run again, to ensure
   the 9pfs 'local' tests always run consistently on a clean test directory.
   The test directory is used by the 'local' driver as root of its export
   path. So it will add/read/write/delete real files and directories inside
   that test directory.
   Note: I was adding a bunch of basic util functions like split(),
   concat_path() and strpr(). I am not sure if there are already public QEMU
   util functions that I could instead of them.

Christian Schoenebeck (12):
  tests/qtest/qgraph: add qemu_name to QOSGraphNode
  tests/qtest/qgraph: add qos_node_create_driver_named()
  tests/qtest/qos: add qos_dump_graph()
  tests/qtest/qos-test: new QTEST_DUMP_GRAPH environment variable
  tests/qtest/qos-test: add QTEST_DUMP_ENV environment variable
  tests/qtest/qos-test: add environment variable QTEST_DEBUG
  test/9pfs: change export tag name to qtest-synth
  tests/9pfs: refactor test names and test devices
  tests/9pfs: introduce local tests
  tests/9pfs: wipe local 9pfs test directory
  tests/9pfs: add virtio_9p_test_path()
  tests/9pfs: add local Tmkdir test

 tests/qtest/libqos/qgraph.c          | 108 ++++++++++++++-
 tests/qtest/libqos/qgraph.h          |  36 +++++
 tests/qtest/libqos/qgraph_internal.h |   1 +
 tests/qtest/libqos/virtio-9p.c       | 147 ++++++++++++++++++---
 tests/qtest/libqos/virtio-9p.h       |   8 +-
 tests/qtest/qos-test.c               |  15 ++-
 tests/qtest/virtio-9p-test.c         | 188 ++++++++++++++++++++++++---
 7 files changed, 463 insertions(+), 40 deletions(-)

-- 
2.20.1


Reply via email to