@@ -330,21 +330,32 @@ class TestBlockdevDel(iotests.QMPTestCase):
self.delDeviceModel('device0')
self.delBlockBackend('drive0', 'node0')
- def testAttachMedia(self):
+ def testAttachMedia1(self):
# This creates a BlockBackend and removes its media
self.addBlockBackend('drive0', 'node0')
self.ejectDrive('drive0', 'node0')
# This creates a new BlockDriverState and inserts it into the backend
self.addBlockDriverState('node1')
self.insertDrive('drive0', 'node1')
- # The backend can't be removed: the new BDS has an extra reference
- self.delBlockBackend('drive0', 'node1', expect_error = True)
+ # The BDS can't be removed because it's attached to a backend
self.delBlockDriverState('node1', expect_error = True)
# The BDS still exists after being ejected, but now it can be removed
self.ejectDrive('drive0', 'node1', destroys_media = False)
self.delBlockDriverState('node1')
self.delBlockBackend('drive0', None)
+ def testAttachMedia2(self):
+ # This creates a BlockBackend and removes its media
+ self.addBlockBackend('drive0', 'node0')
+ self.ejectDrive('drive0', 'node0')
+ # This creates a new BlockDriverState and inserts it into the backend
+ self.addBlockDriverState('node1')
+ self.insertDrive('drive0', 'node1')
+ # The BlockDriverState has a monitor reference so we can destroy the backend
+ self.delBlockBackend('drive0', 'node1', destroys_media = False)
+ # The backend has been destroyed, now we can proceed with the BDS
+ self.delBlockDriverState('node1')
+
def testSnapshotSync(self):
self.addBlockBackend('drive0', 'node0')
self.createSnapshotSync('node0', 'overlay0')
@@ -354,11 +365,10 @@ class TestBlockdevDel(iotests.QMPTestCase):
self.delBlockBackend('drive0', 'overlay0')
self.checkBlockDriverState('node0', False)
- def testSnapshot(self):
+ def testSnapshot1(self):
self.addBlockBackend('drive0', 'node0')
self.addBlockDriverStateOverlay('overlay0')
self.createSnapshot('node0', 'overlay0')
- self.delBlockBackend('drive0', 'overlay0', expect_error = True)
self.delBlockDriverState('node0', expect_error = True)
self.delBlockDriverState('overlay0', expect_error = True)
self.ejectDrive('drive0', 'overlay0', destroys_media = False)
@@ -367,6 +377,16 @@ class TestBlockdevDel(iotests.QMPTestCase):
self.delBlockDriverState('overlay0')
self.checkBlockDriverState('node0', False)
+ def testSnapshot2(self):
+ self.addBlockBackend('drive0', 'node0')
+ self.addBlockDriverStateOverlay('overlay0')
+ self.createSnapshot('node0', 'overlay0')
+ # The BlockDriverState has a monitor reference so we can destroy the backend
+ self.delBlockBackend('drive0', 'overlay0', destroys_media = False)
+ self.delBlockDriverState('node0', expect_error = True)
+ self.delBlockDriverState('overlay0')
+ self.checkBlockDriverState('node0', False)
+
def testMirror(self):
self.addBlockBackend('drive0', 'node0')
self.createMirror('drive0', 'node0', 'mirror0')
@@ -1,5 +1,5 @@
-............
+..............
----------------------------------------------------------------------
-Ran 12 tests
+Ran 14 tests
OK
Now that we allow x-blockdev-del to work in a new scenario that previously forbidden we must update the iotests in order to reflect this change. Both testAttachMedia() and testSnapshot() are splitted in two: one version keeps the previous behavior, and a second version checks that the new functionality works as expected. Signed-off-by: Alberto Garcia <berto@igalia.com> --- tests/qemu-iotests/139 | 30 +++++++++++++++++++++++++----- tests/qemu-iotests/139.out | 4 ++-- 2 files changed, 27 insertions(+), 7 deletions(-)