#!/usr/bin/python # -*- coding: utf-8 -*- # This file is part of Cockpit. # # Copyright (C) 2015 Red Hat, Inc. # # Cockpit is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # # Cockpit is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with Cockpit; If not, see . import parent from testlib import * from storagelib import * class TestStorage(StorageCase): def testLuks(self): m = self.machine b = self.browser mount_point_secret = "/run/secret" self.login_and_go("/storage") # Add a disk and partition it m.add_disk("50M", serial="MYDISK") b.wait_in_text("#drives", "MYDISK") b.click('tr:contains("MYDISK")') b.wait_visible("#storage-detail") b.click('button:contains(Create partition table)') self.dialog({ "type": "gpt" }) self.content_row_wait_in_col(1, 1, "Free Space") assert m.execute("grep -v ^# /etc/crypttab || true").strip() == "" # Format it with luks self.content_row_action(1, "Create Partition") self.dialog({ "size": 10, "type": "luks+ext4", "name": "ENCRYPTED", "passphrase": "vainu-reku-toma-rolle-kaja", "passphrase2": "vainu-reku-toma-rolle-kaja", "store_passphrase": True, "mounting": "custom", "mount_point": mount_point_secret, "crypto_options": "crypto,options" }) self.content_row_wait_in_col(1, 1, "Encrypted data") self.content_row_wait_in_col(2, 1, "ext4 File System") if not self.storaged_is_old_udisks: self.wait_in_storaged_configuration(mount_point_secret) # HACK: Put /etc/crypttab in the journal, in order to debug updating issues assert m.execute("cat /etc/crypttab | logger -s 2>&1 | grep 'UUID='") != "" assert m.execute("grep %s /etc/fstab" % mount_point_secret) != "" assert m.execute("cat /etc/luks-keys/*") == "vainu-reku-toma-rolle-kaja" # Lock it self.content_head_action(1, "Lock") b.wait_not_in_text("#detail-content", "ext4 File System") if not self.storaged_is_old_udisks: # Unlock, this uses the stored passphrase self.content_head_action(1, "Unlock") self.content_row_wait_in_col(2, 1, "ext4 File System") # Change options. We keep trying until the stack has synched # up with crypttab and we see the old options. self.dialog_with_retry(trigger = lambda: self.content_tab_info_action(1, 2, "Options"), expect = { "options": "crypto,options" }, values = { "options": "weird,options" }) assert m.execute("grep 'weird,options' /etc/crypttab") != "" self.wait_in_storaged_configuration("weird,options") # Change passphrase edit_button = self.content_tab_info_row(1, 2, "Stored passphrase") + " button" self.dialog_with_retry(trigger = lambda: b.click(edit_button), expect = { "passphrase": "vainu-reku-toma-rolle-kaja" }, values = { "passphrase": "wrong-passphrase" }) assert m.execute("cat /etc/luks-keys/*") == "wrong-passphrase" # Remove passphrase edit_button = self.content_tab_info_row(1, 2, "Stored passphrase") + " button" self.dialog_with_retry(trigger = lambda: b.click(edit_button), expect = { "passphrase": "wrong-passphrase" }, values = { "passphrase": "" }) self.wait_in_storaged_configuration("'passphrase-path': ") # Lock it self.content_head_action(1, "Lock") b.wait_not_in_text("#detail-content", "ext4 File System") # Unlock, this asks for a passphrase self.content_head_action(1, "Unlock") self.dialog({ "passphrase": "vainu-reku-toma-rolle-kaja" }) self.content_row_wait_in_col(2, 1, "ext4 File System") # Delete the partition. self.content_head_action(1, "Delete") self.confirm() self.content_row_wait_in_col(1, 1, "Free Space") b.wait_not_in_text("#detail-content", "ext4 File System") else: # Unlock, this asks for a passphrase because we don't store one with older UDisks2. self.content_head_action(1, "Unlock") self.dialog({ "passphrase": "vainu-reku-toma-rolle-kaja" }) self.content_row_wait_in_col(2, 1, "ext4 File System") assert m.execute("grep -v ^# /etc/crypttab || true").strip() == "" assert m.execute("grep %s /etc/fstab || true" % mount_point_secret) == "" if __name__ == '__main__': test_main()