[PATCH v2 00/18] iotests: add detailed tracebacks to qemu_img() failures

John Snow posted 18 patches 2 years, 2 months ago
Test checkpatch passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20220221223413.2123003-1-jsnow@redhat.com
Maintainers: Kevin Wolf <kwolf@redhat.com>, Hanna Reitz <hreitz@redhat.com>
python/qemu/utils/__init__.py                 |  58 +++++
tests/qemu-iotests/041                        |   5 +-
tests/qemu-iotests/065                        |   7 +-
tests/qemu-iotests/149                        |   8 +-
tests/qemu-iotests/163                        |   9 +-
tests/qemu-iotests/194                        |   4 +-
tests/qemu-iotests/202                        |   4 +-
tests/qemu-iotests/203                        |   4 +-
tests/qemu-iotests/211                        |   6 +-
tests/qemu-iotests/216                        |   6 +-
tests/qemu-iotests/218                        |   2 +-
tests/qemu-iotests/224                        |  11 +-
tests/qemu-iotests/228                        |  12 +-
tests/qemu-iotests/234                        |   4 +-
tests/qemu-iotests/237                        |   3 +-
tests/qemu-iotests/237.out                    |   3 -
tests/qemu-iotests/242                        |   5 +-
tests/qemu-iotests/255                        |   8 +-
tests/qemu-iotests/255.out                    |   4 -
tests/qemu-iotests/257                        |  11 +-
tests/qemu-iotests/258                        |   4 +-
tests/qemu-iotests/262                        |   2 +-
tests/qemu-iotests/274                        |  17 +-
tests/qemu-iotests/274.out                    |  29 ---
tests/qemu-iotests/280                        |   2 +-
tests/qemu-iotests/280.out                    |   1 -
tests/qemu-iotests/296                        |  13 +-
tests/qemu-iotests/303                        |   2 +-
tests/qemu-iotests/310                        |  14 +-
tests/qemu-iotests/iotests.py                 | 217 ++++++++++++++----
tests/qemu-iotests/tests/block-status-cache   |  14 +-
tests/qemu-iotests/tests/image-fleecing       |   4 +-
.../tests/mirror-ready-cancel-error           |   6 +-
tests/qemu-iotests/tests/mirror-top-perms     |   3 +-
.../qemu-iotests/tests/parallels-read-bitmap  |   6 +-
.../tests/remove-bitmap-from-backing          |  14 +-
.../qemu-iotests/tests/stream-error-on-reset  |   4 +-
37 files changed, 334 insertions(+), 192 deletions(-)
[PATCH v2 00/18] iotests: add detailed tracebacks to qemu_img() failures
Posted by John Snow 2 years, 2 months ago
This series does two things:

(1) Adds more detailed information to terminal output when qemu-img
    crashes or returns with a non-zero exit code

(2) Ensures that every last call to qemu-img made in the iotest test
    suite either returns a zero, *or* has its output logged.

This is accomplished by:

- Adding a new subprocess.CalledProcessError exception type that's more
  verbose than the standard, built-in one

- Rewriting the qemu_img() function to utilize that new Exception

- Modifying every last iotest helper that invokes qemu-img to use
  qemu_img() or a derivative thereof.

This patchset was inspired by Thomas Huth noticing that iotest 065 would
crash in a way that was largely silent, except for async QMP traces when
the VM failed to start. The root cause in that case is that iotest 065
did not tolerate zstd support being compiled out of QEMU, so the
qemu-img command fails - silently. (And subsequent test actions would
then explode nastily with confusing or misleading error messages.)

So, broadly, I rewrote qemu_img() to be a lot stricter by default, and
then rebased every other helper function that called into the qemu-img
process to use qemu_img().

RFC:

- 'enboxify()' text decoration does not support unicode too well. I
  think it's important to have some text decoration, but I haven't
  gotten around to making it smarter. I might remove it for something
  simpler to avoid having to learn more about unicode.

- At this point, every last qemu-img call is audited, but I did not
  extend the same treatment to qemu-io, qemu-nbd, etc. I intend to,
  later. Eventually, I plan to offer something like 'qemu_tool()' as a
  replacement for 'qemu_tool_pipe_and_status()', and qemu_img() will
  become a thin wrapper around qemu_tool().

V2:
 - Ensure *all* calls to qemu-img go through qemu_img()
 - Raise VerboseProcessError on negative return code,
   even when check=False
 - Check logging status for logged variants and revert to
   Exceptions when logging is off!

John Snow (18):
  python/utils: add enboxify() text decoration utility
  iotests: add VerboseProcessError
  iotests: Remove explicit checks for qemu_img() == 0
  iotests: make qemu_img raise on non-zero rc by default
  iotests: fortify compare_images() against crashes
  iotests: add qemu_img_json()
  iotests: use qemu_img_json() when applicable
  iotests: add qemu_img_info()
  iotests: remove-bitmap-from-backing: use qemu_img_info()
  iotests: add qemu_img_map() function
  iotests: change supports_quorum to use qemu_img
  iotests: replace unchecked calls to qemu_img_pipe()
  iotests: remove external calls to qemu_img_pipe()
  iotests: move has_working_luks onto qemu_img()
  iotests: remove qemu_img_log('create', ...) calls
  iotests: remove qemu_img_pipe()
  iotests: make qemu_img_log() check log level
  iotests: reimplement img_info_log in terms of qemu_img_log

 python/qemu/utils/__init__.py                 |  58 +++++
 tests/qemu-iotests/041                        |   5 +-
 tests/qemu-iotests/065                        |   7 +-
 tests/qemu-iotests/149                        |   8 +-
 tests/qemu-iotests/163                        |   9 +-
 tests/qemu-iotests/194                        |   4 +-
 tests/qemu-iotests/202                        |   4 +-
 tests/qemu-iotests/203                        |   4 +-
 tests/qemu-iotests/211                        |   6 +-
 tests/qemu-iotests/216                        |   6 +-
 tests/qemu-iotests/218                        |   2 +-
 tests/qemu-iotests/224                        |  11 +-
 tests/qemu-iotests/228                        |  12 +-
 tests/qemu-iotests/234                        |   4 +-
 tests/qemu-iotests/237                        |   3 +-
 tests/qemu-iotests/237.out                    |   3 -
 tests/qemu-iotests/242                        |   5 +-
 tests/qemu-iotests/255                        |   8 +-
 tests/qemu-iotests/255.out                    |   4 -
 tests/qemu-iotests/257                        |  11 +-
 tests/qemu-iotests/258                        |   4 +-
 tests/qemu-iotests/262                        |   2 +-
 tests/qemu-iotests/274                        |  17 +-
 tests/qemu-iotests/274.out                    |  29 ---
 tests/qemu-iotests/280                        |   2 +-
 tests/qemu-iotests/280.out                    |   1 -
 tests/qemu-iotests/296                        |  13 +-
 tests/qemu-iotests/303                        |   2 +-
 tests/qemu-iotests/310                        |  14 +-
 tests/qemu-iotests/iotests.py                 | 217 ++++++++++++++----
 tests/qemu-iotests/tests/block-status-cache   |  14 +-
 tests/qemu-iotests/tests/image-fleecing       |   4 +-
 .../tests/mirror-ready-cancel-error           |   6 +-
 tests/qemu-iotests/tests/mirror-top-perms     |   3 +-
 .../qemu-iotests/tests/parallels-read-bitmap  |   6 +-
 .../tests/remove-bitmap-from-backing          |  14 +-
 .../qemu-iotests/tests/stream-error-on-reset  |   4 +-
 37 files changed, 334 insertions(+), 192 deletions(-)

-- 
2.34.1