# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import os

from autotest_lib.client.bin import test
from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib.cros import chrome
from autotest_lib.client.cros import cryptohome

TEST_USER = 'cryptohome_test@chromium.org'
TEST_PASS = 'testme'

class login_Cryptohome(test.test):
    """Verify the cryptohome is mounted only after login."""
    version = 1


    def run_once(self):
        try:
            username = ''
            with chrome.Chrome() as cr:
                username = cr.username
                if not cryptohome.is_vault_mounted(user=username,
                                                   allow_fail=False):
                    raise error.TestFail('Expected to find a mounted vault.')

            if cryptohome.is_vault_mounted(user=username,
                                           allow_fail=True):
                raise error.TestFail('Expected to not find a mounted vault.')

            # Remove our vault, mount another vault, create a test file
            # in the other vault, and ensure that the file no longer exists
            # after we log back in.
            cryptohome.remove_vault(username)

            cryptohome.mount_vault(TEST_USER, TEST_PASS, create=True)
            test_file = os.path.join(cryptohome.user_path(TEST_USER), 'hello')
            open(test_file, 'w').close()
            cryptohome.unmount_vault(TEST_USER)

            with chrome.Chrome():
                if not cryptohome.is_vault_mounted(user=username,
                                                   allow_fail=False):
                    raise error.TestFail(
                            'Expected to find a recreated mounted vault.')
                if os.path.exists(test_file):
                    raise error.TestFail('Expected to not find the test file.')
        # TODO(dennisjeffrey): Make this more fine-grained.
        # See crbug.com/225542.
        except Exception as err:
            raise error.TestFailRetry(repr(err))
