diff --git a/tempest/api/compute/admin/test_migrations.py b/tempest/api/compute/admin/test_migrations.py
index a626ebb..7d5f5eb 100644
--- a/tempest/api/compute/admin/test_migrations.py
+++ b/tempest/api/compute/admin/test_migrations.py
@@ -98,12 +98,13 @@
         server = self.servers_client.show_server(server['id'])['server']
         self.assertEqual(flavor['id'], server['flavor']['id'])
 
-    def _test_cold_migrate_server(self, revert=False):
+    def _test_cold_migrate_server(self, revert=False, server=None):
         if CONF.compute.min_compute_nodes < 2:
             msg = "Less than 2 compute nodes, skipping multinode tests."
             raise self.skipException(msg)
 
-        server = self.create_test_server(wait_until="ACTIVE")
+        if server is None:
+            server = self.create_test_server(wait_until="ACTIVE")
         src_host = self.admin_servers_client.show_server(
             server['id'])['server']['OS-EXT-SRV-ATTR:host']
 
@@ -131,6 +132,33 @@
     def test_cold_migration(self):
         self._test_cold_migrate_server(revert=False)
 
+    def _create_sriov_server(self):
+        network = self.get_tenant_network()
+        port_params = {
+            'binding:vnic_type': 'direct',
+            'name': 'tempest-sriov-port-%s' % data_utils.rand_uuid(),
+            'network_id': network['id']
+        }
+        ports_client = self.os_primary.ports_client
+        port = ports_client.create_port(**port_params)['port']
+        self.addCleanup(ports_client.delete_port, port['id'])
+
+        self.create_test_server(
+            wait_until="ACTIVE", networks=[{'port': port['id']}])
+
+    @decorators.idempotent_id('159ac313-2838-405c-9c43-65bd72f3810b')
+    @testtools.skipUnless(CONF.compute_feature_enabled.sriov_cold_migration,
+                          'SR-IOV cold migration not available.')
+    def test_sriov_cold_migration(self):
+        self._test_cold_migrate_server(server=self._create_sriov_server())
+
+    @decorators.idempotent_id('38893be5-3a6d-4222-a315-608e6e40ae6a')
+    @testtools.skipUnless(CONF.compute_feature_enabled.sriov_cold_migration,
+                          'SR-IOV cold migration not available.')
+    def test_revert_sriov_cold_migration(self):
+        self._test_cold_migrate_server(
+            server=self._create_sriov_server(), revert=True)
+
     @decorators.idempotent_id('caa1aa8b-f4ef-4374-be0d-95f001c2ac2d')
     @testtools.skipUnless(CONF.compute_feature_enabled.cold_migration,
                           'Cold migration not available.')
diff --git a/tempest/config.py b/tempest/config.py
index b14d4fd..6f609f1 100644
--- a/tempest/config.py
+++ b/tempest/config.py
@@ -391,6 +391,10 @@
     cfg.BoolOpt('cold_migration',
                 default=True,
                 help="Does the test environment support cold migration?"),
+    cfg.BoolOpt('sriov_cold_migration',
+                default=False,
+                help="Does the test environment "
+                     "support SR-IOV cold migration?"),
     cfg.BoolOpt('live_migration',
                 default=True,
                 help="Does the test environment support live migration?"),
