def test_edit_boot_partition(self): form_data = { 'size': "256M", } model, disk = make_model_and_disk() partition = model.add_partition(disk, 512 * (2**20), "boot") fs = model.add_filesystem(partition, "fat32") model.add_mount(fs, '/boot/efi') view, stretchy = make_partition_view(model, disk, partition) self.assertFalse(stretchy.form.fstype.enabled) self.assertEqual(stretchy.form.fstype.value, "fat32") self.assertFalse(stretchy.form.mount.enabled) self.assertEqual(stretchy.form.mount.value, "/boot/efi") view_helpers.enter_data(stretchy.form, form_data) view_helpers.click(stretchy.form.done_btn.base_widget) expected_data = { 'size': dehumanize_size(form_data['size']), 'fstype': "fat32", 'mount': '/boot/efi', 'use_swap': False, } view.controller.partition_disk_handler.assert_called_once_with( stretchy.disk, stretchy.partition, expected_data)
def test_create_vg_encrypted(self): model, disk = make_model_and_disk() part1 = model.add_partition(disk, 10 * (2**30)) part2 = model.add_partition(disk, 10 * (2**30)) view, stretchy = make_view(model) form_data = { 'name': 'vg1', 'devices': { part1: 'active', part2: 'active' }, 'encrypt': True, 'password': '******', 'confirm_password': '******', } expected_data = { 'name': 'vg1', 'devices': {part1, part2}, 'encrypt': True, 'password': '******', } view_helpers.enter_data(stretchy.form, form_data) view_helpers.click(stretchy.form.done_btn.base_widget) view.controller.volgroup_handler.assert_called_once_with( None, expected_data)
def test_create_raid(self): model, disk = make_model_and_disk() part1 = model.add_partition(disk, 10 * (2**30)) part2 = model.add_partition(disk, 10 * (2**30)) part3 = model.add_partition(disk, 10 * (2**30)) view, stretchy = make_view(model) form_data = { 'name': 'md0', 'devices': { part1: 'active', part2: 'active', part3: 'spare' }, 'level': raidlevels_by_value[1], } expected_data = { 'name': 'md0', 'devices': {part1, part2}, 'spare_devices': {part3}, 'level': raidlevels_by_value[1], } view_helpers.enter_data(stretchy.form, form_data) view_helpers.click(stretchy.form.done_btn.base_widget) view.controller.raid_handler.assert_called_once_with( None, expected_data)
def test_click_done(self): # The ugliness of this test is probably an indication that the # view is doing too much... dev_info = create_test_instance(NetDevInfo, overrides={'static4.addresses': []}) view, stretchy = self.make_view(dev_info) valid_data = { 'subnet': '10.0.2.0/24', 'address': '10.0.2.15', 'gateway': '10.0.2.2', 'nameservers': '8.8.8.8, 1.1.1.1', 'searchdomains': '.custom, .zzz', } view_helpers.enter_data(stretchy.manual_form, valid_data) expected = StaticConfig(addresses=['10.0.2.15/24'], gateway='10.0.2.2', nameservers=['8.8.8.8', '1.1.1.1'], searchdomains=['.custom', '.zzz']) but = view_helpers.find_button_matching(view, "^Save$") view_helpers.click(but) view.controller.set_static_config.assert_called_once_with( stretchy.dev_info.name, 4, expected)
def test_done_enabled_for_valid_data(self): valid_data = { 'subnet': '10.0.2.0/24', 'address': '10.0.2.15', } _, stretchy = self.make_view() view_helpers.enter_data(stretchy.manual_form, valid_data) self.assertTrue(stretchy.manual_form.done_btn.enabled)
def test_click_done(self): view = self.make_view() view_helpers.enter_data(view.form, valid_data) CRYPTED = '<crypted>' view.model.encrypt_password.side_effect = lambda p: CRYPTED expected = valid_data.copy() expected['password'] = expected['confirm_password'] = CRYPTED done_btn = view_helpers.find_button_matching(view, "^Done$") view_helpers.click(done_btn) view.controller.create_user.assert_called_once_with(expected)
def test_create_partition(self): valid_data = { 'size': "1M", 'fstype': FilesystemModel.fs_by_name["ext4"], } view, stretchy = self.make_view() view_helpers.enter_data(stretchy.form, valid_data) view_helpers.click(stretchy.form.done_btn.base_widget) valid_data['mount'] = '/' valid_data['size'] = dehumanize_size(valid_data['size']) view.controller.partition_disk_handler.assert_called_once_with( stretchy.disk, None, valid_data)
def test_create_partition(self): valid_data = { 'size': "1M", 'fstype': "ext4", } model, disk = make_model_and_disk() view, stretchy = make_view(model, disk) view_helpers.enter_data(stretchy.form, valid_data) view_helpers.click(stretchy.form.done_btn.base_widget) valid_data['mount'] = '/' valid_data['size'] = dehumanize_size(valid_data['size']) view.controller.partition_disk_handler.assert_called_once_with( stretchy.disk, None, valid_data)
def test_click_done(self): view = self.make_view() CRYPTED = '<crypted>' with mock.patch('subiquity.ui.views.identity.crypt_password') as cp: cp.side_effect = lambda p: CRYPTED view_helpers.enter_data(view.form, valid_data) done_btn = view_helpers.find_button_matching(view, "^Done$") view_helpers.click(done_btn) expected = IdentityData(realname=valid_data['realname'], username=valid_data['username'], hostname=valid_data['hostname'], crypted_password=CRYPTED) view.controller.done.assert_called_once_with(expected)
def test_click_done(self): # The ugliness of this test is probably an indication that the # view is doing too much... view = self.make_view() view_helpers.enter_data(view.form, valid_data) expected = valid_data.copy() expected['nameservers'] = [expected['nameservers']] expected['searchdomains'] = [expected['searchdomains']] expected['network'] = expected.pop('subnet') but = view_helpers.find_button_matching(view, "^Save$") view_helpers.click(but) view.dev.remove_ip_networks_for_version.assert_called_once_with(4) view.dev.remove_nameservers.assert_called_once_with() view.dev.add_network.assert_called_once_with(4, expected)
def test_can_tab_to_done_when_valid(self): # Urwid doesn't distinguish very well between widgets that are # not currently selectable and widgets that can never be # selectable. The "button pile" of the identity view is # initially not selectable but becomes selectable when valid # data is entered. This test checks that urwid notices this :) # by simulating lots of presses of the tab key and checking if # the done button has been focused. view = self.make_view() view_helpers.enter_data(view.form, valid_data) for i in range(100): view_helpers.keypress(view, 'tab', size=(80, 24)) focus_path = view_helpers.get_focus_path(view) for w in reversed(focus_path): if w is view.form.done_btn: return self.fail("could not tab to done button")
def test_edit_boot_partition(self): form_data = { 'size': "256M", } model, disk = make_model_and_disk() partition = model.add_partition(disk, 512 * (2**20), "boot") fs = model.add_filesystem(partition, "fat32") model.add_mount(fs, '/boot/efi') view, stretchy = make_view(model, disk, partition) view_helpers.enter_data(stretchy.form, form_data) view_helpers.click(stretchy.form.done_btn.base_widget) expected_data = { 'size': dehumanize_size(form_data['size']), 'fstype': FilesystemModel.fs_by_name["fat32"], 'mount': '/boot/efi', } view.controller.partition_disk_handler.assert_called_once_with( stretchy.disk, stretchy.partition, expected_data)
def test_edit_partition(self): form_data = { 'size': "256M", 'fstype': FilesystemModel.fs_by_name['xfs'], } model, disk = make_model_and_disk() partition = model.add_partition(disk, 512 * (2**20)) model.add_filesystem(partition, "ext4") view, stretchy = make_view(model, disk, partition) self.assertTrue(stretchy.form.done_btn.enabled) view_helpers.enter_data(stretchy.form, form_data) view_helpers.click(stretchy.form.done_btn.base_widget) expected_data = { 'size': dehumanize_size(form_data['size']), 'fstype': FilesystemModel.fs_by_name['xfs'], 'mount': None, } view.controller.partition_disk_handler.assert_called_once_with( stretchy.disk, stretchy.partition, expected_data)
def test_edit_existing_partition(self): form_data = { 'fstype': "xfs", } model, disk = make_model_and_disk() partition = model.add_partition(disk, 512 * (2**20)) partition.preserve = True model.add_filesystem(partition, "ext4") view, stretchy = make_partition_view(model, disk, partition) self.assertFalse(stretchy.form.size.enabled) self.assertTrue(stretchy.form.done_btn.enabled) view_helpers.enter_data(stretchy.form, form_data) view_helpers.click(stretchy.form.done_btn.base_widget) expected_data = { 'fstype': 'xfs', 'mount': None, 'use_swap': False, } view.controller.partition_disk_handler.assert_called_once_with( stretchy.disk, stretchy.partition, expected_data)
def test_edit_raid(self): model, disk = make_model_and_disk() part1 = model.add_partition(disk, 10*(2**30)) part2 = model.add_partition(disk, 10*(2**30)) raid = model.add_raid("md0", "raid1", {part1, part2}, set()) view, stretchy = make_view(model, raid) form_data = { 'name': 'md1', 'level': raidlevels_by_value["raid0"], } expected_data = { 'name': 'md1', 'devices': {part1, part2}, 'spare_devices': set(), 'level': raidlevels_by_value["raid0"], } view_helpers.enter_data(stretchy.form, form_data) view_helpers.click(stretchy.form.done_btn.base_widget) view.controller.raid_handler.assert_called_once_with( raid, expected_data)
def test_done_enabled_when_valid(self): view = self.make_view() view_helpers.enter_data(view.form, valid_data) self.assertTrue(view.form.done_btn.enabled)
def test_done_enabled_for_valid_data(self): _, stretchy = self.make_view() view_helpers.enter_data(stretchy.manual_form, valid_data) self.assertTrue(stretchy.manual_form.done_btn.enabled)