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

from autotest_lib.client.common_lib import utils

AUTHOR = "sosa@chromium.org"
NAME = "platform_RebootAfterUpdate"
TIME = "SHORT"
TEST_CATEGORY = "Benchmark"
TEST_CLASS = "platform"
TEST_TYPE = "server"
SUITE = "bvt"
EXPERIMENTAL = "True"

DOC = """
This test checks the behavior of reboot after update. It specifically tests
the amount of time it takes for a system to reboot both after an update and
after first login.

Arg:
  job_repo_url: repo url to use to find image to update from -- assumes caller
                has staged image. By default if host[repo_job_url] is set, it'll
                use that. This overrides that value. This value must follow
                the package_url_pattern in the global config.

To run locally:
  1) Setup your devserver in your shadow config that your DUT can reach.
  2) Stage the image you want for example:
     http://localhost:8080/download?archive_url=\
     gs://chromeos-image-archive/x86-alex/R29-4165.0.0
  3) Run with run_remote_test etc passing
     args="job_repo_url=http://<your_hostname>:8080/static/\
     x86-alex/R29-4165.0.0/autotest/packages"
"""

args_dict = utils.args_to_dict(args)
job_repo_url = args_dict.get('job_repo_url')

def run_test(machine):
    """Execute a test configuration on a given machine."""
    host = hosts.create_host(machine)
    job.run_test("platform_RebootAfterUpdate",
                 host=host, job_repo_url=job_repo_url)


# Invoke parallel tests.
parallel_simple(run_test, machines)
