# 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 = "MemoryQual"
METADATA = {
    "contacts": ["cros-avl-memory@google.com"],
    "bug_component": "b:167260",
    "criteria": "This test is a benchmark test",
    "hw_agnostic": False,
}
TIME = "LENGTHY"
TEST_CATEGORY = "Stress"
TEST_CLASS = "suite"
TEST_TYPE = "server"
EXTENDED_TIMEOUT = 1209600  # 2 weeks
PY_VERSION = 3

DOC = """
Sequence for qualification new memory part to AVL.
"""

HOUR_IN_SECS=60*60

CLIENT_TESTS= [
    ('hardware_MemoryThroughput', {
        'tag': 'memory_qual', 'test': 'rd', 'warmup': 100,
        'num_iterations': 5, 'parallel': 4, 'sizes': [67108864,],
        'criteria': 25*1024}),
    ('hardware_Memtester', {
        'tag' : 'memory_qual', 'loop' : 100}),
    ('hardware_SAT', {
        'tag' : 'memory_qual', 'seconds' : 8 * HOUR_IN_SECS}),
]

def run_client_test(machine):
    client = hosts.create_host(machine)
    client_at = autotest.Autotest(client)
    for test, argv in CLIENT_TESTS:
        client.reboot()
        client_at.run_test(test, timeout=EXTENDED_TIMEOUT, **argv)

job.parallel_on_machines(run_client_test, machines)
