# 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'
SUITE = "stress5"
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.add_sysinfo_logfile('/var/log/storage_info.txt', on_every_test=True)
    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.add_sysinfo_logfile('/var/log/storage_info.txt', on_every_test=True)
    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.add_sysinfo_logfile('/var/log/storage_info.txt', on_every_test=True)
    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)
