Add tempest test to live/cold migrate Windows OS's

Test:
  - WindowsServers10Test.test_live_migration
  - WindowsServers10Test.test_cold_migration
  - WindowsServers11Test.test_live_migration_with_vtpm_negative
  - WindowsServers11Test.test_cold_migration

Related-Prod: PRODX-37842
Change-Id: I31c755b94cde82b4d408a95ded8d26e30a17975d
diff --git a/tempest/api/compute/admin/test_create_server.py b/tempest/api/compute/admin/test_create_server.py
index f583c8f..5eed76a 100644
--- a/tempest/api/compute/admin/test_create_server.py
+++ b/tempest/api/compute/admin/test_create_server.py
@@ -22,6 +22,7 @@
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 from tempest.lib import decorators
+from tempest.lib import exceptions as lib_exc
 
 CONF = config.CONF
 
@@ -209,6 +210,55 @@
             validation_resources=validation_resources,
             wait_until='PINGABLE')
 
+    def _test_live_migration(self):
+        block_migration = (CONF.compute_feature_enabled.
+                           block_migration_for_live_migration)
+        disk_over_commit = False
+        validation_resources = self.get_class_validation_resources(
+            self.os_primary)
+        server_id = self.create_test_server(
+            image_id=self.image_id,
+            flavor=self.flavor_id,
+            validatable=True,
+            validation_resources=validation_resources,
+            wait_until='PINGABLE')['id']
+        source_host = self.get_host_for_server(server_id)
+        if not CONF.compute_feature_enabled.can_migrate_between_any_hosts:
+            # not to specify a host so that the scheduler will pick one
+            destination_host = None
+        else:
+            destination_host = self.get_host_other_than(server_id)
+        self.admin_servers_client.live_migrate_server(
+            server_id,
+            host=destination_host,
+            block_migration=block_migration,
+            disk_over_commit=disk_over_commit)
+        waiters.wait_for_server_status(self.client,
+                                       server_id, 'ACTIVE')
+        destination_host = self.get_host_for_server(server_id)
+        self.assertNotEqual(source_host, destination_host)
+
+    def _test_cold_migration(self):
+        # Run as admin to allow migrate tpm secret
+        validation_resources = self.get_class_validation_resources(
+            self.os_admin)
+        server_id = self.create_test_server(
+            clients=self.os_admin,
+            image_id=self.image_id,
+            flavor=self.flavor_id,
+            validatable=True,
+            validation_resources=validation_resources,
+            wait_until='PINGABLE')['id']
+        source_host = self.get_host_for_server(server_id)
+        self.admin_servers_client.migrate_server(server_id)
+        waiters.wait_for_server_status(self.admin_servers_client,
+                                       server_id, 'VERIFY_RESIZE')
+        self.admin_servers_client.confirm_resize_server(server_id)
+        waiters.wait_for_server_status(self.admin_servers_client,
+                                       server_id, 'ACTIVE')
+        destination_host = self.get_host_for_server(server_id)
+        self.assertNotEqual(source_host, destination_host)
+
 
 class WindowsServers10Test(WindowsServersBaseTest):
 
@@ -219,6 +269,20 @@
     def test_create_server(self):
         self._test_create_server()
 
+    @decorators.attr(type='multinode')
+    @decorators.idempotent_id('6c22fcb1-4c3e-4bf6-b8c7-c3e2322cf5ff')
+    @testtools.skipUnless(CONF.compute_feature_enabled.live_migration,
+                          'Live migration is not available.')
+    def test_live_migration(self):
+        self._test_live_migration()
+
+    @decorators.attr(type='multinode')
+    @decorators.idempotent_id('96d67c40-fd4d-4286-a3c7-880d9eb77a95')
+    @testtools.skipUnless(CONF.compute_feature_enabled.cold_migration,
+                          'Cold migration is not available.')
+    def test_cold_migration(self):
+        self._test_cold_migration()
+
 
 class WindowsServers11Test(WindowsServersBaseTest):
 
@@ -228,3 +292,18 @@
     @decorators.idempotent_id('1cff7fea-f251-4a05-a667-9b946913a3c5')
     def test_create_server(self):
         self._test_create_server()
+
+    @decorators.attr(type=['negative'])
+    @decorators.idempotent_id('9afd991e-0478-41ca-b5cf-bf32b10ae5a7')
+    @testtools.skipUnless(CONF.compute_feature_enabled.live_migration,
+                          'Live migration is not available.')
+    def test_live_migration_with_vtpm_negative(self):
+        """Test live migrating instance with vTPM should not be supported"""
+        self.assertRaises(lib_exc.BadRequest, self._test_live_migration)
+
+    @decorators.attr(type='multinode')
+    @decorators.idempotent_id('7da88453-cc6d-4fef-b893-b4ae8f40767d')
+    @testtools.skipUnless(CONF.compute_feature_enabled.cold_migration,
+                          'Cold migration is not available.')
+    def test_cold_migration(self):
+        self._test_cold_migration()