diff --git a/testlib/dbus.py b/testlib/dbus.py index 40a07f5..3a96adc 100644 --- a/testlib/dbus.py +++ b/testlib/dbus.py @@ -282,6 +282,20 @@ def pool_uuid(pool_path): return iface.Get(StratisDbus._POOL_IFACE, "Uuid", timeout=StratisDbus._TIMEOUT) + @staticmethod + def pool_encrypted(pool_path): + """ + Find a pool Encrypted value given an object path. + """ + iface = dbus.Interface( + StratisDbus._BUS.get_object(StratisDbus._BUS_NAME, pool_path), + dbus.PROPERTIES_IFACE, + ) + + return iface.Get( + StratisDbus._POOL_IFACE, "Encrypted", timeout=StratisDbus._TIMEOUT + ) + @staticmethod def pool_create( pool_name, diff --git a/testlib/infra.py b/testlib/infra.py index fe5d4bd..e4d0493 100644 --- a/testlib/infra.py +++ b/testlib/infra.py @@ -240,6 +240,17 @@ def _check_thin_meta_allocations(self, metadata): "total size of thin meta spare device.", ) + def _check_encryption_information_consistency(self, pool_object_path, metadata): + """ + Check whether D-Bus and metadata agree about encryption state of pool. + """ + encrypted = bool(StratisDbus.pool_encrypted(pool_object_path)) + + if encrypted: + self.assertIn("encrypted", metadata["features"]) + else: + self.assertNotIn("encrypted", metadata["features"]) + def run_check(self, stop_time): """ Run the check. @@ -270,6 +281,7 @@ def run_check(self, stop_time): self._check_thin_meta_allocations(written) + self._check_encryption_information_consistency(object_path, written) else: current_message = ( "" if current_return_code == _OK else current_message