diff --git a/stratis_cli_cert.py b/stratis_cli_cert.py index c9bb9a4..61e8320 100644 --- a/stratis_cli_cert.py +++ b/stratis_cli_cert.py @@ -24,7 +24,13 @@ # isort: LOCAL from testlib.dbus import StratisDbus, fs_n, p_n -from testlib.infra import DbusMonitor, KernelKey, StratisdSystemdStart, SymlinkMonitor +from testlib.infra import ( + DbusMonitor, + KernelKey, + StratisdSystemdStart, + SymlinkMonitor, + SysfsMonitor, +) from testlib.utils import ( RandomKeyTmpFile, create_relative_device_path, @@ -182,6 +188,8 @@ def tearDown(self): :return: None """ + SysfsMonitor.tearDown(self) + SymlinkMonitor.tearDown(self) DbusMonitor.tearDown(self) @@ -562,6 +570,54 @@ def test_pool_init_cache_add_data(self): True, ) + @skip(_skip_condition(3)) + def test_pool_add_data_init_cache(self): + """ + Test adding data for a pool, then initializing the cache. + """ + + pool_name = make_test_pool(StratisCliCertify.DISKS[0:1]) + filesystem_name = fs_n() + + self._unittest_command( + [ + _STRATIS_CLI, + "filesystem", + "create", + pool_name, + filesystem_name, + ], + 0, + True, + True, + ) + + self._unittest_command( + [ + _STRATIS_CLI, + "pool", + "add-data", + pool_name, + StratisCliCertify.DISKS[1], + ], + 0, + True, + True, + ) + + self._unittest_command( + [ + _STRATIS_CLI, + "pool", + "init-cache", + pool_name, + StratisCliCertify.DISKS[2], + ], + 0, + True, + True, + ) + @skip(_skip_condition(1)) def test_pool_stop_started(self): """ @@ -1103,6 +1159,10 @@ def main(): help="disks to use, a minimum of 3 in order to run every test", ) + argument_parser.add_argument( + "--verify-sysfs", help="Verify /sys/class/block files", action="store_true" + ) + argument_parser.add_argument( "--monitor-dbus", help="Monitor D-Bus", action="store_true" ) @@ -1125,6 +1185,7 @@ def main(): parsed_args, unittest_args = argument_parser.parse_known_args() StratisCliCertify.DISKS = parsed_args.DISKS + SysfsMonitor.verify_sysfs = parsed_args.verify_sysfs DbusMonitor.monitor_dbus = parsed_args.monitor_dbus SymlinkMonitor.verify_devices = parsed_args.verify_devices StratisCertify.maxDiff = None diff --git a/testlib/infra.py b/testlib/infra.py index 9d17eb6..1166807 100644 --- a/testlib/infra.py +++ b/testlib/infra.py @@ -169,6 +169,42 @@ def setUp(self): exec_command(["udevadm", "settle"]) +class SysfsMonitor(unittest.TestCase): + """ + Manage verification of sysfs files for devices. + """ + + def tearDown(self): + if SysfsMonitor.verify_sysfs: # pylint: disable=no-member + dev_mapper = "/dev/mapper" + dm_devices = { + os.path.basename( + os.path.realpath(os.path.join(dev_mapper, dmdev)) + ): dmdev + for dmdev in os.listdir(dev_mapper) + } + + try: + misaligned_devices = [] + for dev in os.listdir("/sys/class/block"): + if fnmatch.fnmatch(dev, "dm-*"): + dev_sysfspath = os.path.join( + "/sys/class/block", dev, "alignment_offset" + ) + with open(dev_sysfspath, "r", encoding="utf-8") as dev_sysfs: + dev_align = dev_sysfs.read().rstrip() + if int(dev_align) != 0: + misaligned_devices.append( + f"Stratis Name: {dm_devices[dev]}, " + f" DM name: {dev}, " + f" Alignment offset: {dev_align}" + ) + + self.assertEqual(misaligned_devices, []) + except FileNotFoundError: + pass + + class SymlinkMonitor(unittest.TestCase): """ Manage verification of device symlinks.