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