# Copyright 2021 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 = "dhaddock, Chromium OS"
NAME = "autoupdate_Basic.m2n.full"
TIME = "MEDIUM"
PURPOSE = "Tests an M-to-N update with Nebraska."
TEST_CATEGORY = "Functional"
TEST_CLASS = "platform"
TEST_TYPE = "server"
ATTRIBUTES = "suite:au-m2n"
DOC = """
This tests an M-to-N update. That means it will update from the current stable
version for this board to ToT. This test will be used in the CQ to ensure
changes don't break autoupdate.

We supply a job_repo_url to the test when running locally. In the lab this will
be passed directly. The job_repo_url is a link to the autotest packages on a
devserver. The test uses it to find the correct payload to use.

To get a list of available devservers to use execute this command:
atest server list | grep devserver

Example usage:
test_that autoupdate_Basic.m2n.full <DUT> --board=<board> --args="job_repo_url=http://<devserver IP>:8082/static/<board>-release/RXX-XXXXX.X.X/autotest/packages"

"""

from autotest_lib.client.common_lib import utils
args_dict = utils.args_to_dict(args)

def run(machine):
    host = hosts.create_host(machine)
    job.run_test('autoupdate_Basic', host=host, full_payload=True,
    		 m2n=True, **args_dict)

job.parallel_simple(run, machines)
