diff --git a/tempest/api/compute/admin/test_volume_swap.py b/tempest/api/compute/admin/test_volume_swap.py
index d3331bd..7ae20ce 100644
--- a/tempest/api/compute/admin/test_volume_swap.py
+++ b/tempest/api/compute/admin/test_volume_swap.py
@@ -31,14 +31,32 @@
         super(TestVolumeSwapBase, cls).setup_credentials()
 
     @classmethod
+    def setup_clients(cls):
+        super(TestVolumeSwapBase, cls).setup_clients()
+
+        cls.volume_type_client = cls.os_admin.volume_types_client_latest
+        cls.encryption_client = cls.os_admin.encryption_types_client_latest
+
+    @classmethod
     def skip_checks(cls):
         super(TestVolumeSwapBase, cls).skip_checks()
         if not CONF.compute_feature_enabled.swap_volume:
             raise cls.skipException("Swapping volumes is not supported.")
-        if CONF.compute_feature_enabled.attach_encrypted_volume:
-            raise cls.skipException(
-                'Volume swap is not available for OS configurations '
-                'with crypted volumes.')
+
+    @classmethod
+    def _check_default_volume_type(cls):
+        default_volume_type = cls.volume_type_client.\
+            show_default_volume_type()["volume_type"]["id"]
+        volume_encryption = cls.encryption_client.show_encryption_type(
+            default_volume_type)
+        if volume_encryption and volume_encryption.get("provider"):
+            raise cls.skipException("Not allowed to run this test with "
+                                    "encrypted volume")
+
+    @classmethod
+    def resource_setup(cls):
+        cls._check_default_volume_type()
+        super(TestVolumeSwapBase, cls).resource_setup()
 
     def wait_for_server_volume_swap(self, server_id, old_volume_id,
                                     new_volume_id):
