diff mbox series

[RFC,13/24] avocado_qemu: Functional test for RHBZ#1431939

Message ID 20180420181951.7252-14-ehabkost@redhat.com
State New
Headers show
Series Avocado-based functional tests | expand

Commit Message

Eduardo Habkost April 20, 2018, 6:19 p.m. UTC
From: Amador Pahim <apahim@redhat.com>

This issue was fixed in commit d81d857.

According to the RHBZ1431939, the issue is 'host nodes' returning '128'.
It should return empty value when using default policy or 0 when using
bind policy.

Test consists in inspect the result of the 'info memdev' QMP command
after hot-adding memory.

Signed-off-by: Amador Pahim <apahim@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 tests/avocado/test_info_memdev_host_nodes.py | 66 ++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)
 create mode 100644 tests/avocado/test_info_memdev_host_nodes.py

Comments

Stefan Hajnoczi April 30, 2018, 1:02 p.m. UTC | #1
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
Eduardo Habkost May 7, 2018, 2:03 p.m. UTC | #2
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.
Stefan Hajnoczi May 10, 2018, 9:14 a.m. UTC | #3
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 mbox series

Patch

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()