# 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.

from autotest_lib.client.bin import utils
from autotest_lib.client.common_lib import error
from autotest_lib.server import autotest
from autotest_lib.server import hosts
from autotest_lib.server import test


class hardware_StorageQualSuspendStress(test.test):
    """ Run Fio while suspending aggressively."""

    version = 1

    def run_once(self, client_ip, duration, other_dev=False):
        client = hosts.create_host(client_ip)
        client_at = autotest.Autotest(client)
        timeout = int(duration * 1.5)
        fio_test = "hardware_StorageFio"
        if other_dev:
            fio_test = "hardware_StorageFioOther"
        control = """job.parallel(
            [lambda: job.run_test('power_SuspendStress', tag='disk',
                duration=%d, init_delay=10, min_suspend=7, min_resume=30,
                check_connection=True)],
            [lambda: job.run_test('%s', test_length=%d,
                disable_sysinfo=True, requirements=[('write_stress', [])],
                tag='qual_suspend')], timeout=%d)""" % \
            (duration, fio_test, duration, timeout)
        client_at.run(control, '.', None)
        client_at.run_test(fio_test, wait=60, disable_sysinfo=True,
                           blkdiscard=False,
                           requirements=[('write_stress', ['v'])],
                           tag='qual_verify')

