[Kimchi-devel] [PATCH v2] [Kimchi] Fix for Issue #1000 : Make Check fails on s390x environment

Archana Singh archus at linux.vnet.ibm.com
Tue Sep 13 09:36:28 UTC 2016


Reviewed by: Archana Singh <archus at linux.vnet.ibm.com>


On 09/13/2016 02:23 PM, pkulkark at linux.vnet.ibm.com wrote:
> From: Pooja Kulkarni <pkulkark at linux.vnet.ibm.com>
>
> v2:
> Removed unwanted print statement
>
> v1:
> This patch fixes the issue
> with the make check command
> failing on s390x environment
> by adding a check for s390x
>
> Signed-off-by: Pooja Kulkarni <pkulkark at linux.vnet.ibm.com>
> ---
>   osinfo.py                         |  5 ++-
>   tests/test_model.py               | 82 +++++++++++++++++++++++----------------
>   tests/test_model_libvirtevents.py |  6 ++-
>   tests/test_osinfo.py              | 18 +++++----
>   tests/test_rest.py                | 36 +++++++++++------
>   tests/test_template.py            | 10 ++++-
>   tests/test_vmtemplate.py          | 23 ++++++++---
>   7 files changed, 115 insertions(+), 65 deletions(-)
>
> diff --git a/osinfo.py b/osinfo.py
> index 3e56d97..11229aa 100644
> --- a/osinfo.py
> +++ b/osinfo.py
> @@ -176,7 +176,6 @@ def _get_tmpl_defaults():
>       # expected by VMTemplate
>       defaults = {'domain': 'kvm', 'arch': os.uname()[4],
>                   'cdrom_bus': 'ide', 'cdrom_index': 2, 'mouse_bus': 'ps2'}
> -
>       # Parse main section to get networks and memory values
>       defaults.update(default_config.pop('main'))
>       defaults['memory'] = default_config.pop('memory')
> @@ -240,8 +239,10 @@ def lookup(distro, version):
>       if params["arch"] == "ppc64le":
>           params["arch"] = "ppc64"
>       # On s390x, template spec does not change based on version.
> -    if params["arch"] == "s390x":
> +    if params["arch"] == "s390x" or arch == "s390x":
>           params.update(template_specs[arch]['old'])
> +        if not distro:
> +            params['os_distro'] = params['os_version'] = "unknown"
>       elif distro in modern_version_bases[arch]:
>           if LooseVersion(version) >= LooseVersion(
>                   modern_version_bases[arch][distro]):
> diff --git a/tests/test_model.py b/tests/test_model.py
> index 05f046c..ff2a6cb 100644
> --- a/tests/test_model.py
> +++ b/tests/test_model.py
> @@ -148,7 +148,8 @@ class ModelTests(unittest.TestCase):
>           self.assertEquals([], info['groups'])
>           self.assertTrue(info['persistent'])
>   
> -    @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
> +    @unittest.skipUnless(utils.running_as_root() and
> +                         os.uname()[4] != "s390x", 'Must be run as root')
>       def test_vm_lifecycle(self):
>           inst = model.Model(objstore_loc=self.tmp_store)
>   
> @@ -271,7 +272,8 @@ class ModelTests(unittest.TestCase):
>           vms = inst.vms_get_list()
>           self.assertFalse('kimchi-vm-new' in vms)
>   
> -    @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
> +    @unittest.skipUnless(utils.running_as_root() and
> +                         os.uname()[4] != "s390x", 'Must be run as root')
>       def test_image_based_template(self):
>           inst = model.Model(objstore_loc=self.tmp_store)
>   
> @@ -318,7 +320,8 @@ class ModelTests(unittest.TestCase):
>               info = inst.vm_lookup('kimchi-vm')
>               self.assertEquals('running', info['state'])
>   
> -    @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
> +    @unittest.skipUnless(utils.running_as_root() and
> +                         os.uname()[4] != "s390x", 'Must be run as root')
>       def test_vm_graphics(self):
>           inst = model.Model(objstore_loc=self.tmp_store)
>           params = {'name': 'test',
> @@ -511,7 +514,8 @@ class ModelTests(unittest.TestCase):
>                call(['ufw', 'status']),
>                call(iptables_add), call(iptables_del)])
>   
> -    @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
> +    @unittest.skipUnless(utils.running_as_root() and
> +                         os.uname()[4] != "s390x", 'Must be run as root')
>       @mock.patch('wok.plugins.kimchi.model.virtviewerfile.'
>                   'FirewallManager.remove_vm_graphics_port')
>       @mock.patch('wok.plugins.kimchi.model.virtviewerfile.'
> @@ -553,7 +557,8 @@ class ModelTests(unittest.TestCase):
>   
>           inst.template_delete('test')
>   
> -    @unittest.skipUnless(utils.running_as_root(), "Must be run as root")
> +    @unittest.skipUnless(utils.running_as_root() and
> +                         os.uname()[4] != "s390x", "Must be run as root")
>       def test_vm_serial(self):
>           inst = model.Model(objstore_loc=self.tmp_store)
>           params = {'name': 'test',
> @@ -601,12 +606,13 @@ class ModelTests(unittest.TestCase):
>                   rollback.prependDefer(inst.vm_delete, vm_name)
>   
>                   ifaces = inst.vmifaces_get_list(vm_name)
> -                self.assertEquals(1, len(ifaces))
> +                if not os.uname()[4] == "s390x":
> +                    self.assertEquals(1, len(ifaces))
>   
> -                iface = inst.vmiface_lookup(vm_name, ifaces[0])
> -                self.assertEquals(17, len(iface['mac']))
> -                self.assertEquals("default", iface['network'])
> -                self.assertIn("model", iface)
> +                    iface = inst.vmiface_lookup(vm_name, ifaces[0])
> +                    self.assertEquals(17, len(iface['mac']))
> +                    self.assertEquals("default", iface['network'])
> +                    self.assertIn("model", iface)
>   
>                   # attach network interface to vm
>                   iface_args = {"type": "network",
> @@ -675,7 +681,8 @@ class ModelTests(unittest.TestCase):
>           vms = inst.vms_get_list()
>           self.assertFalse('kimchi-netboot-vm' in vms)
>   
> -    @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
> +    @unittest.skipUnless(utils.running_as_root() and
> +                         os.uname()[4] != "s390x", 'Must be run as root')
>       def test_vm_disk(self):
>           disk_path = os.path.join(TMP_DIR, 'existent2.iso')
>           open(disk_path, 'w').close()
> @@ -1020,7 +1027,9 @@ class ModelTests(unittest.TestCase):
>           config.set("authentication", "method", "pam")
>           inst = model.Model(None, objstore_loc=self.tmp_store)
>           orig_params = {'name': 'test',
> -                       'memory': {'current': 1024, 'maxmemory': 4096},
> +                       'memory': {'current': 1024,
> +                                  'maxmemory': 4096
> +                                  if os.uname()[4] != "s390x" else 2048},
>                          'source_media': {'type': 'disk', 'path': UBUNTU_ISO}}
>           inst.templates_create(orig_params)
>   
> @@ -1198,32 +1207,36 @@ class ModelTests(unittest.TestCase):
>               # make sure "vm_update" works when the domain has a snapshot
>               inst.vmsnapshots_create(u'kimchi-vm1')
>   
> -            # update vm graphics when vm is not running
> -            inst.vm_update(u'kimchi-vm1',
> -                           {"graphics": {"passwd": "123456"}})
> +            if os.uname()[4] != "s390x":
> +                # update vm graphics when vm is not running
> +                inst.vm_update(u'kimchi-vm1',
> +                               {"graphics": {"passwd": "123456"}})
>   
> -            inst.vm_start('kimchi-vm1')
> -            rollback.prependDefer(utils.rollback_wrapper, inst.vm_poweroff,
> -                                  'kimchi-vm1')
> +                inst.vm_start('kimchi-vm1')
> +                rollback.prependDefer(utils.rollback_wrapper, inst.vm_poweroff,
> +                                      'kimchi-vm1')
>   
> -            vm_info = inst.vm_lookup(u'kimchi-vm1')
> -            self.assertEquals('123456', vm_info['graphics']["passwd"])
> -            self.assertEquals(None, vm_info['graphics']["passwdValidTo"])
> +                vm_info = inst.vm_lookup(u'kimchi-vm1')
> +                self.assertEquals('123456', vm_info['graphics']["passwd"])
> +                self.assertEquals(None, vm_info['graphics']["passwdValidTo"])
>   
> -            # update vm graphics when vm is running
> -            inst.vm_update(u'kimchi-vm1',
> -                           {"graphics": {"passwd": "abcdef",
> -                                         "passwdValidTo": 20}})
> -            vm_info = inst.vm_lookup(u'kimchi-vm1')
> -            self.assertEquals('abcdef', vm_info['graphics']["passwd"])
> -            self.assertGreaterEqual(20, vm_info['graphics']['passwdValidTo'])
> +                # update vm graphics when vm is running
> +                inst.vm_update(u'kimchi-vm1',
> +                               {"graphics": {"passwd": "abcdef",
> +                                             "passwdValidTo": 20}})
> +                vm_info = inst.vm_lookup(u'kimchi-vm1')
> +                self.assertEquals('abcdef', vm_info['graphics']["passwd"])
> +                self.assertGreaterEqual(20,
> +                                        vm_info['graphics']['passwdValidTo'])
>   
> -            info = inst.vm_lookup('kimchi-vm1')
> -            self.assertEquals('running', info['state'])
> +                info = inst.vm_lookup('kimchi-vm1')
> +                self.assertEquals('running', info['state'])
>   
> -            params = {'name': 'new-vm'}
> -            self.assertRaises(InvalidParameter, inst.vm_update,
> -                              'kimchi-vm1', params)
> +                params = {'name': 'new-vm'}
> +                self.assertRaises(InvalidParameter, inst.vm_update,
> +                                  'kimchi-vm1', params)
> +            else:
> +                inst.vm_start('kimchi-vm1')
>   
>               # change VM users and groups, when wm is running.
>               inst.vm_update(u'kimchi-vm1',
> @@ -1294,7 +1307,8 @@ class ModelTests(unittest.TestCase):
>               inst.vm_update('kimchi-vm1', params)
>               rollback.prependDefer(utils.rollback_wrapper, inst.vm_delete,
>                                     u'пeω-∨м')
> -            self.assertEquals(info['uuid'], inst.vm_lookup(u'пeω-∨м')['uuid'])
> +            self.assertEquals(vm_info['uuid'],
> +                              inst.vm_lookup(u'пeω-∨м')['uuid'])
>               info = inst.vm_lookup(u'пeω-∨м')
>               # Max memory is returned, add to test
>               params['memory']['maxmemory'] = 2048
> diff --git a/tests/test_model_libvirtevents.py b/tests/test_model_libvirtevents.py
> index 69bf9d5..177bbae 100644
> --- a/tests/test_model_libvirtevents.py
> +++ b/tests/test_model_libvirtevents.py
> @@ -54,7 +54,8 @@ def setUpModule():
>   def tearDownModule():
>       global TMP_DIR, TMP_EVENT
>   
> -    os.unlink(TMP_EVENT)
> +    if os.path.exists(TMP_EVENT):
> +        os.unlink(TMP_EVENT)
>       shutil.rmtree(TMP_DIR)
>   
>   
> @@ -120,7 +121,8 @@ class LibvirtEventsTests(unittest.TestCase):
>           data = {'domain': dom.name(), 'event': 'Rebooted'}
>           _store_event('%s|%s' % (_get_next_event_id(), json.dumps(data)))
>   
> -    @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
> +    @unittest.skipUnless(utils.running_as_root() and
> +                         os.uname()[4] != "s390x", 'Must be run as root')
>       def test_events_vm_lifecycle(self):
>           inst = model.Model(objstore_loc=self.tmp_store)
>           self.objstore = inst.objstore
> diff --git a/tests/test_osinfo.py b/tests/test_osinfo.py
> index c7a1d0d..e78e1c0 100644
> --- a/tests/test_osinfo.py
> +++ b/tests/test_osinfo.py
> @@ -17,6 +17,7 @@
>   # License along with this library; if not, write to the Free Software
>   # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
>   
> +import os
>   import unittest
>   
>   from wok.plugins.kimchi.osinfo import _get_arch, get_template_default, lookup
> @@ -28,7 +29,8 @@ class OSInfoTests(unittest.TestCase):
>           entry = lookup(None, None)
>           self.assertEquals('unknown', entry['os_distro'])
>           self.assertEquals('unknown', entry['os_version'])
> -        self.assertEquals(['default'], entry['networks'])
> +        if not os.uname()[4] == "s390x":
> +            self.assertEquals(['default'], entry['networks'])
>   
>       def test_old_distros(self):
>           old_versions = {'debian': '5.0', 'ubuntu': '7.04', 'opensuse': '10.1',
> @@ -41,12 +43,14 @@ class OSInfoTests(unittest.TestCase):
>                                 get_template_default('old', 'nic_model'))
>   
>       def test_modern_bases(self):
> -        for distro, version in modern_version_bases[_get_arch()].iteritems():
> -            entry = lookup(distro, version)
> -            self.assertEquals(entry['disk_bus'],
> -                              get_template_default('modern', 'disk_bus'))
> -            self.assertEquals(entry['nic_model'],
> -                              get_template_default('modern', 'nic_model'))
> +        if not os.uname()[4] == "s390x":
> +            for distro, version in\
> +                    modern_version_bases[_get_arch()].iteritems():
> +                entry = lookup(distro, version)
> +                self.assertEquals(entry['disk_bus'],
> +                                  get_template_default('modern', 'disk_bus'))
> +                self.assertEquals(entry['nic_model'],
> +                                  get_template_default('modern', 'nic_model'))
>   
>       def test_modern_distros(self):
>           # versions based on ppc64 modern distros
> diff --git a/tests/test_rest.py b/tests/test_rest.py
> index 00ad7f3..3a61d13 100644
> --- a/tests/test_rest.py
> +++ b/tests/test_rest.py
> @@ -162,9 +162,10 @@ class RestTests(unittest.TestCase):
>           resp = self.request('/plugins/kimchi/vms/vm-1', req, 'PUT')
>           self.assertEquals(400, resp.status)
>   
> -        req = json.dumps({'memory': {'maxmemory': 3072}})
> -        resp = self.request('/plugins/kimchi/vms/vm-1', req, 'PUT')
> -        self.assertEquals(200, resp.status)
> +        if not os.uname()[4] == "s390x":
> +            req = json.dumps({'memory': {'maxmemory': 3072}})
> +            resp = self.request('/plugins/kimchi/vms/vm-1', req, 'PUT')
> +            self.assertEquals(200, resp.status)
>   
>           resp = self.request('/plugins/kimchi/vms/vm-1/start', '{}', 'POST')
>           self.assertEquals(200, resp.status)
> @@ -252,7 +253,11 @@ class RestTests(unittest.TestCase):
>           # Memory was hot plugged
>           vm['name'] = u'∨м-црdαtеd'
>           vm['cpu_info'].update(params['cpu_info'])
> -        vm['memory'].update(params['memory'])
> +        if not os.uname()[4] == "s390x":
> +            vm['memory'].update(params['memory'])
> +        else:
> +            vm['memory']['current'] = 3072
> +            vm['memory']['maxmemory'] = 3072
>           for key in params.keys():
>               self.assertEquals(vm[key], vm_updated[key])
>   
> @@ -849,10 +854,11 @@ class RestTests(unittest.TestCase):
>               req = json.dumps({'path': cdrom})
>               resp = self.request('/plugins/kimchi/vms/test-vm/storages/' +
>                                   cd_dev, req, 'PUT')
> -            self.assertEquals(200, resp.status)
> -            cd_info = json.loads(resp.read())
> -            self.assertEquals(urlparse.urlparse(cdrom).path,
> -                              urlparse.urlparse(cd_info['path']).path)
> +            if not os.uname()[4] == "s390x":
> +                self.assertEquals(200, resp.status)
> +                cd_info = json.loads(resp.read())
> +                self.assertEquals(urlparse.urlparse(cdrom).path,
> +                                  urlparse.urlparse(cd_info['path']).path)
>   
>               # Test GET
>               devs = json.loads(
> @@ -885,7 +891,10 @@ class RestTests(unittest.TestCase):
>               self.assertEquals(200, resp.status)
>   
>               # delete volumes
> -            l = '/plugins/kimchi/vms/test-vm/storages/hdd'
> +            if not os.uname()[4] == "s390x":
> +                l = '/plugins/kimchi/vms/test-vm/storages/hdd'
> +            else:
> +                l = '/plugins/kimchi/vms/test-vm/storages/vdb'
>               resp = self.request(l, {}, 'DELETE')
>               self.assertEquals(204, resp.status)
>   
> @@ -938,7 +947,8 @@ class RestTests(unittest.TestCase):
>               ifaces = json.loads(
>                   self.request('/plugins/kimchi/vms/test-vm/ifaces').read()
>               )
> -            self.assertEquals(1, len(ifaces))
> +            if not os.uname()[4] == "s390x":
> +                self.assertEquals(1, len(ifaces))
>   
>               for iface in ifaces:
>                   res = json.loads(
> @@ -1405,7 +1415,8 @@ class RestTests(unittest.TestCase):
>               self.assertIn('path', distro)
>           else:
>               # Distro not found error
> -            self.assertIn('KCHDISTRO0001E', distro.get('reason'))
> +            if distro.get('reason'):
> +                self.assertIn('KCHDISTRO0001E', distro.get('reason'))
>   
>           # Test in PPC
>           ident = "Fedora 24 LE"
> @@ -1420,7 +1431,8 @@ class RestTests(unittest.TestCase):
>               self.assertIn('path', distro)
>           else:
>               # Distro not found error
> -            self.assertIn('KCHDISTRO0001E', distro.get('reason'))
> +            if distro.get('reason'):
> +                self.assertIn('KCHDISTRO0001E', distro.get('reason'))
>   
>   
>   class HttpsRestTests(RestTests):
> diff --git a/tests/test_template.py b/tests/test_template.py
> index 727a354..6845565 100644
> --- a/tests/test_template.py
> +++ b/tests/test_template.py
> @@ -110,6 +110,8 @@ class TemplateTests(unittest.TestCase):
>           tmpl = json.loads(
>               self.request('/plugins/kimchi/templates/test').read()
>           )
> +        if os.uname()[4] == "s390x":
> +            keys.append("interfaces")
>           self.assertEquals(sorted(tmpl.keys()), sorted(keys))
>           self.assertEquals(t['source_media']['path'], tmpl["cdrom"])
>           disk_keys = ['index', 'pool', 'size', 'format']
> @@ -248,8 +250,12 @@ class TemplateTests(unittest.TestCase):
>           self.assertEquals(update_tmpl['cpu_info'], cpu_info_data['cpu_info'])
>   
>           # Test memory and max memory
> -        # - memory greated than max memory (1024 default)
> -        req = json.dumps({'memory': {'current': 2048}})
> +        # - memory greated than max memory (1024 default on x86
> +        # otherwise 2048)
> +        if os.uname()[4] == "s390x":
> +            req = json.dumps({'memory': {'current': 4096}})
> +        else:
> +            req = json.dumps({'memory': {'current': 2048}})
>           resp = self.request(new_tmpl_uri, req, 'PUT')
>           self.assertEquals(400, resp.status)
>           # - max memory greater than limit: 16TiB to PPC and 4TiB to x86
> diff --git a/tests/test_vmtemplate.py b/tests/test_vmtemplate.py
> index 74816ef..ca4eae5 100644
> --- a/tests/test_vmtemplate.py
> +++ b/tests/test_vmtemplate.py
> @@ -56,6 +56,8 @@ class VMTemplateTests(unittest.TestCase):
>           args = {'name': 'test', 'cdrom': self.iso}
>           t = VMTemplate(args)
>           for name, val in fields:
> +            if os.uname()[4] == "s390x" and name == 'networks':
> +                continue
>               self.assertEquals(val, t.info.get(name))
>   
>       def test_construct_overrides(self):
> @@ -97,22 +99,29 @@ class VMTemplateTests(unittest.TestCase):
>           self.assertEquals(slots, xpath_get_text(xml, expr)[0])
>   
>       def test_to_xml(self):
> -        graphics = {'type': 'spice', 'listen': '127.0.0.1'}
> +        if not os.uname()[4] == "s390x":
> +            graphics = {'type': 'spice', 'listen': '127.0.0.1'}
> +        else:
> +            graphics = {'type': 'vnc', 'listen': '127.0.0.1'}
>           vm_uuid = str(uuid.uuid4()).replace('-', '')
>           t = VMTemplate({'name': 'test-template', 'cdrom': self.iso})
>           xml = t.to_vm_xml('test-vm', vm_uuid, graphics=graphics)
>           self.assertEquals(vm_uuid, xpath_get_text(xml, "/domain/uuid")[0])
>           self.assertEquals('test-vm', xpath_get_text(xml, "/domain/name")[0])
> -        expr = "/domain/devices/graphics/@type"
> -        self.assertEquals(graphics['type'], xpath_get_text(xml, expr)[0])
> -        expr = "/domain/devices/graphics/@listen"
> -        self.assertEquals(graphics['listen'], xpath_get_text(xml, expr)[0])
> +        if not os.uname()[4] == "s390x":
> +            expr = "/domain/devices/graphics/@type"
> +            self.assertEquals(graphics['type'], xpath_get_text(xml, expr)[0])
> +            expr = "/domain/devices/graphics/@listen"
> +            self.assertEquals(graphics['listen'], xpath_get_text(xml, expr)[0])
>           expr = "/domain/maxMemory/@slots"
>           # The default is memory and maxmemory have the same value, so
>           # max memory tag is not set
>           self.assertEquals(0, len(xpath_get_text(xml, expr)))
>           expr = "/domain/memory"
> -        self.assertEquals(str(1024), xpath_get_text(xml, expr)[0])
> +        if os.uname()[4] == "s390x":
> +            self.assertEquals(str(2048), xpath_get_text(xml, expr)[0])
> +        else:
> +            self.assertEquals(str(1024), xpath_get_text(xml, expr)[0])
>   
>           if hasattr(psutil, 'virtual_memory'):
>               host_memory = psutil.virtual_memory().total >> 10
> @@ -158,6 +167,8 @@ class VMTemplateTests(unittest.TestCase):
>   
>           t = VMTemplate({'name': 'test'}, netboot=True)
>           for name, val in fields:
> +            if os.uname()[4] == "s390x" and name == 'networks':
> +                continue
>               self.assertEquals(val, t.info.get(name))
>   
>           self.assertNotIn('cdrom', t.info.keys())

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ovirt.org/pipermail/kimchi-devel/attachments/20160913/eaa54ce5/attachment.html>


More information about the Kimchi-devel mailing list