# Copyright (c) 2010 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 logging, os, shutil, tempfile
from autotest_lib.client.bin import test
from autotest_lib.client.common_lib import fio_util
from autotest_lib.client.cros import cryptohome

TEST_USER = 'test@chromium.org'
TEST_PASSWORD = 'test'

class platform_CryptohomeFio(test.test):
    """Run FIO in the crypto partition."""

    version = 2

    def run_once(self, runtime, mount_cryptohome=True, tmpfs=False,
                 script=None):
        # Mount a test cryptohome vault.
        self.__mount_cryptohome = mount_cryptohome
        if mount_cryptohome:
            cryptohome.mount_vault(TEST_USER, TEST_PASSWORD, create=True)
            tmpdir = cryptohome.user_path(TEST_USER)
        else:
            if tmpfs:
                tmpdir = None
            else:
                tmpdir = self.tmpdir
        self.__work_dir = tempfile.mkdtemp(dir=tmpdir)

        results = {}
        # TODO make these parameters to run_once & check target disk for space.
        self.__filesize = '150m'
        self.__runtime = str(runtime)
        env_vars = ' '.join(
            ['FILENAME=' + os.path.join(self.__work_dir, script),
             'FILESIZE=' + self.__filesize,
             'RUN_TIME=' + self.__runtime
             ])
        job_file = os.path.join(self.bindir, script)
        results.update(fio_util.fio_runner(job_file, env_vars))
        self.write_perf_keyval(results)


    def cleanup(self):
        logging.info('Finished with FS stress, cleaning up.')
        if self.__mount_cryptohome:
            cryptohome.unmount_vault(TEST_USER)
            cryptohome.remove_vault(TEST_USER)
        else:
            shutil.rmtree(self.__work_dir)
