# Copyright (c) 2010 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 = "Auto Update Host"
TIME = "MEDIUM"
TEST_CATEGORY = "Functional"
TEST_CLASS = "platform"
TEST_TYPE = "server"

DOC = """
This is an end-to-end to for autoupdate.
Here is what it does:
1. Override the client lsb-release to point to the test server
2. Starts devserver with specified payload
3. Starts update process on client
4. Poll client for update completion
5. Reboot client and repeat from step 1
"""

from autotest_lib.client.common_lib import error

# Convert autoserv args to something usable.
opts = dict([[k, v] for (k, e, v) in [x.partition('=') for x in args]])

def run_it(machine):
    start = get_key('start_image')
    target = get_key('target_image')
    iteration = get_key('iteration')

    # Setup the client machine.
    host = hosts.create_host(machine)
    job.run_test("autoupdate_Loop", host=host, start=start,
                 target=target, iteration=iteration)

def get_key(key):
    try:
      return opts[key]
    except KeyError:
      raise error.TestFail('Could not find flag: %s' % key)

parallel_simple(run_it, machines)
