[Kimchi-devel] [kimchi-devel][PATCH 2/2] Ignore cpu test case when exceed host cpu count

lvroyce at linux.vnet.ibm.com lvroyce at linux.vnet.ibm.com
Mon Mar 9 13:52:21 UTC 2015


From: Royce Lv <lvroyce at linux.vnet.ibm.com>

If vpu given exceed host cpu count, ignore corresponding test.
Because test model does not support host cpu topology query,
using real model instead of test model in cpu related tests.

Signed-off-by: Royce Lv <lvroyce at linux.vnet.ibm.com>
---
 tests/test_model.py | 54 +++++++++++++++++++++++++++++++++++------------------
 tests/utils.py      |  5 +++++
 2 files changed, 41 insertions(+), 18 deletions(-)

diff --git a/tests/test_model.py b/tests/test_model.py
index f80f1c9..c3f5595 100644
--- a/tests/test_model.py
+++ b/tests/test_model.py
@@ -622,7 +622,7 @@ class ModelTests(unittest.TestCase):
 
     @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
     def test_template_create(self):
-        inst = model.Model('test:///default',
+        inst = model.Model('qemu:///system',
                            objstore_loc=self.tmp_store)
         # Test non-exist path raises InvalidParameter
         params = {'name': 'test',
@@ -664,7 +664,7 @@ class ModelTests(unittest.TestCase):
 
     @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
     def test_template_integrity(self):
-        inst = model.Model('test:///default',
+        inst = model.Model('qemu:///system',
                            objstore_loc=self.tmp_store)
 
         with RollbackContext() as rollback:
@@ -723,6 +723,37 @@ class ModelTests(unittest.TestCase):
             for key in clone_temp.keys():
                 self.assertEquals(clone_temp[key], orig_temp[key])
 
+    @unittest.skipUnless(utils.allow_vcpu_change(2), 'Host does not have enough CPUs')
+    @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
+    def test_template_update_vcpu(self):
+        params = {'name': 'new-test', 'memory': 512, 'cpus': 2}
+        inst.template_update('new-test', params)
+        rollback.prependDefer(inst.template_delete, 'new-test')
+
+        info = inst.template_lookup('new-test')
+        for key in params.keys():
+            self.assertEquals(params[key], info[key])
+
+        params = {'name': 'new-test', 'memory': 1024, 'cpus': 1,
+                  'networks': ['default', 'test-network', u'kīмсhī-пet']}
+        inst.template_update('new-test', params)
+        info = inst.template_lookup('new-test')
+        for key in params.keys():
+            self.assertEquals(params[key], info[key])
+
+        # test cpu_info
+        # new-test has 1 cpu, so this should fail:
+        params['cpu_info'] = {"topology":
+                              {"sockets": 1, "cores": 1, "threads": 2}}
+        self.assertRaises(InvalidParameter, inst.template_update,
+                          'new-test', params)
+
+        params['cpus'] = 2
+        inst.template_update('new-test', params)
+        info = inst.template_lookup('new-test')
+        for key in params.keys():
+            self.assertEquals(params[key], info[key])
+
     @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
     def test_template_update(self):
         inst = model.Model(None,
@@ -754,7 +785,7 @@ class ModelTests(unittest.TestCase):
             self.assertEquals('new-test', inst.template_update('test', params))
             self.assertRaises(NotFoundError, inst.template_delete, 'test')
 
-            params = {'name': 'new-test', 'memory': 512, 'cpus': 2}
+            params = {'name': 'new-test', 'memory': 512}
             inst.template_update('new-test', params)
             rollback.prependDefer(inst.template_delete, 'new-test')
 
@@ -770,19 +801,6 @@ class ModelTests(unittest.TestCase):
             for key in params.keys():
                 self.assertEquals(params[key], info[key])
 
-            # test cpu_info
-            # new-test has 1 cpu, so this should fail:
-            params['cpu_info'] = {"topology":
-                                  {"sockets": 1, "cores": 1, "threads": 2}}
-            self.assertRaises(InvalidParameter, inst.template_update,
-                              'new-test', params)
-
-            params['cpus'] = 2
-            inst.template_update('new-test', params)
-            info = inst.template_lookup('new-test')
-            for key in params.keys():
-                self.assertEquals(params[key], info[key])
-
             # test update with non-existent network
             params = {'networks': ["no-exist"]}
             self.assertRaises(InvalidParameter, inst.template_update,
@@ -798,10 +816,10 @@ class ModelTests(unittest.TestCase):
 
     def test_vm_edit(self):
         config.set("authentication", "method", "pam")
-        inst = model.Model(None,
+        inst = model.Model("qemu:///system",
                            objstore_loc=self.tmp_store)
 
-        orig_params = {'name': 'test', 'memory': '1024', 'cpus': '1',
+        orig_params = {'name': 'test', 'memory': '1024', 'cpus': 1,
                        'cdrom': self.kimchi_iso}
         inst.templates_create(orig_params)
 
diff --git a/tests/utils.py b/tests/utils.py
index 2a8929f..7650433 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -23,6 +23,7 @@ import cherrypy
 import grp
 import httplib
 import json
+import multiprocessing
 import os
 import socket
 import sys
@@ -135,6 +136,10 @@ def running_as_root():
     return os.geteuid() == 0
 
 
+def allow_vcpu_change(vcpu_cnt):
+    return multiprocessing.cpu_count() >= vcpu_cnt
+
+
 def _request(conn, path, data, method, headers):
     if headers is None:
         headers = {'Content-Type': 'application/json',
-- 
1.9.1




More information about the Kimchi-devel mailing list