# Copyright 2014 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

NAME = 'hardware_StorageStress.stress'
METADATA = {
    'contacts': ['chromeos-storage@google.com'],
    'bug_component': 'b:974567',
    'criteria': 'Part of storage AVL qualification suite',
    'hw_agnostic': False
}
AUTHOR = 'mohsinally'
PURPOSE = 'Run various storage stress tests'
ATTRIBUTES = "suite:stress"
TIME = 'LONG'
TEST_CLASS = 'stress'
TEST_TYPE = 'server'
PY_VERSION = 3

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)
