[Kimchi-devel] [PATCH] [Kimchi 5/5] Live migration RDMA support: mockmodel changes
dhbarboza82 at gmail.com
dhbarboza82 at gmail.com
Tue Jan 10 19:34:37 UTC 2017
From: Daniel Henrique Barboza <danielhb at linux.vnet.ibm.com>
This patch adds the 'migrate' API in mockmodel.py, allowing
it to be tested in test_rest.py.
A new test called 'test_vm_migrate' was added in test_rest.py.
Signed-off-by: Daniel Henrique Barboza <danielhb at linux.vnet.ibm.com>
---
mockmodel.py | 17 ++++++++++++++++-
tests/test_rest.py | 48 +++++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 63 insertions(+), 2 deletions(-)
diff --git a/mockmodel.py b/mockmodel.py
index 43ef1be..9e27d3f 100644
--- a/mockmodel.py
+++ b/mockmodel.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM Corp, 2015-2016
+# Copyright IBM Corp, 2015-2017
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
@@ -411,6 +411,21 @@ class MockModel(Model):
MockModel._mock_snapshots[new_name] = snapshots
return self._model_vm_clone(name)
+ def _mock_vm_migrate(self, name, remote_host, user=None, password=None,
+ enable_rdma=None):
+
+ if enable_rdma is None:
+ enable_rdma = False
+
+ params = {'remote_host': remote_host, 'enable_rdma': enable_rdma}
+ taskid = AsyncTask(u'/plugins/kimchi/vms/%s/migrate' % name,
+ self._vmmigrate_create_task,
+ params).id
+ return self.task_lookup(taskid)
+
+ def _vmmigrate_create_task(self, cb, params):
+ cb('OK', True)
+
def _mock_vmvirtviewerfile_lookup(self, vm_name):
file_name = 'plugins/kimchi/data/virtviewerfiles/%s' %\
os.path.basename(self.virtviewerfile_tmp.name)
diff --git a/tests/test_rest.py b/tests/test_rest.py
index f25a693..56b8a89 100644
--- a/tests/test_rest.py
+++ b/tests/test_rest.py
@@ -2,7 +2,7 @@
#
# Project Kimchi
#
-# Copyright IBM Corp, 2013-2016
+# Copyright IBM Corp, 2013-2017
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
@@ -1248,6 +1248,52 @@ class RestTests(unittest.TestCase):
resp = json.loads(resp.read())
self.assertIn(u"KCHVM0012E", resp['reason'])
+ def test_vm_migrate(self):
+ with RollbackContext() as rollback:
+ req = json.dumps({'name': 'test-migrate',
+ 'source_media': {'type': 'disk',
+ 'path': fake_iso}})
+ resp = self.request('/plugins/kimchi/templates', req, 'POST')
+ self.assertEquals(201, resp.status)
+ rollback.prependDefer(self.request,
+ '/plugins/kimchi/templates/test-migrate',
+ '{}', 'DELETE')
+
+ req = json.dumps(
+ {'name': 'test-vm-migrate',
+ 'template': '/plugins/kimchi/templates/test-migrate'}
+ )
+ resp = self.request('/plugins/kimchi/vms', req, 'POST')
+ self.assertEquals(202, resp.status)
+ task = json.loads(resp.read())
+ wait_task(self._task_lookup, task['id'])
+ rollback.prependDefer(self.request, '/plugins/kimchi/vms/test-vm',
+ '{}', 'DELETE')
+
+ params = {'remote_host': 'destination_host'}
+ resp = self.request(
+ '/plugins/kimchi/vms/test-vm-migrate/migrate',
+ json.dumps(params), 'POST')
+ self.assertEquals(202, resp.status)
+ task = json.loads(resp.read())
+ wait_task(self._task_lookup, task['id'])
+ task = json.loads(
+ self.request('/plugins/kimchi/tasks/%s' % task['id']).read()
+ )
+ self.assertEquals('finished', task['status'])
+
+ params = {'remote_host': 'rdma_host', 'enable_rdma': True}
+ resp = self.request(
+ '/plugins/kimchi/vms/test-vm-migrate/migrate',
+ json.dumps(params), 'POST')
+ self.assertEquals(202, resp.status)
+ task = json.loads(resp.read())
+ wait_task(self._task_lookup, task['id'])
+ task = json.loads(
+ self.request('/plugins/kimchi/tasks/%s' % task['id']).read()
+ )
+ self.assertEquals('finished', task['status'])
+
def test_create_vm_with_img_based_template(self):
resp = json.loads(
self.request(
--
2.7.4
More information about the Kimchi-devel
mailing list