# Copyright 2018 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_ForcedOOBEUpdate.interrupt.full"
PURPOSE = "Test forced update at OOBE with interruptions."
TIME = "MEDIUM"
TEST_CATEGORY = "Functional"
TEST_CLASS = "platform"
TEST_TYPE = "server"
# TODO(crbug.com/877107) This test is sometimes causing DUTs to download
# and install production images from Omaha, which breaks the DUT.
# Disable the test until we find a better way to stop that event.
# ATTRIBUTES = "suite:bvt-perbuild"
DOC = """
This tests the forced autoupdate flow at OOBE with interruptions.

During the update it will
1. Reboot
2. Disconnect the network for X minutes (X is configurable in the test).
3. Use powerd to suspend/resume.

"""

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_ForcedOOBEUpdate', host=host, full_payload=True,
                 interrupt=True, max_updates=2, **args_dict)

job.parallel_simple(run, machines)
