# 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.

AUTHOR = "Chromium OS"
NAME = "autoupdate.local"
TIME = "MEDIUM"
TEST_CATEGORY = "Functional"
TEST_CLASS = "platform"
TEST_TYPE = "server"

DOC = """
A test that reimages the assigned machines and checks for success.

Performs an update using the local devserver and flexes the autoupdater
pathways. This test presumes that you have already started up a local devserver.
You can do this by running:
start_devserver [--pregenerate_update] [--image|--payload=<optional target>].

@param port: Optional port to use to connect to the devsever. By default this is
  8080.
"""

import socket
from autotest_lib.client.common_lib import utils
from autotest_lib.client.cros import constants


def run(machine):
    # Save preserved log after autoupdate is completed.
    job.sysinfo.add_logdir(constants.AUTOUPDATE_PRESERVE_LOG)

    hostname = socket.getfqdn()
    args_dict = utils.args_to_dict(args)
    port = args_dict.get('port', '8080')

    image_url = 'http://%s:%s/update' % (hostname, port)
    host = hosts.create_host(machine, initialize=False)
    job.run_test('autoupdate', host=host, update_url=image_url,
                 local_devserver=True)


job.parallel_simple(run, machines)
