def test_parents_max_size_limit(self): parent_device1 = self._get_parent_device(size=Size("8 TiB")) free_device1 = self._get_free_device(parent=parent_device1, size=parent_device1.size) # simple case -- partition add_dialog = AddDialog(self.parent_window, parent_device1, free_device1, [("free", free_device1)], self.supported_filesystems, [], True) add_dialog.devices_combo.set_active_id("partition") # select "unformatted" just to be sure there is no filesystem size limit add_dialog.filesystems_combo.set_active_id("unformatted") # partition max size should me limited to disklabel max size limit limit = parent_device1.format.parted_disk.maxPartitionLength * parent_device1.format.sector_size self.assertEqual(add_dialog.size_area.main_chooser.max_size, limit) # more complicated case -- LVM with two parents parent_device2 = self._get_parent_device(size=Size("1 GiB")) free_device2 = self._get_free_device(parent=parent_device2, size=parent_device2.size) add_dialog = AddDialog(self.parent_window, parent_device1, free_device1, [("free", free_device1), ("free", free_device2)], self.supported_filesystems, [], True) add_dialog.devices_combo.set_active_id("lvm") # select "unformatted" just to be sure there is no filesystem size limit add_dialog.filesystems_combo.set_active_id("unformatted") # select second free space add_dialog.on_cell_toggled(None, 1) add_dialog.parents_store[1][2] = True # LVM limit should be disklabel limit (from first parent) + 1 GiB (from second parent) limit = free_device2.size + parent_device1.format.parted_disk.maxPartitionLength * parent_device1.format.sector_size self.assertEqual(add_dialog.size_area.main_chooser.max_size, limit)
def test_allowed_device_types(self): # disk with disklabel and enough free space, other disks available parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("free", free_device), ("free", self._get_free_device())], self.supported_filesystems, []) types = sorted([i[1] for i in add_dialog.devices_combo.get_model()]) self.assertTrue(sorted(["partition", "lvm", "btrfs volume", "mdraid"]) == types) self.assertTrue(add_dialog.devices_combo.get_sensitive()) # disk with disklabel and not enough free space, no other disks available parent_device = self._get_parent_device(size=Size("200 MiB")) free_device = self._get_free_device(size=parent_device.size, parent=parent_device) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("free", free_device)], self.supported_filesystems, []) types = sorted([i[1] for i in add_dialog.devices_combo.get_model()]) self.assertTrue(sorted(["partition", "lvm"]) == types) self.assertTrue(add_dialog.devices_combo.get_sensitive()) # lvmpv parent_device = self._get_parent_device(dtype="partition", ftype="lvmpv") parent_device.format.configure_mock(vg_name=None) free_device = parent_device add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("lvmpv", free_device)], self.supported_filesystems, []) types = sorted([i[1] for i in add_dialog.devices_combo.get_model()]) self.assertTrue(sorted(["lvmvg"]) == types) self.assertFalse(add_dialog.devices_combo.get_sensitive()) # lvmpv on disk parent_device = self._get_parent_device(dtype="disk", ftype="lvmpv") free_device = self._get_free_device(size=parent_device.size, parent=parent_device) parent_device.format.configure_mock(vg_name=None) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("lvmpv", free_device)], self.supported_filesystems, []) types = sorted([i[1] for i in add_dialog.devices_combo.get_model()]) self.assertTrue(sorted(["lvmvg"]) == types) self.assertFalse(add_dialog.devices_combo.get_sensitive())
def test_name_validity_check(self): parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("free", free_device)], self.supported_filesystems, []) add_dialog.devices_combo.set_active_id( "lvm") # select device type that has a name option # valid name name = "aaaaa" add_dialog.name_entry.set_text(name) add_dialog.validate_user_input() self.assertFalse( self.error_dialog.called) # passphrase specified --> no error self.error_dialog.reset_mock() # invalid name name = "?*#%@" add_dialog.name_entry.set_text(name) add_dialog.validate_user_input() self.error_dialog.assert_any_call( add_dialog, _("\"{0}\" is not a valid name.").format(name), True) self.error_dialog.reset_mock()
def test_fs_chooser(self): parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("free", free_device)], self.supported_filesystems, [], True) # with installer_mode=True # swap -- mountpoint entry shouldn't be visible, label entry should be visible add_dialog.filesystems_combo.set_active_id("swap") self.assertEqual(add_dialog.filesystems_combo.get_active_id(), "swap") self.assertFalse(add_dialog.mountpoint_entry.get_visible()) self.assertTrue(add_dialog.label_entry.get_visible()) # lvmpv -- both mountpoint and label entries shouldn't be visible add_dialog.filesystems_combo.set_active_id("lvmpv") self.assertEqual(add_dialog.filesystems_combo.get_active_id(), "lvmpv") self.assertFalse(add_dialog.mountpoint_entry.get_visible()) self.assertFalse(add_dialog.label_entry.get_visible()) # ext4 -- mountpoint and label entries should be visible add_dialog.filesystems_combo.set_active_id("ext4") self.assertEqual(add_dialog.filesystems_combo.get_active_id(), "ext4") self.assertTrue(add_dialog.mountpoint_entry.get_visible()) self.assertTrue(add_dialog.label_entry.get_visible())
def test_parents_selection(self): parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("free", free_device), ("free", self._get_free_device()), ("free", self._get_free_device())], self.supported_filesystems, []) # partition -- only one parent, shouldn't be allowed to deselect it add_dialog.devices_combo.set_active_id("partition") add_dialog.on_cell_toggled(None, 0) self.assertTrue(add_dialog.parents_store[0][2]) self.assertTrue(add_dialog.parents_store[0][3]) # lvm -- allow secting other parents add_dialog.devices_combo.set_active_id("lvm") # it is not possible to the emmit toggle programmatically, we need to call the signal handler manually and # set the value in the TreeStore to True add_dialog.on_cell_toggled(None, 1) add_dialog.parents_store[1][2] = True self.assertTrue(add_dialog.parents_store[1][3]) # deselect second parent add_dialog.parents_store[1][2] = False add_dialog.on_cell_toggled(None, 1) self.assertFalse(add_dialog.parents_store[1][3])
def test_mountpoint_validity_check(self): parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("free", free_device)], self.supported_filesystems, ["/root"], True) # reset mock self.error_dialog.reset_mock() # valid mountpoint add_dialog.mountpoint_entry.set_text("/home") add_dialog.validate_user_input() self.assertFalse(self.error_dialog.called) # passphrase specified --> no error self.error_dialog.reset_mock() # invalid mountpoint mnt = "home" add_dialog.mountpoint_entry.set_text(mnt) add_dialog.validate_user_input() self.error_dialog.assert_any_call(add_dialog, _("\"{0}\" is not a valid mountpoint.").format(mnt), False) self.error_dialog.reset_mock() # duplicate mountpoint mnt = "/root" add_dialog.mountpoint_entry.set_text(mnt) add_dialog.validate_user_input() self.error_dialog.assert_any_call(add_dialog, _("Selected mountpoint \"{0}\" is already set for another device.").format(mnt), False) self.error_dialog.reset_mock()
def test_lvm_selection(self): parent_device1 = self._get_parent_device() parent_device2 = self._get_parent_device() free_device1 = self._get_free_device(parent=parent_device1) free_device2 = self._get_free_device(parent=parent_device2) add_dialog = AddDialog(self.parent_window, parent_device1, free_device1, [("free", free_device1), ("free", free_device2)], self.supported_filesystems, [], True) name = "name" size1 = Size("4 GiB") size2 = Size("6 GiB") add_dialog.devices_combo.set_active_id("lvm") # select second free space add_dialog.on_cell_toggled(None, 1) add_dialog.parents_store[1][2] = True add_dialog.size_area.main_chooser.selected_size = size1 + size2 add_dialog.name_entry.set_text(name) selection = add_dialog.get_selection() self.assertEqual(selection.device_type, "lvm") self.assertEqual(selection.size_selection.total_size, size1 + size2) self.assertEqual(selection.filesystem, None) self.assertEqual(selection.name, name) self.assertTrue(selection.label in (None, "")) self.assertTrue(selection.mountpoint in (None, "")) self.assertFalse(selection.encrypt) self.assertTrue(selection.passphrase in (None, "")) self.assertIsNone(selection.raid_level)
def test_btrfs_selection(self): parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device, size=Size("8 GiB"), is_free_region=False, is_empty_disk=True) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("free", free_device)], self.supported_filesystems, []) add_dialog.devices_combo.set_active_id("btrfs volume") name = "name" add_dialog.name_entry.set_text(name) selection = add_dialog.get_selection() self.assertEqual(selection.device_type, "btrfs volume") self.assertEqual(selection.size_selection.total_size, free_device.size) self.assertTrue(selection.filesystem in (None, "")) self.assertEqual(selection.name, name) self.assertTrue(selection.label in (None, "")) self.assertTrue(selection.mountpoint in (None, "")) self.assertFalse(selection.encrypt) self.assertTrue(selection.passphrase in (None, "")) self.assertEqual(selection.size_selection.parents[0].parent_device, parent_device) self.assertEqual(selection.size_selection.parents[0].selected_size, free_device.size) self.assertEqual(selection.raid_level, "single")
def test_label_validity_check(self): parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("free", free_device)], self.supported_filesystems, []) add_dialog.devices_combo.set_active_id( "partition") # select device type that has a label option add_dialog.filesystems_combo.set_active_id("ext4") # valid label for ext4 label = "a" * 5 add_dialog.label_entry.set_text(label) add_dialog.validate_user_input() self.assertFalse( self.error_dialog.called) # passphrase specified --> no error self.error_dialog.reset_mock() # invalid label for ext4 label = "a" * 50 add_dialog.label_entry.set_text(label) add_dialog.validate_user_input() self.error_dialog.assert_any_call( add_dialog, _("\"{0}\" is not a valid label.").format(label), True) self.error_dialog.reset_mock()
def test_encrypt_validity_check(self): parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("free", free_device)], []) # passphrases specified and matches add_dialog.encrypt_check.set_active(True) add_dialog.pass_entry.set_text("aaaaa") add_dialog.pass2_entry.set_text("aaaaa") add_dialog.validate_user_input() self.assertFalse(self.error_dialog.called) # passphrases specified and matches --> no error self.error_dialog.reset_mock() # passphrases specified but don't matche add_dialog.encrypt_check.set_active(True) add_dialog.pass_entry.set_text("aaaaa") add_dialog.pass2_entry.set_text("bbbb") add_dialog.validate_user_input() self.error_dialog.assert_any_call(add_dialog, _("Provided passphrases do not match."), True) self.error_dialog.reset_mock() # no passphrase specified add_dialog.encrypt_check.set_active(True) add_dialog.pass_entry.set_text("") add_dialog.validate_user_input() self.error_dialog.assert_any_call(add_dialog, _("Passphrase not specified."), True) self.error_dialog.reset_mock()
def test_md_selection(self): parent_device1 = self._get_parent_device() parent_device2 = self._get_parent_device() free_device1 = self._get_free_device(parent=parent_device1) free_device2 = self._get_free_device(parent=parent_device2) add_dialog = AddDialog(self.parent_window, parent_device1, free_device1, [("free", free_device1), ("free", free_device2)], self.supported_filesystems, [], True) fstype = next((fs.type for fs in supported_filesystems()), None) if fstype is None: self.skipTest("No supported filesystems found.") raidtype = "raid0" size = Size("4 GiB") name = "name" add_dialog.devices_combo.set_active_id("mdraid") # select second free space add_dialog.on_cell_toggled(None, 1) add_dialog.parents_store[1][2] = True add_dialog._raid_chooser._combobox_raid.set_active_id(raidtype) # raid 0 --> second size area should be updated add_dialog.size_area._parent_area.choosers[0].selected_size = size add_dialog.name_entry.set_text(name) add_dialog.md_type_combo.set_active_id("partition") add_dialog.filesystems_combo.set_active_id(fstype) selection = add_dialog.get_selection() self.assertEqual(selection.device_type, "mdraid") self.assertEqual(selection.size_selection.total_size, 2 * size) self.assertEqual(selection.filesystem, fstype) self.assertEqual(selection.name, name) self.assertTrue(selection.label in (None, "")) self.assertTrue(selection.mountpoint in (None, "")) self.assertFalse(selection.encrypt) self.assertTrue(selection.passphrase in (None, "")) self.assertEqual(selection.size_selection.parents[0].parent_device, parent_device1) self.assertEqual(selection.size_selection.parents[0].selected_size, size) self.assertEqual(selection.size_selection.parents[1].parent_device, parent_device2) self.assertEqual(selection.size_selection.parents[1].selected_size, size) self.assertEqual(selection.raid_level, raidtype)
def test_md_type(self): parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [], [("free", free_device), ("free", self._get_free_device())], []) add_dialog.devices_combo.set_active_id("mdraid") # select partition --> filesystem chooser should be visible add_dialog.md_type_combo.set_active_id("partition") self.assertTrue(add_dialog.filesystems_combo.get_visible())
def test_btrfs_parents(self): parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("free", free_device), ("free", self._get_free_device(size=Size("200 MiB"))), ("free", self._get_free_device(size=Size("4 GiB")))], []) add_dialog.devices_combo.set_active_id("btrfs volume") # lvm allows multiple parents -- make sure we have all available (= larger than 256 MiB) and the right one is selected self.assertEqual(len(add_dialog.parents_store), 2) # third device is smaller than min size for btrfs self.assertEqual(add_dialog.parents_store[0][0], parent_device) self.assertEqual(add_dialog.parents_store[0][1], free_device) self.assertTrue(add_dialog.parents_store[0][2]) self.assertFalse(add_dialog.parents_store[1][2]) # other free device shouldn't be selected
def test_parents_update(self): parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("free", free_device), ("free", self._get_free_device()), ("free", self._get_free_device())], []) # partition -- only one parent add_dialog.devices_combo.set_active_id("partition") self.assertEqual(len(add_dialog.parents_store), 1) # lvm -- all available parents add_dialog.devices_combo.set_active_id("lvm") self.assertEqual(len(add_dialog.parents_store), 3)
def test_lvm_parents(self): parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("free", free_device), ("free", self._get_free_device(size=Size("4 GiB"))), ("free", self._get_free_device(size=Size("4 GiB")))], []) add_dialog.devices_combo.set_active_id("lvm") # lvm allows multiple parents -- make sure we have all available and the right one is selected self.assertEqual(len(add_dialog.parents_store), 3) self.assertEqual(add_dialog.parents_store[0][0], parent_device) self.assertEqual(add_dialog.parents_store[0][1], free_device) self.assertTrue(add_dialog.parents_store[0][2]) self.assertFalse(add_dialog.parents_store[1][2]) # other two free devices shouldn't be selected self.assertFalse(add_dialog.parents_store[2][2])
def test_lvmlv_parents(self): parent_device = self._get_parent_device(dtype="lvmvg", ftype=None) free_device = self._get_free_device(parent=parent_device) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("free", free_device), ("free", self._get_free_device()), ("free", self._get_free_device())], []) add_dialog.devices_combo.set_active_id("lvmlv") # lvmlv allows only one parent -- make sure we have the right one and it is selected self.assertEqual(len(add_dialog.parents_store), 1) self.assertEqual(add_dialog.parents_store[0][0], parent_device) self.assertEqual(add_dialog.parents_store[0][1], free_device) self.assertTrue(add_dialog.parents_store[0][2]) self.assertTrue(add_dialog.parents_store[0][3]) self.assertEqual(add_dialog.parents_store[0][5], "lvmvg")
def test_mdraid_widgets(self): parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("free", free_device), ("free", self._get_free_device())], []) add_dialog.devices_combo.set_active_id("mdraid") self.assertEqual(add_dialog.selected_type, "mdraid") self.assertTrue(add_dialog.filesystems_combo.get_visible()) self.assertTrue(add_dialog.name_entry.get_visible()) self.assertTrue(add_dialog.encrypt_check.get_visible()) self.assertIsNotNone(add_dialog.advanced) self.assertFalse(add_dialog.md_type_combo.get_visible())
def test_partition_parents(self): parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("free", free_device), ("free", self._get_free_device()), ("free", self._get_free_device())], self.supported_filesystems, []) add_dialog.devices_combo.set_active_id("partition") # partition allows only one parent -- make sure we have the right one and it is selected self.assertEqual(len(add_dialog.parents_store), 1) self.assertEqual(add_dialog.parents_store[0][0], parent_device) self.assertEqual(add_dialog.parents_store[0][1], free_device) self.assertTrue(add_dialog.parents_store[0][2]) self.assertTrue(add_dialog.parents_store[0][3]) self.assertEqual(add_dialog.parents_store[0][5], "disk")
def test_btrfsvolume_widgets(self): parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("free", free_device)], self.supported_filesystems, []) add_dialog.devices_combo.set_active_id("btrfs volume") self.assertEqual(add_dialog.selected_type, "btrfs volume") self.assertFalse(add_dialog.filesystems_combo.get_visible()) self.assertTrue(add_dialog.name_entry.get_visible()) self.assertTrue(add_dialog._encryption_chooser._encrypt_check.get_visible()) self.assertTrue(add_dialog._raid_chooser.get_visible()) self.assertIsNone(add_dialog.advanced) self.assertFalse(add_dialog.md_type_combo.get_visible()) self.assertTrue(add_dialog.size_area.get_sensitive())
def test_passphrase_entry(self): parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [], [("free", free_device)], []) add_dialog.encrypt_check.set_active(True) # passphrases don't match -> error icon add_dialog.pass_entry.set_text("aa") add_dialog.pass2_entry.set_text("bb") self.assertEqual(add_dialog.pass2_entry.get_icon_name(Gtk.EntryIconPosition.SECONDARY), "dialog-error-symbolic.symbolic") # passphrases match -> ok icon add_dialog.pass2_entry.set_text("aa") self.assertEqual(add_dialog.pass2_entry.get_icon_name(Gtk.EntryIconPosition.SECONDARY), "emblem-ok-symbolic.symbolic")
def test_raid_type(self): parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device, size=Size("8 GiB")) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("free", free_device), ("free", self._get_free_device(size=Size("4 GiB")))], []) add_dialog.devices_combo.set_active_id("mdraid") self.assertEqual(len(add_dialog.parents_store), 2) # select second parent --> raid combo should be visible add_dialog.on_cell_toggled(None, 1) add_dialog.parents_store[1][2] = True self.assertTrue(add_dialog._raid_chooser.get_visible()) self.assertEqual(add_dialog._raid_chooser.selected_level.name, "raid0") # linear is default value for mdraid # raid0 type is selected --> we should have 2 size areas, both with max size 4 GiB (smaller free space size) self.assertEqual(add_dialog.size_area.max_size, Size("8 GiB"))
def test_encrypt_check(self): parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [], [("free", free_device)], []) min_size = add_dialog.size_area.min_size # device minimal size before update # check the encrypt check, passphrase entries should be visible and 2 MiB should be added to device min size add_dialog.encrypt_check.set_active(True) self.assertTrue(add_dialog.pass_entry.get_visible()) self.assertTrue(add_dialog.pass2_entry.get_visible()) self.assertEqual(add_dialog.size_area.min_size, min_size + Size("2 MiB")) # check the encrypt check, passphrase entries should be hidden and min size should be back to original min size add_dialog.encrypt_check.set_active(False) self.assertFalse(add_dialog.pass_entry.get_visible()) self.assertFalse(add_dialog.pass2_entry.get_visible()) self.assertEqual(add_dialog.size_area.min_size, min_size)
def test_fs_chooser_biosboot(self): parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device) _filesystems = self.supported_filesystems[:] _filesystems.append(formats.biosboot.BIOSBoot()) _filesystems.append(formats.fs.BTRFS()) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("free", free_device)], _filesystems, [], True) # with installer_mode=True # switch from biosboot to btrfs and ext4 (rhbz#1881472) add_dialog.filesystems_combo.set_active_id("biosboot") self.assertEqual(add_dialog.filesystems_combo.get_active_id(), "biosboot") add_dialog.filesystems_combo.set_active_id("btrfs") self.assertEqual(add_dialog.filesystems_combo.get_active_id(), "btrfs") add_dialog.filesystems_combo.set_active_id("biosboot") self.assertEqual(add_dialog.filesystems_combo.get_active_id(), "biosboot") add_dialog.filesystems_combo.set_active_id("ext4") self.assertEqual(add_dialog.filesystems_combo.get_active_id(), "ext4")
def test_partition_selection(self): parent_device = self._get_parent_device() free_device = self._get_free_device(parent=parent_device) add_dialog = AddDialog(self.parent_window, parent_device, free_device, [("free", free_device)], self.supported_filesystems, [], True) fstype = next((fs.type for fs in supported_filesystems()), None) if fstype is None: self.skipTest("No supported filesystems found.") label = "label" size = Size("1 GiB") mountpoint = "/home" password = "******" add_dialog.devices_combo.set_active_id("partition") add_dialog.filesystems_combo.set_active_id(fstype) add_dialog.size_area.main_chooser.selected_size = size add_dialog.label_entry.set_text(label) add_dialog.mountpoint_entry.set_text(mountpoint) add_dialog._encryption_chooser.encrypt = True add_dialog._encryption_chooser._passphrase_entry.set_text(password) selection = add_dialog.get_selection() self.assertEqual(selection.device_type, "partition") self.assertEqual(selection.size_selection.total_size, size) self.assertEqual(selection.filesystem, fstype) self.assertTrue(selection.name in (None, "")) self.assertEqual(selection.label, label) self.assertEqual(selection.mountpoint, mountpoint) self.assertTrue(selection.encrypt) self.assertEqual(selection.passphrase, password) self.assertEqual(selection.size_selection.parents[0].parent_device, parent_device) self.assertEqual(selection.size_selection.parents[0].selected_size, size) self.assertIsNone(selection.raid_level)