Message ID | 20180420181951.7252-14-ehabkost@redhat.com |
---|---|
State | New |
Headers | show |
Series | Avocado-based functional tests | expand |
On Fri, Apr 20, 2018 at 03:19:40PM -0300, Eduardo Habkost wrote: > + def test_hotplug_memory_default_policy(self): > + """ > + According to the RHBZ1431939, the issue is 'host nodes' > + returning '128'. It should return empty value when memory > + hotplug default policy is used. > + > + Fixed in commit d81d857f4421d205395d55200425daa6591c28a5. > + :avocado: tags=RHBZ1431939 > + """ > + > + cmd = 'object_add memory-backend-ram,id=mem1,size=1G' > + res = self.vm.qmp('human-monitor-command', command_line=cmd) > + self.assertEqual('', res['return']) General question about QMP test coding style: What happens if res['return'] does not exist because the QMP command failed? I tend to use dict.get() to prevent KeyError. That way the assertEqual() will fail instead of an unhandled KeyError in the test code. Stefan
On Mon, Apr 30, 2018 at 02:02:46PM +0100, Stefan Hajnoczi wrote: > On Fri, Apr 20, 2018 at 03:19:40PM -0300, Eduardo Habkost wrote: > > + def test_hotplug_memory_default_policy(self): > > + """ > > + According to the RHBZ1431939, the issue is 'host nodes' > > + returning '128'. It should return empty value when memory > > + hotplug default policy is used. > > + > > + Fixed in commit d81d857f4421d205395d55200425daa6591c28a5. > > + :avocado: tags=RHBZ1431939 > > + """ > > + > > + cmd = 'object_add memory-backend-ram,id=mem1,size=1G' > > + res = self.vm.qmp('human-monitor-command', command_line=cmd) > > + self.assertEqual('', res['return']) > > General question about QMP test coding style: > > What happens if res['return'] does not exist because the QMP command > failed? > > I tend to use dict.get() to prevent KeyError. That way the > assertEqual() will fail instead of an unhandled KeyError in the test > code. It looks like vm.command() would be appropriate on most cases, as it will check for errors and return res['result'] automatically. vm.qmp() seems to be useful only if you really don't want an exception to be raised in case of QMP errors. Maybe we should rename .qmp() to .raw_qmp() to discourage people from using it.
On Mon, May 07, 2018 at 11:03:29AM -0300, Eduardo Habkost wrote: > On Mon, Apr 30, 2018 at 02:02:46PM +0100, Stefan Hajnoczi wrote: > > On Fri, Apr 20, 2018 at 03:19:40PM -0300, Eduardo Habkost wrote: > > > + def test_hotplug_memory_default_policy(self): > > > + """ > > > + According to the RHBZ1431939, the issue is 'host nodes' > > > + returning '128'. It should return empty value when memory > > > + hotplug default policy is used. > > > + > > > + Fixed in commit d81d857f4421d205395d55200425daa6591c28a5. > > > + :avocado: tags=RHBZ1431939 > > > + """ > > > + > > > + cmd = 'object_add memory-backend-ram,id=mem1,size=1G' > > > + res = self.vm.qmp('human-monitor-command', command_line=cmd) > > > + self.assertEqual('', res['return']) > > > > General question about QMP test coding style: > > > > What happens if res['return'] does not exist because the QMP command > > failed? > > > > I tend to use dict.get() to prevent KeyError. That way the > > assertEqual() will fail instead of an unhandled KeyError in the test > > code. > > It looks like vm.command() would be appropriate on most cases, as > it will check for errors and return res['result'] automatically. > > vm.qmp() seems to be useful only if you really don't want an > exception to be raised in case of QMP errors. > > Maybe we should rename .qmp() to .raw_qmp() to discourage people > from using it. Sounds good. Stefan
diff --git a/tests/avocado/test_info_memdev_host_nodes.py b/tests/avocado/test_info_memdev_host_nodes.py new file mode 100644 index 0000000000..69891b723d --- /dev/null +++ b/tests/avocado/test_info_memdev_host_nodes.py @@ -0,0 +1,66 @@ +from avocado import main +from avocado_qemu import test + + +class TestInfoMemdev(test.QemuTest): + """ + + :avocado: enable + :avocado: tags=qmp,object_add,device_add,memdev + """ + + def setUp(self): + self.vm.args.extend(['-m', '4G,slots=32,maxmem=40G']) + self.vm.launch() + + def test_hotplug_memory_default_policy(self): + """ + According to the RHBZ1431939, the issue is 'host nodes' + returning '128'. It should return empty value when memory + hotplug default policy is used. + + Fixed in commit d81d857f4421d205395d55200425daa6591c28a5. + :avocado: tags=RHBZ1431939 + """ + + cmd = 'object_add memory-backend-ram,id=mem1,size=1G' + res = self.vm.qmp('human-monitor-command', command_line=cmd) + self.assertEqual('', res['return']) + + cmd = 'device_add pc-dimm,id=dimm1,memdev=mem1' + res = self.vm.qmp('human-monitor-command', command_line=cmd) + self.assertEqual('', res['return']) + + cmd = 'info memdev' + res = self.vm.qmp('human-monitor-command', command_line=cmd) + self.assertIn('policy: default\r', res['return']) + self.assertIn('host nodes: \r', res['return']) + + def test_hotplug_memory_bind_policy(self): + """ + According to the RHBZ1431939, the issue is 'host nodes' + returning '128'. It should return 0 when memory hotplug + bind policy is used. + + Fixed in commit d81d857f4421d205395d55200425daa6591c28a5. + :avocado: tags=RHBZ1431939 + """ + + cmd = 'object_add memory-backend-ram,id=mem1,host-nodes=0,size=2G,policy=bind' + res = self.vm.qmp('human-monitor-command', command_line=cmd) + self.assertEqual('', res['return']) + + cmd = 'device_add pc-dimm,id=dimm1,memdev=mem1' + res = self.vm.qmp('human-monitor-command', command_line=cmd) + self.assertEqual('', res['return']) + + cmd = 'info memdev' + res = self.vm.qmp('human-monitor-command', command_line=cmd) + self.assertIn('policy: bind\r', res['return']) + self.assertIn('host nodes: 0\r', res['return']) + + def tearDown(self): + self.vm.shutdown() + +if __name__ == "__main__": + avocado.main()