#!/usr/bin/python3 -cimport os, sys; os.execv(os.path.dirname(sys.argv[1]) + "/../common/pywrap", sys.argv)## Copyright (C) 2015 Red Hat, Inc.# SPDX-License-Identifier: LGPL-2.1-or-laterimport storagelibimport testlib@testlib.nondestructiveclass TestStorageBasic(storagelib.StorageCase):def testBasic(self):m = self.machineb = self.browserself.login_and_go("/storage", superuser=False)self.allow_browser_errors("error: findmnt.*")create_dropdown = self.dropdown_toggle(self.card_header("Storage"))b.wait_visible(self.card("Storage"))b.wait_not_present(create_dropdown)b.relogin('/storage', superuser=True)b.wait_visible(create_dropdown)# Add a disk, partition it, format it, and finally remove it.disk = self.add_ram_disk()self.click_card_row("Storage", name=disk)b.wait_visible(self.card("Solid State Drive"))b.wait_text(self.card_desc("Solid State Drive", "Vendor"), "Linux")b.wait_in_text(self.card_desc("Solid State Drive", "Capacity"), "50 MiB")self.assertEqual(self.inode(b.text(self.card_desc("Solid State Drive", "Device file"))), self.inode(disk))m.execute(f'parted -s {disk} mktable gpt')m.execute(f'parted -s {disk} mkpart primary ext2 1M 8M')b.wait_text(self.card_row_col("GPT partitions", 1, 2), "Unformatted data")# create filesystem on the first partition# HACK - the block device might disappear briefly when udevd does its BLKRRPART.testlib.wait(lambda: m.execute(f'mke2fs {disk}1'), delay=1, tries=5)b.wait_text(self.card_row_col("GPT partitions", 1, 2), "ext2 filesystem")self.click_card_row("GPT partitions", 1)b.wait_text(self.card_desc("Partition", "Name"), "primary")b.assert_pixels(self.card("Partition"), "partition",mock={"[data-test-desc-title='UUID'] [data-test-value='true']": "a12978a1-5d6e-f24f-93de-11789977acde"})b.assert_pixels(self.card("ext2 filesystem"), "filesystem")b.go("#/")b.wait_visible(self.card("Storage"))b.wait_visible(self.card_row("Storage", name=disk))# Create a subvolume with a really long name to show# truncation in the pixel test.if b.pixels_label:long = "really-" * 15 + "long-name-that-will-be-truncated"m.execute(f"btrfs subvol create /{long}")self.addCleanup(m.execute, f"btrfs subvol delete /{long}")b.wait_visible(self.card_row("Storage", name=long))b.assert_pixels(self.card("Storage"), "overview",# Usage numbers are not stable and also cause# the table columns to shift. The usage bars# are not stable but are always the same size,# so it is good enough to ignore them.mock={".usage-text": "---"},ignore=[".usage-bar"])self.force_remove_disk(disk)b.wait_not_present(self.card_row("Storage", name=disk))if __name__ == '__main__':testlib.test_main()