# Copyright (c) 2012 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 = "Kernel Daily Benchmarks"
AUTHOR = "Chrome OS Team"
TIME = "LONG"
TEST_CATEGORY = "Benchmark"
TEST_CLASS = "suite"
TEST_TYPE = "server"

DOC = """
This test suite runs automated benchmarks for testing the performance of
the filesystem and block layers.
"""

from autotest_lib.client.cros import cros_logging


CLIENT_TESTS = [
    ('compilebench', {}),
    ('dbench', {}),
    ('ddtest', {}),
    ('hardware_MemoryThroughput', {'num_iteration': 10, 'test_list': '21'}),
    ('hardware_StorageFio', {} ),
    ('iozone', {}),
    # Possible tests to run:
    # --nop - does nothing, quietly
    # --mem - run memory benchmarks
    # --disk - run disk benchmarks
    # --ecryptfs - run encryption benchmarks
    ('kernel_fs_Punybench', {'args':'--nop --mem --disk --ecryptfs'}),
]


SERVER_TESTS = [
]


def run_client_test(machine):
    client = hosts.create_host(machine)

    client_at = autotest.Autotest(client)
    for test, argv in CLIENT_TESTS:
        client_at.run_test(test, **argv)


def run_server_test(machine):
    client = hosts.create_host(machine)
    for test, argv in SERVER_TESTS:
        job.run_test(test, host=client, **argv)


parallel_simple(run_server_test, machines)
job.parallel_on_machines(run_client_test, machines)
