# Copyright (c) 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.

AUTHOR = "gwendal"
NAME = "StorageQualRetention.quick"
ATTRIBUTES = "suite:kernel_weekly_regression, suite:storage_qual_quick"
TIME = "LONG"
TEST_CATEGORY = "Stress"
TEST_CLASS = "suite"
TEST_TYPE = "server"

DOC = """
Sequence for testing the Storage Qual running from the fixed devices.
This tests check retentions.
"""
from autotest_lib.server import sequence


# tag is specified twice, because it is popped in _build_tagged_test_name().
SERVER_SEQUENCES = [
    sequence.SequenceJob(
            'hardware_StorageQualBase',
            { 'tag': 'before', 'client_tag': 'before'}),
    sequence.SequenceJob(
            'hardware_StorageStress',
            {'tag': 'soak', 'power_command': 'nothing',
             'storage_test_command': 'full_write'},
            iteration=2, duration=sequence.HOUR_IN_SECS / 2),
    sequence.SequenceJob(
            'hardware_StorageStress',
            {'tag': 'suspend', 'power_command': 'suspend',
             'suspend_duration': 120},
            duration=sequence.HOUR_IN_SECS / 2),
    sequence.SequenceJob(
            'hardware_StorageQualBase',
            { 'tag': 'after', 'client_tag': 'after'}),
]

sequence.sequence_schedule(job, machines, SERVER_SEQUENCES)

