# 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 Regression"
AUTHOR = "Chrome OS Team"
TIME = "MEDIUM"
TEST_CATEGORY = "Functional"
TEST_CLASS = "suite"
TEST_TYPE = "server"

DOC = """This test suite runs automated tests that should all pass
and that verifies that system calls do not crash with errorneous input
and other miscellaneous attributes of the kernel."""

from autotest_lib.client.cros import cros_logging


CLIENT_TESTS = [
]


SERVER_TESTS = [
    # See http://code.google.com/p/chromium-os/issues/detail?id=12710
    # if you experience a 'green recovery device' screen while running
    # the reboot test.
    ('platform_BootDevice', {'iterations': 10, 'tag': 'stress'}),
    ('platform_KernelErrorPaths', {}),
]


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)


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