# 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 = "vyshu@google.com, Chromium OS"
NAME = "autoupdate_ConsecutiveUpdatesBeforeReboot.full"
TIME = "MEDIUM"
PURPOSE = "Tests repeated update with Nebraska."
TEST_CATEGORY = "Functional"
TEST_CLASS = "platform"
TEST_TYPE = "server"
ATTRIBUTES = "suite:au-perbuild"
DOC = """
This tests a repeated update by enabling the repeated updates feature.
This ensures that Update Engine checks for and performs another update even
when waiting for reboot. The update runs first with a full payload and then
again with a delta payload to avoid duplicate fingerprint values.

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.

Example usage:
test_that autoupdate_ConsecutiveUpdatesBeforeReboot.full <DUT> --board=<board> --args="job_repo_url='http://<devserver IP>:8082/static/<board>-release/RXX-XXXXX.X.X/autotest/packages', running_at_desk=True"
"""

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_ConsecutiveUpdatesBeforeReboot', host=host,
                 **args_dict)

job.parallel_simple(run, machines)
