[Kimchi-devel] [PATCH 2/2] Unit tests for the new disk image types

Daniel Henrique Barboza danielhb at linux.vnet.ibm.com
Thu Oct 30 12:05:15 UTC 2014


The tests covered the case where the template is created and the
type of the disk is changed.

Signed-off-by: Daniel Henrique Barboza <danielhb at linux.vnet.ibm.com>
---
 tests/test_mockmodel.py | 62 ++++++++++++++++++++++++++++++++++++++++---------
 tests/test_model.py     | 14 +++++++++++
 2 files changed, 65 insertions(+), 11 deletions(-)

diff --git a/tests/test_mockmodel.py b/tests/test_mockmodel.py
index 7319531..5d9fdab 100644
--- a/tests/test_mockmodel.py
+++ b/tests/test_mockmodel.py
@@ -90,12 +90,15 @@ class MockModelTests(unittest.TestCase):
             else:
                 self.fail("Expected exception not raised")
 
-    def test_template_cpu_info(self):
+    def _create_default_template(self):
         # Create default template
         req = json.dumps({'name': 'test', 'cdrom': fake_iso})
         resp = request(host, ssl_port, '/templates', req, 'POST')
         rsp_body = resp.read()
-        template_data = json.loads(rsp_body)
+        return json.loads(rsp_body)
+
+    def test_template_cpu_info(self):
+        template_data = self._get_default_template()
         # GET of cpu_info will be {}
         cpu_info = template_data['cpu_info']
         self.assertEquals(cpu_info, {})
@@ -103,16 +106,53 @@ class MockModelTests(unittest.TestCase):
 
         # Update topology
         # GET of cpu_info will contain 'topology'
-        req = json.dumps({'cpu_info': {'topology': {'sockets': 1,
-                                                    'cores': 1,
-                                                    'threads': 1}}})
-        resp = request(host, ssl_port, '/templates/test', req, 'PUT')
+        cpu_info_data = {'cpu_info': {'topology': {'sockets': 1,
+                                                   'cores': 1,
+                                                   'threads': 1}}}
+        updated_template, _ = self._get_PUT_response('/templates/test',
+                                                     cpu_info_data)
+        self.assertEquals(updated_template['cpu_info'],
+                          cpu_info_data['cpu_info'])
+
+    def test_template_update_disk_type(self):
+        def _get_default_disk_data(disk_type):
+            return {'disks': [{'index': 0, 'type': disk_type, 'size': 10}]}
+
+        template = self._create_default_template()
+        # Default template is created with 1 disk without any declared
+        # type.
+        disk_data = template['disks']
+        self.assertEquals(disk_data, [{'index': 0, 'size': 10}])
+
+        # For all supported types, edit the template and check if
+        # the change was made.
+        disk_types = ['bochs', 'cloop', 'cow', 'dmg', 'qcow', 'qcow2',
+                      'qed', 'raw', 'vmdk', 'vpc']
+        for disk_type in disk_types:
+            disk_data = _get_default_disk_data(disk_type)
+            updated_template, resp_code = \
+                self._get_PUT_response('/templates/test',
+                                       disk_data)
+            self.assertEquals(200, resp_code)
+            self.assertEquals(updated_template['disks'], disk_data['disks'])
+
+        # Check Bad Request when type is invalid
+        bad_disk_data = _get_default_disk_data('invalid_disk_type')
+        _, resp_code = self._get_PUT_response('/templates/test', bad_disk_data)
+        self.assertEquals(400, resp_code)
+
+    def _get_default_template(self):
+        # Create default template
+        req = json.dumps({'name': 'test', 'cdrom': fake_iso})
+        resp = request(host, ssl_port, '/templates', req, 'POST')
         rsp_body = resp.read()
-        template_data = json.loads(rsp_body)
-        cpu_info = template_data['cpu_info']
-        self.assertEquals(cpu_info, {'topology': {'sockets': 1,
-                                                  'cores': 1,
-                                                  'threads': 1}})
+        return json.loads(rsp_body)
+
+    def _get_PUT_response(self, url, data):
+        req = json.dumps(data)
+        resp = request(host, ssl_port, url, req, 'PUT')
+        rsp_body = resp.read()
+        return json.loads(rsp_body), resp.status
 
     def test_screenshot_refresh(self):
         # Create a VM
diff --git a/tests/test_model.py b/tests/test_model.py
index d9bbe9e..0ff1ea3 100644
--- a/tests/test_model.py
+++ b/tests/test_model.py
@@ -628,6 +628,20 @@ class ModelTests(unittest.TestCase):
             self.assertRaises(InvalidParameter, inst.template_update,
                               'test', params)
 
+            # For all supported types, edit the template and check if
+            # the change was made.
+            disk_types = ['bochs', 'cloop', 'cow', 'dmg', 'qcow', 'qcow2',
+                          'qed', 'raw', 'vmdk', 'vpc']
+            for disk_type in disk_types:
+                disk_data = {'disks': [{'index': 0, 'type': disk_type,
+                                       'size': 1}]}
+                inst.template_update('test', disk_data)
+                updated_template = inst.template_lookup('test')
+                self.assertEquals(updated_template['disks'],
+                                  disk_data['disks'])
+            # Restore disk data to default value
+            inst.template_update('test', {'disks': [{'index': 0, 'size': 1}]})
+
             args = {'name': pool,
                     'path': path,
                     'type': 'dir'}
-- 
1.8.3.1




More information about the Kimchi-devel mailing list