Reviewed-By: Paulo Vital <pvital(a)linux.vnet.ibm.com>
On Mon, 2015-11-16 at 21:04 -0200, dhbarboza82(a)gmail.com wrote:
From: Daniel Henrique Barboza <dhbarboza82(a)gmail.com>
Using python mock allowed to make unit test for otherwise
invasive and arch dependent features that live migration
now supports.
Signed-off-by: Daniel Henrique Barboza <dhbarboza82(a)gmail.com>
---
src/wok/plugins/kimchi/tests/test_livemigration.py | 81
+++++++++++++++++++++-
1 file changed, 78 insertions(+), 3 deletions(-)
diff --git a/src/wok/plugins/kimchi/tests/test_livemigration.py
b/src/wok/plugins/kimchi/tests/test_livemigration.py
index b9eb9a4..34c0b7e 100644
--- a/src/wok/plugins/kimchi/tests/test_livemigration.py
+++ b/src/wok/plugins/kimchi/tests/test_livemigration.py
@@ -19,6 +19,7 @@
import json
import libvirt
+import mock
import os
import socket
import unittest
@@ -77,7 +78,11 @@ def running_root_and_remoteserver_defined():
def check_if_vm_migration_test_possible():
inst = model.Model(objstore_loc='/tmp/kimchi-store-test')
try:
- inst.vm_migration_pre_check(KIMCHI_LIVE_MIGRATION_TEST,
'root')
+ inst.vm_migration_pre_check(
+ KIMCHI_LIVE_MIGRATION_TEST,
+ 'root',
+ None
+ )
except:
return False
return True
@@ -169,8 +174,58 @@ class LiveMigrationTests(unittest.TestCase):
self.assertRaises(OperationFailed,
self.inst.vm_migrate,
'test_vm_migrate',
- KIMCHI_LIVE_MIGRATION_TEST,
- user='test_vm_migrate_fake_user')
+ 'this_is_a_fake_remote_host')
+
+ (a)mock.patch('wok.plugins.kimchi.model.vms.VMModel.'
+ '_get_remote_libvirt_conn')
+ def test_vm_migrate_fails_different_remote_hypervisor(
+ self, mock_get_remote_conn):
+
+ class MockRemoteConnObj(object):
+ def getType(self):
+ return 'another_hypervisor'
+
+ def close(self):
+ pass
+
+ mock_get_remote_conn.return_value = MockRemoteConnObj()
+
+ with RollbackContext() as rollback:
+ self.create_vm_test()
+ rollback.prependDefer(utils.rollback_wrapper,
self.inst.vm_delete,
+ u'test_vm_migrate')
+
+ self.assertRaises(OperationFailed,
+ self.inst.vm_migrate,
+ 'test_vm_migrate',
+ KIMCHI_LIVE_MIGRATION_TEST)
+
+ (a)mock.patch('wok.plugins.kimchi.model.vms.VMModel.'
+ '_get_remote_libvirt_conn')
+ def test_vm_migrate_fails_different_remote_arch(
+ self, mock_get_remote_conn):
+
+ class MockRemoteConnObj(object):
+ def getType(self):
+ return 'QEMU'
+
+ def getInfo(self):
+ return ['another_arch', 'QEMU']
+
+ def close(self):
+ pass
+
+ mock_get_remote_conn.return_value = MockRemoteConnObj()
+
+ with RollbackContext() as rollback:
+ self.create_vm_test()
+ rollback.prependDefer(utils.rollback_wrapper,
self.inst.vm_delete,
+ u'test_vm_migrate')
+
+ self.assertRaises(OperationFailed,
+ self.inst.vm_migrate,
+ 'test_vm_migrate',
+ KIMCHI_LIVE_MIGRATION_TEST)
def get_remote_conn(self):
remote_uri = 'qemu+ssh://%s@%s/system' % \
@@ -411,3 +466,23 @@ class LiveMigrationTests(unittest.TestCase):
remote_vm.undefine()
except Exception, e:
self.fail('Migration test failed: %s' % e.message)
+
+ (a)mock.patch('wok.plugins.kimchi.model.vms.VMModel.'
+ '_set_password_less_login')
+ (a)mock.patch('wok.plugins.kimchi.model.vms.VMModel.'
+ '_check_if_migrating_same_arch_hypervisor')
+ (a)mock.patch('wok.plugins.kimchi.model.vms.VMModel.'
+ '_check_ppc64_subcores_per_core')
+ def test_set_passwordless_login(self, mock_ppc64_subpercore,
+ mock_same_arch,
+ mock_password_less_login):
+ self.inst.vm_migration_pre_check(
+ 'this_is_a_fake_remote_host',
+ 'test_vm_migrate_fake_user',
+ 'fake_password'
+ )
+ mock_password_less_login.assert_called_once_with(
+ 'this_is_a_fake_remote_host',
+ 'test_vm_migrate_fake_user',
+ 'fake_password'
+ )