# 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_CryptohomeTelemetry(test.test):
    """Verify the cryptohome is mounted only after login."""
    version = 1


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

            if cryptohome.is_vault_mounted(user=chrome.LOGIN_USER,
                                           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(chrome.LOGIN_USER)

            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=chrome.LOGIN_USER,
                                                   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))
