On 25.06.2014 16:35, Kevin Wolf wrote:
This is the first part of an attempt for disentangling bdrv_open(). At the end
of this series, bdrv_open() code is somewhat easier to read, but the real
changes (including some bug fixes and changes of behaviour) haven't happened
yet.

Just sending out the first part now to get this merged early and avoid
conflicts.

v2:
- Rebased on current git master
- Patch 1: Removed redundant if condition [Benoît]
            Replaced redundant error check with assertion [Eric]
- Patch 2: Fixed leak in error path [Benoît]

Kevin Wolf (9):
   block: Create bdrv_fill_options()
   block: Move bdrv_fill_options() call to bdrv_open()
   block: Move json: parsing to bdrv_fill_options()
   block: Always pass driver name through options QDict
   block: Use common driver selection code for bdrv_open_file()
   block: Inline bdrv_file_open()
   block: Remove second bdrv_open() recursion
   block: Catch backing files assigned to non-COW drivers
   block: Remove a special case for protocols

  block.c                    | 280 ++++++++++++++++++++++-----------------------
  block/cow.c                |   1 +
  block/qcow.c               |   1 +
  block/qcow2.c              |   1 +
  block/qed.c                |   1 +
  block/vmdk.c               |   1 +
  include/block/block_int.h  |   3 +
  tests/qemu-iotests/051     |   6 +
  tests/qemu-iotests/051.out |  14 ++-
  9 files changed, 164 insertions(+), 144 deletions(-)

With this series, iotests 040, 041 and 067 fail for me. I attached the result.

Max
QEMU          -- /home/mreitz/projects/qemu/tests/qemu-iotests/qemu
QEMU_IMG      -- /home/mreitz/projects/qemu/tests/qemu-iotests/qemu-img
QEMU_IO       -- /home/mreitz/projects/qemu/tests/qemu-iotests/qemu-io 
QEMU_NBD      -- /home/mreitz/projects/qemu/tests/qemu-iotests/qemu-nbd
IMGFMT        -- qcow2 (compat=1.1)
IMGPROTO      -- file
PLATFORM      -- Linux/x86_64 dresden 3.14.5-200.fc20.x86_64
SOCKET_SCM_HELPER -- 

040 10s ...        [23:15:41] [23:15:52] [failed, exit status 1] - output 
mismatch (see 040.out.bad)
--- 040.out     2014-06-26 23:10:00.591073323 +0200
+++ 040.out.bad 2014-06-26 23:15:52.102465884 +0200
@@ -1,5 +1,47 @@
-........................
+.....F.......F.......F..
+======================================================================
+FAIL: test_top_is_active (__main__.TestActiveZeroLengthImage)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./040", line 112, in test_top_is_active
+    self.run_commit_test(test_img, backing_img, need_ready=True)
+  File "./040", line 57, in run_commit_test
+    self.assert_qmp(event, 'data/type', 'commit')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_top_is_active (__main__.TestRelativePaths)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./040", line 202, in test_top_is_active
+    self.run_commit_test(self.test_img, self.backing_img)
+  File "./040", line 57, in run_commit_test
+    self.assert_qmp(event, 'data/type', 'commit')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_top_is_active (__main__.TestSingleDrive)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./040", line 112, in test_top_is_active
+    self.run_commit_test(test_img, backing_img, need_ready=True)
+  File "./040", line 57, in run_commit_test
+    self.assert_qmp(event, 'data/type', 'commit')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
 ----------------------------------------------------------------------
 Ran 24 tests
 
-OK
+FAILED (failures=3)
041 17s ...        [23:15:52] [23:16:21] [failed, exit status 1] - output 
mismatch (see 041.out.bad)
--- 041.out     2014-06-26 23:10:00.591073323 +0200
+++ 041.out.bad 2014-06-26 23:16:21.502833277 +0200
@@ -1,5 +1,399 @@
-...................................
+FEFFFFFF..FF.FF..F.FFF.FF...FFFFFFFF
+======================================================================
+ERROR: test_cancel (__main__.TestMirrorNoBacking)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 235, in tearDown
+    os.remove(target_backing_img)
+OSError: [Errno 2] No such file or directory: 
'/home/mreitz/projects/qemu/tests/qemu-iotests/scratch/target-backing.img'
+
+======================================================================
+FAIL: test_cancel (__main__.TestMirrorNoBacking)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 261, in test_cancel
+    self.wait_ready_and_cancel()
+  File "./041", line 45, in wait_ready_and_cancel
+    self.wait_ready(drive)
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_complete (__main__.TestMirrorNoBacking)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 246, in test_complete
+    self.complete_and_wait()
+  File "./041", line 219, in complete_and_wait
+    return ImageMirroringTestCase.complete_and_wait(self, drive, wait_ready)
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_large_cluster (__main__.TestMirrorNoBacking)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 282, in test_large_cluster
+    self.complete_and_wait()
+  File "./041", line 219, in complete_and_wait
+    return ImageMirroringTestCase.complete_and_wait(self, drive, wait_ready)
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_complete_full (__main__.TestMirrorResized)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 330, in test_complete_full
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_complete_top (__main__.TestMirrorResized)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 316, in test_complete_top
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_ignore_read (__main__.TestReadErrors)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 428, in test_ignore_read
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_large_cluster (__main__.TestReadErrors)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 449, in test_large_cluster
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_set_speed (__main__.TestSetSpeed)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 654, in test_set_speed
+    self.wait_ready_and_cancel()
+  File "./041", line 45, in wait_ready_and_cancel
+    self.wait_ready(drive)
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_set_speed_invalid (__main__.TestSetSpeed)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 683, in test_set_speed_invalid
+    self.wait_ready_and_cancel()
+  File "./041", line 45, in wait_ready_and_cancel
+    self.wait_ready(drive)
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_cancel_after_ready (__main__.TestSingleDrive)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 114, in test_cancel_after_ready
+    self.wait_ready_and_cancel()
+  File "./041", line 45, in wait_ready_and_cancel
+    self.wait_ready(drive)
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_complete (__main__.TestSingleDrive)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 88, in test_complete
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_large_cluster (__main__.TestSingleDrive)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 187, in test_large_cluster
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_pause (__main__.TestSingleDrive)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 142, in test_pause
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_small_buffer (__main__.TestSingleDrive)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 155, in test_small_buffer
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_small_buffer2 (__main__.TestSingleDrive)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 171, in test_small_buffer2
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_cancel_after_ready (__main__.TestSingleDriveZeroLength)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 114, in test_cancel_after_ready
+    self.wait_ready_and_cancel()
+  File "./041", line 45, in wait_ready_and_cancel
+    self.wait_ready(drive)
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_complete (__main__.TestSingleDriveZeroLength)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 88, in test_complete
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_pause (__main__.TestSingleDriveZeroLength)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 142, in test_pause
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_small_buffer (__main__.TestSingleDriveZeroLength)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 155, in test_small_buffer
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_absolute_paths_full (__main__.TestUnbackedSource)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 705, in test_absolute_paths_full
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_absolute_paths_none (__main__.TestUnbackedSource)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 723, in test_absolute_paths_none
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_absolute_paths_top (__main__.TestUnbackedSource)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 714, in test_absolute_paths_top
+    self.complete_and_wait()
+  File "./041", line 55, in complete_and_wait
+    self.wait_ready()
+  File "./041", line 40, in wait_ready
+    self.assert_qmp(event, 'data/type', 'mirror')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 232, 
in assert_qmp
+    result = self.dictpath(d, path)
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 211, 
in dictpath
+    self.fail('failed path traversal for "%s" in "%s"' % (path, str(d)))
+AssertionError: failed path traversal for "data/type" in "{u'device': 
u'drive0'}"
+
+======================================================================
+FAIL: test_ignore_write (__main__.TestWriteErrors)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 576, in test_ignore_write
+    self.assert_qmp(event, 'data/device', 'drive0')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 233, 
in assert_qmp
+    self.assertEqual(result, value, 'values not equal "%s" and "%s"' % 
(str(result), str(value)))
+AssertionError: values not equal "" and "drive0"
+
+======================================================================
+FAIL: test_report_write (__main__.TestWriteErrors)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 550, in test_report_write
+    self.assert_qmp(event, 'data/device', 'drive0')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 233, 
in assert_qmp
+    self.assertEqual(result, value, 'values not equal "%s" and "%s"' % 
(str(result), str(value)))
+AssertionError: values not equal "" and "drive0"
+
+======================================================================
+FAIL: test_stop_write (__main__.TestWriteErrors)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+  File "./041", line 596, in test_stop_write
+    self.assert_qmp(event, 'data/device', 'drive0')
+  File "/home/mreitz/projects/qemu/tests/qemu-iotests/iotests.py", line 233, 
in assert_qmp
+    self.assertEqual(result, value, 'values not equal "%s" and "%s"' % 
(str(result), str(value)))
+AssertionError: values not equal "" and "drive0"
+
 ----------------------------------------------------------------------
 Ran 35 tests
 
-OK
+FAILED (failures=25, errors=1)
067 1s ...        [23:16:21] [23:16:21] - output mismatch (see 067.out.bad)
--- 067.out     2014-06-26 23:10:00.593073348 +0200
+++ 067.out.bad 2014-06-26 23:16:21.883838039 +0200
@@ -9,7 +9,6 @@
 {"return": [{"io-status": "ok", "device": "disk", "locked": false, 
"removable": false, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "image": 
{"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 
65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": 
"qcow2", "data": {"compat": "1.1", "lazy-refcounts": false}}, "dirty-flag": 
false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", 
"iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": 
"TEST_DIR/t.qcow2", "encryption_key_missing": false}, "type": "unknown"}, 
{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, 
"tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, 
"removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", 
"locked": false, "removable": true, "tray_open": false, "type": "unknown"}]}
 {"return": {}}
 {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"DEVICE_DELETED", "data": {"path": 
"/machine/peripheral/virtio0/virtio-backend"}}
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"DEVICE_DELETED", "data": {"device": "virtio0", "path": 
"/machine/peripheral/virtio0"}}
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESET"}
 {"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, 
"removable": true, "tray_open": false, "type": "unknown"}, {"device": 
"floppy0", "locked": false, "removable": true, "tray_open": false, "type": 
"unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": 
false, "type": "unknown"}]}
@@ -28,7 +27,6 @@
 {"return": {}}
 {"return": {}}
 {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"DEVICE_DELETED", "data": {"path": 
"/machine/peripheral/virtio0/virtio-backend"}}
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"DEVICE_DELETED", "data": {"device": "virtio0", "path": 
"/machine/peripheral/virtio0"}}
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESET"}
 {"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, 
"removable": true, "tray_open": false, "type": "unknown"}, {"device": 
"floppy0", "locked": false, "removable": true, "tray_open": false, "type": 
"unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": 
false, "type": "unknown"}]}
@@ -48,7 +46,6 @@
 {"return": {}}
 {"return": {}}
 {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"DEVICE_DELETED", "data": {"path": 
"/machine/peripheral/virtio0/virtio-backend"}}
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"DEVICE_DELETED", "data": {"device": "virtio0", "path": 
"/machine/peripheral/virtio0"}}
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESET"}
 {"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, 
"removable": true, "tray_open": false, "type": "unknown"}, {"device": 
"floppy0", "locked": false, "removable": true, "tray_open": false, "type": 
"unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": 
false, "type": "unknown"}]}
@@ -68,7 +65,6 @@
 {"return": {}}
 {"return": {}}
 {"return": {}}
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"DEVICE_DELETED", "data": {"path": 
"/machine/peripheral/virtio0/virtio-backend"}}
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"DEVICE_DELETED", "data": {"device": "virtio0", "path": 
"/machine/peripheral/virtio0"}}
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESET"}
 {"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, 
"removable": true, "tray_open": false, "type": "unknown"}, {"device": 
"floppy0", "locked": false, "removable": true, "tray_open": false, "type": 
"unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": 
false, "type": "unknown"}, {"io-status": "ok", "device": "disk", "locked": 
false, "removable": true, "inserted": {"iops_rd": 0, "detect_zeroes": "off", 
"image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", 
"cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, 
"format-specific": {"type": "qcow2", "data": {"compat": "1.1", 
"lazy-refcounts": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, 
"backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": 
false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", 
"encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]}
Failures: 040 041 067
Failed 3 of 3 tests

Reply via email to