* [Qemu-devel] [PATCH for-2.12 1/4] iotests: Make BD-{remove, insert}-medium use @id
2017-11-10 22:42 [Qemu-devel] [PATCH for-2.12 0/4] blockdev: Mark BD-{remove, insert}-medium stable Max Reitz
@ 2017-11-10 22:42 ` Max Reitz
2017-11-10 22:43 ` [Qemu-devel] [PATCH for-2.12 2/4] tests/ahci: Switch tray and medium commands to @id Max Reitz
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Max Reitz @ 2017-11-10 22:42 UTC (permalink / raw)
To: qemu-block
Cc: qemu-devel, Max Reitz, Kevin Wolf, John Snow, Markus Armbruster,
Eric Blake
In some cases, these commands still use the deprecated @device
parameter. Fix that so we can later drop that parameter from their
interface.
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
tests/qemu-iotests/118 | 184 +++++++++++++++++++++++--------------------------
tests/qemu-iotests/155 | 60 ++++++++--------
2 files changed, 113 insertions(+), 131 deletions(-)
diff --git a/tests/qemu-iotests/118 b/tests/qemu-iotests/118
index 8a9e838c90..ca6965d23c 100755
--- a/tests/qemu-iotests/118
+++ b/tests/qemu-iotests/118
@@ -28,6 +28,14 @@ from iotests import qemu_img
old_img = os.path.join(iotests.test_dir, 'test0.img')
new_img = os.path.join(iotests.test_dir, 'test1.img')
+def interface_to_device_name(interface):
+ if interface == 'ide':
+ return 'ide-cd'
+ elif interface == 'floppy':
+ return 'floppy'
+ else:
+ return None
+
class ChangeBaseClass(iotests.QMPTestCase):
has_opened = False
has_closed = False
@@ -63,7 +71,7 @@ class ChangeBaseClass(iotests.QMPTestCase):
class GeneralChangeTestsBaseClass(ChangeBaseClass):
- device_name = None
+ device_name = 'qdev0'
def test_change(self):
result = self.vm.qmp('change', device='drive0', target=new_img,
@@ -79,14 +87,9 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
self.assert_qmp(result, 'return[0]/inserted/image/filename', new_img)
def test_blockdev_change_medium(self):
- if self.device_name is not None:
- result = self.vm.qmp('blockdev-change-medium',
- id=self.device_name, filename=new_img,
- format=iotests.imgfmt)
- else:
- result = self.vm.qmp('blockdev-change-medium',
- device='drive0', filename=new_img,
- format=iotests.imgfmt)
+ result = self.vm.qmp('blockdev-change-medium',
+ id=self.device_name, filename=new_img,
+ format=iotests.imgfmt)
self.assert_qmp(result, 'return', {})
@@ -99,10 +102,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
self.assert_qmp(result, 'return[0]/inserted/image/filename', new_img)
def test_eject(self):
- if self.device_name is not None:
- result = self.vm.qmp('eject', id=self.device_name, force=True)
- else:
- result = self.vm.qmp('eject', device='drive0', force=True)
+ result = self.vm.qmp('eject', id=self.device_name, force=True)
self.assert_qmp(result, 'return', {})
self.wait_for_open()
@@ -113,10 +113,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
self.assert_qmp_absent(result, 'return[0]/inserted')
def test_tray_eject_change(self):
- if self.device_name is not None:
- result = self.vm.qmp('eject', id=self.device_name, force=True)
- else:
- result = self.vm.qmp('eject', device='drive0', force=True)
+ result = self.vm.qmp('eject', id=self.device_name, force=True)
self.assert_qmp(result, 'return', {})
self.wait_for_open()
@@ -126,12 +123,8 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
self.assert_qmp(result, 'return[0]/tray_open', True)
self.assert_qmp_absent(result, 'return[0]/inserted')
- if self.device_name is not None:
- result = self.vm.qmp('blockdev-change-medium', id=self.device_name,
- filename=new_img, format=iotests.imgfmt)
- else:
- result = self.vm.qmp('blockdev-change-medium', device='drive0',
- filename=new_img, format=iotests.imgfmt)
+ result = self.vm.qmp('blockdev-change-medium', id=self.device_name,
+ filename=new_img, format=iotests.imgfmt)
self.assert_qmp(result, 'return', {})
self.wait_for_close()
@@ -142,12 +135,8 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
self.assert_qmp(result, 'return[0]/inserted/image/filename', new_img)
def test_tray_open_close(self):
- if self.device_name is not None:
- result = self.vm.qmp('blockdev-open-tray',
- id=self.device_name, force=True)
- else:
- result = self.vm.qmp('blockdev-open-tray',
- device='drive0', force=True)
+ result = self.vm.qmp('blockdev-open-tray',
+ id=self.device_name, force=True)
self.assert_qmp(result, 'return', {})
self.wait_for_open()
@@ -160,10 +149,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
else:
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
- if self.device_name is not None:
- result = self.vm.qmp('blockdev-close-tray', id=self.device_name)
- else:
- result = self.vm.qmp('blockdev-close-tray', device='drive0')
+ result = self.vm.qmp('blockdev-close-tray', id=self.device_name)
self.assert_qmp(result, 'return', {})
if self.has_real_tray or not self.was_empty:
@@ -178,7 +164,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
def test_tray_eject_close(self):
- result = self.vm.qmp('eject', device='drive0', force=True)
+ result = self.vm.qmp('eject', id=self.device_name, force=True)
self.assert_qmp(result, 'return', {})
self.wait_for_open()
@@ -188,10 +174,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
self.assert_qmp(result, 'return[0]/tray_open', True)
self.assert_qmp_absent(result, 'return[0]/inserted')
- if self.device_name is not None:
- result = self.vm.qmp('blockdev-close-tray', id=self.device_name)
- else:
- result = self.vm.qmp('blockdev-close-tray', device='drive0')
+ result = self.vm.qmp('blockdev-close-tray', id=self.device_name)
self.assert_qmp(result, 'return', {})
self.wait_for_close()
@@ -202,7 +185,8 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
self.assert_qmp_absent(result, 'return[0]/inserted')
def test_tray_open_change(self):
- result = self.vm.qmp('blockdev-open-tray', device='drive0', force=True)
+ result = self.vm.qmp('blockdev-open-tray', id=self.device_name,
+ force=True)
self.assert_qmp(result, 'return', {})
self.wait_for_open()
@@ -215,7 +199,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
else:
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
- result = self.vm.qmp('blockdev-change-medium', device='drive0',
+ result = self.vm.qmp('blockdev-change-medium', id=self.device_name,
filename=new_img,
format=iotests.imgfmt)
self.assert_qmp(result, 'return', {})
@@ -235,12 +219,8 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
'driver': 'file'})
self.assert_qmp(result, 'return', {})
- if self.device_name is not None:
- result = self.vm.qmp('blockdev-open-tray',
- id=self.device_name, force=True)
- else:
- result = self.vm.qmp('blockdev-open-tray',
- device='drive0', force=True)
+ result = self.vm.qmp('blockdev-open-tray',
+ id=self.device_name, force=True)
self.assert_qmp(result, 'return', {})
self.wait_for_open()
@@ -253,11 +233,8 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
else:
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
- if self.device_name is not None:
- result = self.vm.qmp('x-blockdev-remove-medium',
- id=self.device_name)
- else:
- result = self.vm.qmp('x-blockdev-remove-medium', device='drive0')
+ result = self.vm.qmp('x-blockdev-remove-medium',
+ id=self.device_name)
self.assert_qmp(result, 'return', {})
result = self.vm.qmp('query-block')
@@ -265,12 +242,8 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
self.assert_qmp(result, 'return[0]/tray_open', True)
self.assert_qmp_absent(result, 'return[0]/inserted')
- if self.device_name is not None:
- result = self.vm.qmp('x-blockdev-insert-medium',
- id=self.device_name, node_name='new')
- else:
- result = self.vm.qmp('x-blockdev-insert-medium',
- device='drive0', node_name='new')
+ result = self.vm.qmp('x-blockdev-insert-medium',
+ id=self.device_name, node_name='new')
self.assert_qmp(result, 'return', {})
result = self.vm.qmp('query-block')
@@ -278,10 +251,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
self.assert_qmp(result, 'return[0]/tray_open', True)
self.assert_qmp(result, 'return[0]/inserted/image/filename', new_img)
- if self.device_name is not None:
- result = self.vm.qmp('blockdev-close-tray', id=self.device_name)
- else:
- result = self.vm.qmp('blockdev-close-tray', device='drive0')
+ result = self.vm.qmp('blockdev-close-tray', id=self.device_name)
self.assert_qmp(result, 'return', {})
self.wait_for_close()
@@ -292,7 +262,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
self.assert_qmp(result, 'return[0]/inserted/image/filename', new_img)
def test_close_on_closed(self):
- result = self.vm.qmp('blockdev-close-tray', device='drive0')
+ result = self.vm.qmp('blockdev-close-tray', id=self.device_name)
# Should be a no-op
self.assert_qmp(result, 'return', {})
self.assertEquals(self.vm.get_qmp_events(wait=False), [])
@@ -301,7 +271,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
if not self.has_real_tray:
return
- result = self.vm.qmp('x-blockdev-remove-medium', device='drive0')
+ result = self.vm.qmp('x-blockdev-remove-medium', id=self.device_name)
self.assert_qmp(result, 'error/class', 'GenericError')
def test_insert_on_closed(self):
@@ -315,7 +285,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
'driver': 'file'})
self.assert_qmp(result, 'return', {})
- result = self.vm.qmp('x-blockdev-insert-medium', device='drive0',
+ result = self.vm.qmp('x-blockdev-insert-medium', id=self.device_name,
node_name='new')
self.assert_qmp(result, 'error/class', 'GenericError')
@@ -326,12 +296,10 @@ class TestInitiallyFilled(GeneralChangeTestsBaseClass):
qemu_img('create', '-f', iotests.imgfmt, old_img, '1440k')
qemu_img('create', '-f', iotests.imgfmt, new_img, '1440k')
self.vm = iotests.VM()
- if interface == 'ide':
- self.device_name = 'qdev0'
- self.vm.add_drive(old_img, 'media=%s' % media, 'none')
- self.vm.add_device('ide-cd,drive=drive0,id=%s' % self.device_name)
- else:
- self.vm.add_drive(old_img, 'media=%s' % media, interface)
+ self.vm.add_drive(old_img, 'media=%s' % media, 'none')
+ self.vm.add_device('%s,drive=drive0,id=%s' %
+ (interface_to_device_name(interface),
+ self.device_name))
self.vm.launch()
def tearDown(self):
@@ -347,12 +315,12 @@ class TestInitiallyFilled(GeneralChangeTestsBaseClass):
'driver': 'file'})
self.assert_qmp(result, 'return', {})
- result = self.vm.qmp('blockdev-open-tray', device='drive0')
+ result = self.vm.qmp('blockdev-open-tray', id=self.device_name)
self.assert_qmp(result, 'return', {})
self.wait_for_open()
- result = self.vm.qmp('x-blockdev-insert-medium', device='drive0',
+ result = self.vm.qmp('x-blockdev-insert-medium', id=self.device_name,
node_name='new')
self.assert_qmp(result, 'error/class', 'GenericError')
@@ -361,7 +329,10 @@ class TestInitiallyEmpty(GeneralChangeTestsBaseClass):
def setUp(self, media, interface):
qemu_img('create', '-f', iotests.imgfmt, new_img, '1440k')
- self.vm = iotests.VM().add_drive(None, 'media=%s' % media, interface)
+ self.vm = iotests.VM().add_drive(None, 'media=%s' % media, 'none')
+ self.vm.add_device('%s,drive=drive0,id=%s' %
+ (interface_to_device_name(interface),
+ self.device_name))
self.vm.launch()
def tearDown(self):
@@ -369,12 +340,12 @@ class TestInitiallyEmpty(GeneralChangeTestsBaseClass):
os.remove(new_img)
def test_remove_on_empty(self):
- result = self.vm.qmp('blockdev-open-tray', device='drive0')
+ result = self.vm.qmp('blockdev-open-tray', id=self.device_name)
self.assert_qmp(result, 'return', {})
self.wait_for_open()
- result = self.vm.qmp('x-blockdev-remove-medium', device='drive0')
+ result = self.vm.qmp('x-blockdev-remove-medium', id=self.device_name)
# Should be a no-op
self.assert_qmp(result, 'return', {})
@@ -410,6 +381,8 @@ class TestFloppyInitiallyEmpty(TestInitiallyEmpty):
self.has_opened = True
class TestChangeReadOnly(ChangeBaseClass):
+ device_name = 'qdev0'
+
def setUp(self):
qemu_img('create', '-f', iotests.imgfmt, old_img, '1440k')
qemu_img('create', '-f', iotests.imgfmt, new_img, '1440k')
@@ -425,14 +398,15 @@ class TestChangeReadOnly(ChangeBaseClass):
def test_ro_ro_retain(self):
os.chmod(old_img, 0444)
os.chmod(new_img, 0444)
- self.vm.add_drive(old_img, 'media=disk,read-only=on', 'floppy')
+ self.vm.add_drive(old_img, 'media=disk,read-only=on', 'none')
+ self.vm.add_device('floppy,drive=drive0,id=%s' % self.device_name)
self.vm.launch()
result = self.vm.qmp('query-block')
self.assert_qmp(result, 'return[0]/inserted/ro', True)
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
- result = self.vm.qmp('blockdev-change-medium', device='drive0',
+ result = self.vm.qmp('blockdev-change-medium', id=self.device_name,
filename=new_img,
format=iotests.imgfmt,
read_only_mode='retain')
@@ -444,14 +418,15 @@ class TestChangeReadOnly(ChangeBaseClass):
def test_ro_rw_retain(self):
os.chmod(old_img, 0444)
- self.vm.add_drive(old_img, 'media=disk,read-only=on', 'floppy')
+ self.vm.add_drive(old_img, 'media=disk,read-only=on', 'none')
+ self.vm.add_device('floppy,drive=drive0,id=%s' % self.device_name)
self.vm.launch()
result = self.vm.qmp('query-block')
self.assert_qmp(result, 'return[0]/inserted/ro', True)
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
- result = self.vm.qmp('blockdev-change-medium', device='drive0',
+ result = self.vm.qmp('blockdev-change-medium', id=self.device_name,
filename=new_img,
format=iotests.imgfmt,
read_only_mode='retain')
@@ -463,14 +438,15 @@ class TestChangeReadOnly(ChangeBaseClass):
def test_rw_ro_retain(self):
os.chmod(new_img, 0444)
- self.vm.add_drive(old_img, 'media=disk', 'floppy')
+ self.vm.add_drive(old_img, 'media=disk', 'none')
+ self.vm.add_device('floppy,drive=drive0,id=%s' % self.device_name)
self.vm.launch()
result = self.vm.qmp('query-block')
self.assert_qmp(result, 'return[0]/inserted/ro', False)
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
- result = self.vm.qmp('blockdev-change-medium', device='drive0',
+ result = self.vm.qmp('blockdev-change-medium', id=self.device_name,
filename=new_img,
format=iotests.imgfmt,
read_only_mode='retain')
@@ -484,7 +460,8 @@ class TestChangeReadOnly(ChangeBaseClass):
def test_ro_rw(self):
os.chmod(old_img, 0444)
- self.vm.add_drive(old_img, 'media=disk,read-only=on', 'floppy')
+ self.vm.add_drive(old_img, 'media=disk,read-only=on', 'none')
+ self.vm.add_device('floppy,drive=drive0,id=%s' % self.device_name)
self.vm.launch()
result = self.vm.qmp('query-block')
@@ -492,7 +469,7 @@ class TestChangeReadOnly(ChangeBaseClass):
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
result = self.vm.qmp('blockdev-change-medium',
- device='drive0',
+ id=self.device_name,
filename=new_img,
format=iotests.imgfmt,
read_only_mode='read-write')
@@ -504,7 +481,8 @@ class TestChangeReadOnly(ChangeBaseClass):
def test_rw_ro(self):
os.chmod(new_img, 0444)
- self.vm.add_drive(old_img, 'media=disk', 'floppy')
+ self.vm.add_drive(old_img, 'media=disk', 'none')
+ self.vm.add_device('floppy,drive=drive0,id=%s' % self.device_name)
self.vm.launch()
result = self.vm.qmp('query-block')
@@ -512,7 +490,7 @@ class TestChangeReadOnly(ChangeBaseClass):
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
result = self.vm.qmp('blockdev-change-medium',
- device='drive0',
+ id=self.device_name,
filename=new_img,
format=iotests.imgfmt,
read_only_mode='read-only')
@@ -523,7 +501,8 @@ class TestChangeReadOnly(ChangeBaseClass):
self.assert_qmp(result, 'return[0]/inserted/image/filename', new_img)
def test_make_rw_ro(self):
- self.vm.add_drive(old_img, 'media=disk', 'floppy')
+ self.vm.add_drive(old_img, 'media=disk', 'none')
+ self.vm.add_device('floppy,drive=drive0,id=%s' % self.device_name)
self.vm.launch()
result = self.vm.qmp('query-block')
@@ -531,7 +510,7 @@ class TestChangeReadOnly(ChangeBaseClass):
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
result = self.vm.qmp('blockdev-change-medium',
- device='drive0',
+ id=self.device_name,
filename=new_img,
format=iotests.imgfmt,
read_only_mode='read-only')
@@ -543,7 +522,8 @@ class TestChangeReadOnly(ChangeBaseClass):
def test_make_ro_rw(self):
os.chmod(new_img, 0444)
- self.vm.add_drive(old_img, 'media=disk', 'floppy')
+ self.vm.add_drive(old_img, 'media=disk', 'none')
+ self.vm.add_device('floppy,drive=drive0,id=%s' % self.device_name)
self.vm.launch()
result = self.vm.qmp('query-block')
@@ -551,7 +531,7 @@ class TestChangeReadOnly(ChangeBaseClass):
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
result = self.vm.qmp('blockdev-change-medium',
- device='drive0',
+ id=self.device_name,
filename=new_img,
format=iotests.imgfmt,
read_only_mode='read-write')
@@ -563,14 +543,15 @@ class TestChangeReadOnly(ChangeBaseClass):
def test_make_rw_ro_by_retain(self):
os.chmod(old_img, 0444)
- self.vm.add_drive(old_img, 'media=disk,read-only=on', 'floppy')
+ self.vm.add_drive(old_img, 'media=disk,read-only=on', 'none')
+ self.vm.add_device('floppy,drive=drive0,id=%s' % self.device_name)
self.vm.launch()
result = self.vm.qmp('query-block')
self.assert_qmp(result, 'return[0]/inserted/ro', True)
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
- result = self.vm.qmp('blockdev-change-medium', device='drive0',
+ result = self.vm.qmp('blockdev-change-medium', id=self.device_name,
filename=new_img,
format=iotests.imgfmt,
read_only_mode='retain')
@@ -582,14 +563,15 @@ class TestChangeReadOnly(ChangeBaseClass):
def test_make_ro_rw_by_retain(self):
os.chmod(new_img, 0444)
- self.vm.add_drive(old_img, 'media=disk', 'floppy')
+ self.vm.add_drive(old_img, 'media=disk', 'none')
+ self.vm.add_device('floppy,drive=drive0,id=%s' % self.device_name)
self.vm.launch()
result = self.vm.qmp('query-block')
self.assert_qmp(result, 'return[0]/inserted/ro', False)
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
- result = self.vm.qmp('blockdev-change-medium', device='drive0',
+ result = self.vm.qmp('blockdev-change-medium', id=self.device_name,
filename=new_img,
format=iotests.imgfmt,
read_only_mode='retain')
@@ -601,7 +583,8 @@ class TestChangeReadOnly(ChangeBaseClass):
def test_rw_ro_cycle(self):
os.chmod(new_img, 0444)
- self.vm.add_drive(old_img, 'media=disk', 'floppy')
+ self.vm.add_drive(old_img, 'media=disk', 'none')
+ self.vm.add_device('floppy,drive=drive0,id=%s' % self.device_name)
self.vm.launch()
result = self.vm.qmp('query-block')
@@ -620,13 +603,13 @@ class TestChangeReadOnly(ChangeBaseClass):
self.assert_qmp(result, 'return[0]/inserted/ro', False)
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
- result = self.vm.qmp('x-blockdev-remove-medium', device='drive0')
+ result = self.vm.qmp('x-blockdev-remove-medium', id=self.device_name)
self.assert_qmp(result, 'return', {})
result = self.vm.qmp('query-block')
self.assert_qmp_absent(result, 'return[0]/inserted')
- result = self.vm.qmp('x-blockdev-insert-medium', device='drive0',
+ result = self.vm.qmp('x-blockdev-insert-medium', id=self.device_name,
node_name='new')
self.assert_qmp(result, 'return', {})
@@ -644,11 +627,14 @@ TestInitiallyEmpty = None
class TestBlockJobsAfterCycle(ChangeBaseClass):
+ device_name = 'qdev0'
+
def setUp(self):
- qemu_img('create', '-f', iotests.imgfmt, old_img, '1M')
+ qemu_img('create', '-f', iotests.imgfmt, old_img, '1440K')
self.vm = iotests.VM()
self.vm.add_drive_raw("id=drive0,driver=null-co,if=none")
+ self.vm.add_device('floppy,drive=drive0,id=%s' % self.device_name)
self.vm.launch()
result = self.vm.qmp('query-block')
@@ -656,7 +642,7 @@ class TestBlockJobsAfterCycle(ChangeBaseClass):
# For device-less BBs, calling blockdev-open-tray or blockdev-close-tray
# is not necessary
- result = self.vm.qmp('x-blockdev-remove-medium', device='drive0')
+ result = self.vm.qmp('x-blockdev-remove-medium', id=self.device_name)
self.assert_qmp(result, 'return', {})
result = self.vm.qmp('query-block')
@@ -669,7 +655,7 @@ class TestBlockJobsAfterCycle(ChangeBaseClass):
'driver': 'file'})
self.assert_qmp(result, 'return', {})
- result = self.vm.qmp('x-blockdev-insert-medium', device='drive0',
+ result = self.vm.qmp('x-blockdev-insert-medium', id=self.device_name,
node_name='node0')
self.assert_qmp(result, 'return', {})
diff --git a/tests/qemu-iotests/155 b/tests/qemu-iotests/155
index 0b86ea4e5c..fc9fa975be 100755
--- a/tests/qemu-iotests/155
+++ b/tests/qemu-iotests/155
@@ -51,36 +51,30 @@ class BaseClass(iotests.QMPTestCase):
target_real_backing = None
def setUp(self):
- qemu_img('create', '-f', iotests.imgfmt, back0_img, '1M')
+ qemu_img('create', '-f', iotests.imgfmt, back0_img, '1440K')
qemu_img('create', '-f', iotests.imgfmt, '-b', back0_img, back1_img)
qemu_img('create', '-f', iotests.imgfmt, '-b', back1_img, back2_img)
qemu_img('create', '-f', iotests.imgfmt, '-b', back2_img, source_img)
self.vm = iotests.VM()
- self.vm.add_drive(None, '', 'none')
- self.vm.launch()
-
# Add the BDS via blockdev-add so it stays around after the mirror block
# job has been completed
- result = self.vm.qmp('blockdev-add',
- node_name='source',
- driver=iotests.imgfmt,
- file={'driver': 'file',
- 'filename': source_img})
- self.assert_qmp(result, 'return', {})
-
- result = self.vm.qmp('x-blockdev-insert-medium',
- device='drive0', node_name='source')
- self.assert_qmp(result, 'return', {})
+ blockdev = {'node-name': 'source',
+ 'driver': iotests.imgfmt,
+ 'file': {'driver': 'file',
+ 'filename': source_img}}
+ self.vm.add_blockdev(self.qmp_to_opts(blockdev))
+ self.vm.add_device('floppy,id=qdev0,drive=source')
+ self.vm.launch()
self.assertIntactSourceBackingChain()
if self.existing:
if self.target_backing:
qemu_img('create', '-f', iotests.imgfmt,
- '-b', self.target_backing, target_img, '1M')
+ '-b', self.target_backing, target_img, '1440K')
else:
- qemu_img('create', '-f', iotests.imgfmt, target_img, '1M')
+ qemu_img('create', '-f', iotests.imgfmt, target_img, '1440K')
if self.cmd == 'blockdev-mirror':
options = { 'node-name': 'target',
@@ -104,11 +98,11 @@ class BaseClass(iotests.QMPTestCase):
except OSError:
pass
- def findBlockNode(self, node_name, id=None):
- if id:
+ def findBlockNode(self, node_name, qdev=None):
+ if qdev:
result = self.vm.qmp('query-block')
for device in result['return']:
- if device['device'] == id:
+ if device['qdev'] == qdev:
if node_name:
self.assert_qmp(device, 'inserted/node-name', node_name)
return device['inserted']
@@ -118,7 +112,7 @@ class BaseClass(iotests.QMPTestCase):
if node['node-name'] == node_name:
return node
- self.fail('Cannot find node %s/%s' % (id, node_name))
+ self.fail('Cannot find node %s/%s' % (qdev, node_name))
def assertIntactSourceBackingChain(self):
node = self.findBlockNode('source')
@@ -155,22 +149,23 @@ class BaseClass(iotests.QMPTestCase):
class MirrorBaseClass(BaseClass):
def runMirror(self, sync):
if self.cmd == 'blockdev-mirror':
- result = self.vm.qmp(self.cmd, device='drive0', sync=sync,
- target='target')
+ result = self.vm.qmp(self.cmd, job_id='mirror-job', device='source',
+ sync=sync, target='target')
else:
if self.existing:
mode = 'existing'
else:
mode = 'absolute-paths'
- result = self.vm.qmp(self.cmd, device='drive0', sync=sync,
- target=target_img, format=iotests.imgfmt,
- mode=mode, node_name='target')
+ result = self.vm.qmp(self.cmd, job_id='mirror-job', device='source',
+ sync=sync, target=target_img,
+ format=iotests.imgfmt, mode=mode,
+ node_name='target')
self.assert_qmp(result, 'return', {})
self.vm.event_wait('BLOCK_JOB_READY')
- result = self.vm.qmp('block-job-complete', device='drive0')
+ result = self.vm.qmp('block-job-complete', device='mirror-job')
self.assert_qmp(result, 'return', {})
self.vm.event_wait('BLOCK_JOB_COMPLETED')
@@ -178,21 +173,21 @@ class MirrorBaseClass(BaseClass):
def testFull(self):
self.runMirror('full')
- node = self.findBlockNode('target', 'drive0')
+ node = self.findBlockNode('target', 'qdev0')
self.assertCorrectBackingImage(node, None)
self.assertIntactSourceBackingChain()
def testTop(self):
self.runMirror('top')
- node = self.findBlockNode('target', 'drive0')
+ node = self.findBlockNode('target', 'qdev0')
self.assertCorrectBackingImage(node, back2_img)
self.assertIntactSourceBackingChain()
def testNone(self):
self.runMirror('none')
- node = self.findBlockNode('target', 'drive0')
+ node = self.findBlockNode('target', 'qdev0')
self.assertCorrectBackingImage(node, source_img)
self.assertIntactSourceBackingChain()
@@ -233,17 +228,18 @@ class TestCommit(BaseClass):
existing = False
def testCommit(self):
- result = self.vm.qmp('block-commit', device='drive0', base=back1_img)
+ result = self.vm.qmp('block-commit', job_id='commit-job',
+ device='source', base=back1_img)
self.assert_qmp(result, 'return', {})
self.vm.event_wait('BLOCK_JOB_READY')
- result = self.vm.qmp('block-job-complete', device='drive0')
+ result = self.vm.qmp('block-job-complete', device='commit-job')
self.assert_qmp(result, 'return', {})
self.vm.event_wait('BLOCK_JOB_COMPLETED')
- node = self.findBlockNode(None, 'drive0')
+ node = self.findBlockNode(None, 'qdev0')
self.assert_qmp(node, 'image' + '/backing-image' * 0 + '/filename',
back1_img)
self.assert_qmp(node, 'image' + '/backing-image' * 1 + '/filename',
--
2.13.6
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH for-2.12 4/4] blockdev: Mark BD-{remove, insert}-medium stable
2017-11-10 22:42 [Qemu-devel] [PATCH for-2.12 0/4] blockdev: Mark BD-{remove, insert}-medium stable Max Reitz
` (2 preceding siblings ...)
2017-11-10 22:43 ` [Qemu-devel] [PATCH for-2.12 3/4] blockdev: Drop BD-{remove, insert}-medium's @device Max Reitz
@ 2017-11-10 22:43 ` Max Reitz
2017-11-14 15:18 ` [Qemu-devel] [Qemu-block] [PATCH for-2.12 0/4] " Alberto Garcia
2018-01-17 13:28 ` [Qemu-devel] " Max Reitz
5 siblings, 0 replies; 7+ messages in thread
From: Max Reitz @ 2017-11-10 22:43 UTC (permalink / raw)
To: qemu-block
Cc: qemu-devel, Max Reitz, Kevin Wolf, John Snow, Markus Armbruster,
Eric Blake
Now that iotest 093 test proves that the throttling configuration
survives a blockdev-remove-medium/blockdev-insert-medium pair, the
original reason for declaring these commands experimental is gone
(see commit 6e0abc251dd4f8eba1f53656dfede12e5840e83b).
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
qapi/block-core.json | 32 +++++++++++++-------------------
blockdev.c | 6 +++---
tests/ahci-test.c | 4 ++--
tests/qemu-iotests/093 | 6 +++---
tests/qemu-iotests/118 | 20 ++++++++++----------
tests/qemu-iotests/139 | 2 +-
6 files changed, 32 insertions(+), 38 deletions(-)
diff --git a/qapi/block-core.json b/qapi/block-core.json
index cf3f941999..8e6842e23e 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -3397,7 +3397,7 @@
'*id': 'str' } }
##
-# @x-blockdev-remove-medium:
+# @blockdev-remove-medium:
#
# Removes a medium (a block driver state tree) from a block device. That block
# device's tray must currently be open (unless there is no attached guest
@@ -3405,16 +3405,13 @@
#
# If the tray is open and there is no medium inserted, this will be a no-op.
#
-# @id: The name or QOM path of the guest device (since: 2.8)
-#
-# Note: This command is still a work in progress and is considered experimental.
-# Stay away from it unless you want to help with its development.
+# @id: The name or QOM path of the guest device
#
-# Since: 2.5
+# Since: 2.12
#
# Example:
#
-# -> { "execute": "x-blockdev-remove-medium",
+# -> { "execute": "blockdev-remove-medium",
# "arguments": { "id": "ide0-1-0" } }
#
# <- { "error": { "class": "GenericError",
@@ -3432,30 +3429,27 @@
#
# <- { "return": {} }
#
-# -> { "execute": "x-blockdev-remove-medium",
+# -> { "execute": "blockdev-remove-medium",
# "arguments": { "id": "ide0-1-0" } }
#
# <- { "return": {} }
#
##
-{ 'command': 'x-blockdev-remove-medium',
+{ 'command': 'blockdev-remove-medium',
'data': { 'id': 'str' } }
##
-# @x-blockdev-insert-medium:
+# @blockdev-insert-medium:
#
# Inserts a medium (a block driver state tree) into a block device. That block
# device's tray must currently be open (unless there is no attached guest
# device) and there must be no medium inserted already.
#
-# @id: The name or QOM path of the guest device (since: 2.8)
+# @id: The name or QOM path of the guest device
#
# @node-name: name of a node in the block driver state graph
#
-# Note: This command is still a work in progress and is considered experimental.
-# Stay away from it unless you want to help with its development.
-#
-# Since: 2.5
+# Since: 2.12
#
# Example:
#
@@ -3467,14 +3461,14 @@
# "filename": "fedora.iso" } } }
# <- { "return": {} }
#
-# -> { "execute": "x-blockdev-insert-medium",
+# -> { "execute": "blockdev-insert-medium",
# "arguments": { "id": "ide0-1-0",
# "node-name": "node0" } }
#
# <- { "return": {} }
#
##
-{ 'command': 'x-blockdev-insert-medium',
+{ 'command': 'blockdev-insert-medium',
'data': { 'id': 'str',
'node-name': 'str'} }
@@ -3503,8 +3497,8 @@
#
# Changes the medium inserted into a block device by ejecting the current medium
# and loading a new image file which is inserted as the new medium (this command
-# combines blockdev-open-tray, x-blockdev-remove-medium,
-# x-blockdev-insert-medium and blockdev-close-tray).
+# combines blockdev-open-tray, blockdev-remove-medium, blockdev-insert-medium
+# and blockdev-close-tray).
#
# @device: Block device name (deprecated, use @id instead)
#
diff --git a/blockdev.c b/blockdev.c
index a74224e8f8..fb93283334 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -2441,7 +2441,7 @@ out:
aio_context_release(aio_context);
}
-void qmp_x_blockdev_remove_medium(const char *id, Error **errp)
+void qmp_blockdev_remove_medium(const char *id, Error **errp)
{
blockdev_remove_medium(false, NULL, true, id, errp);
}
@@ -2519,8 +2519,8 @@ static void blockdev_insert_medium(bool has_device, const char *device,
qmp_blockdev_insert_anon_medium(blk, bs, errp);
}
-void qmp_x_blockdev_insert_medium(const char *id, const char *node_name,
- Error **errp)
+void qmp_blockdev_insert_medium(const char *id, const char *node_name,
+ Error **errp)
{
blockdev_insert_medium(false, NULL, true, id, node_name, errp);
}
diff --git a/tests/ahci-test.c b/tests/ahci-test.c
index 3635ea6d41..3934e62ef7 100644
--- a/tests/ahci-test.c
+++ b/tests/ahci-test.c
@@ -1596,7 +1596,7 @@ static void test_atapi_tray(void)
rsp = qmp_receive();
QDECREF(rsp);
- qmp_discard_response("{'execute': 'x-blockdev-remove-medium', "
+ qmp_discard_response("{'execute': 'blockdev-remove-medium', "
"'arguments': {'id': 'cd0'}}");
/* Test the tray without a medium */
@@ -1612,7 +1612,7 @@ static void test_atapi_tray(void)
"'driver': 'raw', "
"'file': { 'driver': 'file', "
"'filename': %s }}}", iso);
- qmp_discard_response("{'execute': 'x-blockdev-insert-medium',"
+ qmp_discard_response("{'execute': 'blockdev-insert-medium',"
"'arguments': { 'id': 'cd0', "
"'node-name': 'node0' }}");
diff --git a/tests/qemu-iotests/093 b/tests/qemu-iotests/093
index 7862f2ba94..a354c79bff 100755
--- a/tests/qemu-iotests/093
+++ b/tests/qemu-iotests/093
@@ -348,9 +348,9 @@ class ThrottleTestRemovableMedia(iotests.QMPTestCase):
# Now eject cd0 and insert cd1
result = self.vm.qmp("blockdev-open-tray", id = 'dev0')
self.assert_qmp(result, 'return', {})
- result = self.vm.qmp("x-blockdev-remove-medium", id = 'dev0')
+ result = self.vm.qmp("blockdev-remove-medium", id = 'dev0')
self.assert_qmp(result, 'return', {})
- result = self.vm.qmp("x-blockdev-insert-medium", id = 'dev0', node_name = 'cd1')
+ result = self.vm.qmp("blockdev-insert-medium", id = 'dev0', node_name = 'cd1')
self.assert_qmp(result, 'return', {})
# Check that the I/O limits are still the same
@@ -359,7 +359,7 @@ class ThrottleTestRemovableMedia(iotests.QMPTestCase):
self.assert_qmp(result, 'return[0]/inserted/bps', 50)
# Eject cd1
- result = self.vm.qmp("x-blockdev-remove-medium", id = 'dev0')
+ result = self.vm.qmp("blockdev-remove-medium", id = 'dev0')
self.assert_qmp(result, 'return', {})
# Check that we can't set limits if the device has no medium
diff --git a/tests/qemu-iotests/118 b/tests/qemu-iotests/118
index ca6965d23c..a0469b570e 100755
--- a/tests/qemu-iotests/118
+++ b/tests/qemu-iotests/118
@@ -233,7 +233,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
else:
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
- result = self.vm.qmp('x-blockdev-remove-medium',
+ result = self.vm.qmp('blockdev-remove-medium',
id=self.device_name)
self.assert_qmp(result, 'return', {})
@@ -242,7 +242,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
self.assert_qmp(result, 'return[0]/tray_open', True)
self.assert_qmp_absent(result, 'return[0]/inserted')
- result = self.vm.qmp('x-blockdev-insert-medium',
+ result = self.vm.qmp('blockdev-insert-medium',
id=self.device_name, node_name='new')
self.assert_qmp(result, 'return', {})
@@ -271,7 +271,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
if not self.has_real_tray:
return
- result = self.vm.qmp('x-blockdev-remove-medium', id=self.device_name)
+ result = self.vm.qmp('blockdev-remove-medium', id=self.device_name)
self.assert_qmp(result, 'error/class', 'GenericError')
def test_insert_on_closed(self):
@@ -285,7 +285,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
'driver': 'file'})
self.assert_qmp(result, 'return', {})
- result = self.vm.qmp('x-blockdev-insert-medium', id=self.device_name,
+ result = self.vm.qmp('blockdev-insert-medium', id=self.device_name,
node_name='new')
self.assert_qmp(result, 'error/class', 'GenericError')
@@ -320,7 +320,7 @@ class TestInitiallyFilled(GeneralChangeTestsBaseClass):
self.wait_for_open()
- result = self.vm.qmp('x-blockdev-insert-medium', id=self.device_name,
+ result = self.vm.qmp('blockdev-insert-medium', id=self.device_name,
node_name='new')
self.assert_qmp(result, 'error/class', 'GenericError')
@@ -345,7 +345,7 @@ class TestInitiallyEmpty(GeneralChangeTestsBaseClass):
self.wait_for_open()
- result = self.vm.qmp('x-blockdev-remove-medium', id=self.device_name)
+ result = self.vm.qmp('blockdev-remove-medium', id=self.device_name)
# Should be a no-op
self.assert_qmp(result, 'return', {})
@@ -603,13 +603,13 @@ class TestChangeReadOnly(ChangeBaseClass):
self.assert_qmp(result, 'return[0]/inserted/ro', False)
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
- result = self.vm.qmp('x-blockdev-remove-medium', id=self.device_name)
+ result = self.vm.qmp('blockdev-remove-medium', id=self.device_name)
self.assert_qmp(result, 'return', {})
result = self.vm.qmp('query-block')
self.assert_qmp_absent(result, 'return[0]/inserted')
- result = self.vm.qmp('x-blockdev-insert-medium', id=self.device_name,
+ result = self.vm.qmp('blockdev-insert-medium', id=self.device_name,
node_name='new')
self.assert_qmp(result, 'return', {})
@@ -642,7 +642,7 @@ class TestBlockJobsAfterCycle(ChangeBaseClass):
# For device-less BBs, calling blockdev-open-tray or blockdev-close-tray
# is not necessary
- result = self.vm.qmp('x-blockdev-remove-medium', id=self.device_name)
+ result = self.vm.qmp('blockdev-remove-medium', id=self.device_name)
self.assert_qmp(result, 'return', {})
result = self.vm.qmp('query-block')
@@ -655,7 +655,7 @@ class TestBlockJobsAfterCycle(ChangeBaseClass):
'driver': 'file'})
self.assert_qmp(result, 'return', {})
- result = self.vm.qmp('x-blockdev-insert-medium', id=self.device_name,
+ result = self.vm.qmp('blockdev-insert-medium', id=self.device_name,
node_name='node0')
self.assert_qmp(result, 'return', {})
diff --git a/tests/qemu-iotests/139 b/tests/qemu-iotests/139
index f8f02808a9..cc7fe337f3 100644
--- a/tests/qemu-iotests/139
+++ b/tests/qemu-iotests/139
@@ -133,7 +133,7 @@ class TestBlockdevDel(iotests.QMPTestCase):
# Insert a BlockDriverState
def insertDrive(self, device, node):
self.checkBlockDriverState(node)
- result = self.vm.qmp('x-blockdev-insert-medium',
+ result = self.vm.qmp('blockdev-insert-medium',
id = device, node_name = node)
self.assert_qmp(result, 'return', {})
self.checkBlockDriverState(node)
--
2.13.6
^ permalink raw reply related [flat|nested] 7+ messages in thread