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

NAME = 'hardware_StorageStress.stress'
AUTHOR = 'mohsinally'
PURPOSE = 'Run various storage stress tests'
ATTRIBUTES = "suite:stress2"
TIME = 'LONG'
TEST_CLASS = 'stress'
TEST_TYPE = 'server'

DOC = """
Variants of the test are run to simulate a number of scenarios while execising
device storage.

run_hardware_storage_stress_suspend:
This test calls hardware_StorageFio to write data once and repeatedly verifies
data in the storage for 20 minutes with machine suspended 1 minute between
each verify.

run_hardware_storage_stress:
This test calls hardware_StorageFio to write data once and repeatedly verifies
data in the storage for 5 minutes.

While the test is running, we can corrupt the SSD and check the test is
finding it with:

 dd if=/dev/zero of=<tested partition> bs=512k

run_hardware_storage_reboot:
This test calls hardware_StorageFio to write data once and repeatedly verifies
data in the storage for 5 minutes with machine rebooted between each verify.
"""

def run_hardware_storage_stress_suspend(machine):
    job.run_test('hardware_StorageStress', client_ip=machine,
        power_command='suspend', suspend_duration=60, duration=1200,
        tag='suspend')

def run_hardware_storage_stress(machine):
    job.run_test('hardware_StorageStress', client_ip=machine,
                 power_command='nothing', gap=5, duration=300, tag='bare')

def run_hardware_storage_stress_reboot(machine):
    job.run_test('hardware_StorageStress', client_ip=machine,
                 gap=5, duration=300, tag='reboot')

job.parallel_simple(run_hardware_storage_stress_suspend, machines)
job.parallel_simple(run_hardware_storage_stress, machines)
job.parallel_simple(run_hardware_storage_stress_reboot, machines)
