Merge "Adds tests for resize server for swap"
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