# Copyright 2022 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import logging
from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib import utils

AUTHOR = "kyleshima, ChromiumOS"
METADATA = {
  "contacts": [
    "chromeos-core-services@google.com",
    "chromeos-sw-engprod@google.com"
  ],
  "bug_component": "b:908319",
  "criteria": "Test autoupdate from the latest stable version."
}
NAME = "autoupdate_EndToEndTest.m2n.full"
TIME = "MEDIUM"
TEST_TYPE = "server"
ATTRIBUTES = "suite:au-m2n"
JOB_RETRIES = 2

DOC = """
This tests an M-to-N update. That means it will update from the current stable
version for this board to ToT. autoupdate_EndToEndTest runs as part of paygen
and is kicked off differently from other tests. autoupdateEndToEndTest.m2n.full
will run the same as the other autoupdate tests, so we can detect any
differences between the two test environments and catch test-breaking changes
earlier.

Refer to autoupdate_Basic's control.delta file for instructions on how to run
this test locally from your workstation.

Note: for m2n tests, the source version is the currently serving stable channel
version.

"""

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_EndToEndTest', host=host, test_conf=None,
                 m2n=True, **args_dict)

job.parallel_simple(run, machines)
