diff --git a/tempest/api/compute/admin/test_create_server.py b/tempest/api/compute/admin/test_create_server.py
index 293e284..c5078ea 100644
--- a/tempest/api/compute/admin/test_create_server.py
+++ b/tempest/api/compute/admin/test_create_server.py
@@ -136,3 +136,97 @@
             servers_client=self.client)
         disks_num_eph = len(linux_client.get_disks().split('\n'))
         self.assertEqual(disks_num + 1, disks_num_eph)
+
+
+class ServersWithFlavorSwapResizeTest(base.BaseV2ComputeAdminTest):
+    """Test resizing flavor swap size"""
+
+    @classmethod
+    def setup_credentials(cls):
+        cls.prepare_instance_network()
+        super(ServersWithFlavorSwapResizeTest, cls).setup_credentials()
+
+    @classmethod
+    def setup_clients(cls):
+        super(ServersWithFlavorSwapResizeTest, cls).setup_clients()
+        cls.client = cls.servers_client
+
+    def _create_server_with_swap(self, swap=0):
+        admin_pass = self.image_ssh_password
+        validation_resources = self.get_test_validation_resources(
+            self.os_primary)
+
+        flavor_id = self.create_flavor(
+            ram=1024, vcpus=1, disk=1, swap=swap)['id']
+
+        server = self.create_test_server(
+            validatable=True,
+            validation_resources=validation_resources,
+            wait_until='ACTIVE',
+            adminPass=admin_pass,
+            flavor=flavor_id)
+
+        self.addCleanup(waiters.wait_for_server_termination,
+                        self.servers_client, server['id'])
+        self.addCleanup(test_utils.call_and_ignore_notfound_exc,
+                        self.servers_client.delete_server,
+                        server['id'])
+
+        server = self.client.show_server(server['id'])['server']
+
+        ssh_client = self.get_ssh_client(
+            server, validation_resources, admin_pass)
+        return server, ssh_client
+
+    def _resize_server_with_new_swap(self, server, swap=0):
+        flavor_id = self.create_flavor(
+            ram=1024, vcpus=1, disk=1, swap=swap)['id']
+        self.resize_server(server['id'], flavor_id)
+
+    @decorators.idempotent_id('b2c7bcfc-bb5b-4e22-b517-c7f686b80211')
+    def test_flavor_swap_0_to_1024(self):
+        server, ssh_client = self._create_server_with_swap(swap=0)
+        swap_devs = len(ssh_client.get_swap_devs())
+
+        self.assertEqual(swap_devs, 0)
+
+        self._resize_server_with_new_swap(server, swap=1024)
+        swap_devs = len(ssh_client.get_swap_devs())
+
+        self.assertEqual(swap_devs, 1)
+
+        self.reboot_server(server['id'], 'hard')
+        swap_devs = len(ssh_client.get_swap_devs())
+        self.assertEqual(swap_devs, 1)
+
+    @decorators.idempotent_id('b2c7bcfc-bb5b-4e22-b517-c7f686b80212')
+    def test_flavor_swap_2048_to_1024(self):
+        server, ssh_client = self._create_server_with_swap(swap=2048)
+        swap_devs = len(ssh_client.get_swap_devs())
+
+        self.assertEqual(swap_devs, 1)
+
+        self._resize_server_with_new_swap(server, swap=1024)
+        swap_devs = len(ssh_client.get_swap_devs())
+
+        self.assertEqual(swap_devs, 1)
+
+        self.reboot_server(server['id'], 'hard')
+        swap_devs = len(ssh_client.get_swap_devs())
+        self.assertEqual(swap_devs, 1)
+
+    @decorators.idempotent_id('b2c7bcfc-bb5b-4e22-b517-c7f686b80213')
+    def test_flavor_swap_1024_to_0(self):
+        server, ssh_client = self._create_server_with_swap(swap=1024)
+        swap_devs = len(ssh_client.get_swap_devs())
+
+        self.assertEqual(swap_devs, 1)
+
+        self._resize_server_with_new_swap(server, swap=0)
+        swap_devs = len(ssh_client.get_swap_devs())
+
+        self.assertEqual(swap_devs, 0)
+
+        self.reboot_server(server['id'], 'hard')
+        swap_devs = len(ssh_client.get_swap_devs())
+        self.assertEqual(swap_devs, 0)
diff --git a/tempest/api/compute/base.py b/tempest/api/compute/base.py
index b974b52..bf56818 100644
--- a/tempest/api/compute/base.py
+++ b/tempest/api/compute/base.py
@@ -18,6 +18,7 @@
 from oslo_log import log as logging
 
 from tempest.common import compute
+from tempest.common.utils.linux import remote_client
 from tempest.common import waiters
 from tempest import config
 from tempest import exceptions
@@ -732,3 +733,12 @@
         for target_host in hosts:
             if source_host != target_host:
                 return target_host
+
+    def get_ssh_client(self, server, validation_resources, admin_pass):
+        return remote_client.RemoteClient(
+            self.get_server_ip(server, validation_resources),
+            self.ssh_user,
+            admin_pass,
+            validation_resources['keypair']['private_key'],
+            server=server,
+            servers_client=self.client)
diff --git a/tempest/common/utils/linux/remote_client.py b/tempest/common/utils/linux/remote_client.py
index 79cc09c..a84f139 100644
--- a/tempest/common/utils/linux/remote_client.py
+++ b/tempest/common/utils/linux/remote_client.py
@@ -244,3 +244,9 @@
         """Wrapper for tcp connectivity checks."""
         kwargs.pop('nic', None)
         return self.nc_host(host, **kwargs)
+
+    def get_swap_devs(self):
+        cmd = 'blkid'
+        data = self.exec_command(cmd)
+        devs = [dev for dev in data.splitlines() if 'TYPE="swap"' in dev]
+        return devs
