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

Daniel Henrique Barboza danielhb at linux.vnet.ibm.com
Fri Oct 31 18:31:38 UTC 2014


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

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

diff --git a/tests/test_mockmodel.py b/tests/test_mockmodel.py
index eeb6715..db0915e 100644
--- a/tests/test_mockmodel.py
+++ b/tests/test_mockmodel.py
@@ -91,29 +91,80 @@ 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 = self._create_default_template()
         # GET of cpu_info will be {}
-        cpu_info = template_data['cpu_info']
+        cpu_info = template['cpu_info']
         self.assertEquals(cpu_info, {})
         self.assertEquals(cpu_info.get('topology'), None)
 
         # 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}}}
+        _, resp_code = self._send_url_request('PUT', '/templates/test',
+                                              cpu_info_data)
+        self.assertEquals(200, resp_code)
+
+        updated_template, resp_code = \
+            self._send_url_request('GET', '/templates/test')
+        self.assertEquals(200, resp_code)
+        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, 'format': 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)
+            _, resp_code = self._send_url_request('PUT', '/templates/test',
+                                                  disk_data)
+            self.assertEquals(200, resp_code)
+
+            updated_template, resp_code = \
+                self._send_url_request('GET', '/templates/test')
+            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._send_url_request('PUT', '/templates/test',
+                                              bad_disk_data)
+        self.assertEquals(400, resp_code)
+
+    def _create_default_template(self):
+        params = {'name': 'test', 'cdrom': fake_iso}
+        template, resp_code = self._send_url_request('POST', '/templates',
+                                                     params)
+        self.assertEquals(201, resp_code)
+        return template
+
+    def _send_url_request(self, method, url, data=None):
+        req = None
+        if data:
+            req = json.dumps(data)
+        resp = request(host, ssl_port, url, req, method)
         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), resp.status
 
     def test_screenshot_refresh(self):
         # Create a VM
diff --git a/tests/test_model.py b/tests/test_model.py
index 563e80a..dab5890 100644
--- a/tests/test_model.py
+++ b/tests/test_model.py
@@ -639,6 +639,20 @@ class ModelTests(unittest.TestCase):
             self.assertRaises(InvalidParameter, inst.template_update,
                               'test', params)
 
+            # For all supported formats, edit the template and check if
+            # the change was made.
+            disk_formats = ['bochs', 'cloop', 'cow', 'dmg', 'qcow', 'qcow2',
+                          'qed', 'raw', 'vmdk', 'vpc']
+            for disk_format in disk_formats:
+                disk_data = {'disks': [{'index': 0, 'format': disk_format,
+                                       '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