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

from autotest_lib.server import utils

NAME = "display_HotPlugAtSuspend.mirrored"
METADATA = {
    "contacts": ["chromeos-gfx-display@google.com"],
    "bug_component": "b:188154",
    "criteria": "Fails if the checks after suspend-resume fail."
}
ATTRIBUTES = "suite:chameleon_hdmi_unstable"
TEST_TYPE = "server"
DEPENDENCIES = "chameleon"
JOB_RETRIES = 1

'''
This test remotely emulates external display hot-plug and suspend/resume.
'''

args_dict = utils.args_to_dict(args)
chameleon_args = hosts.CrosHost.get_chameleon_arguments(args_dict)
# Plug status before and after suspend/resume
# [(plugged_before_suspend, plugged_after_suspend, plugged_before_resume)]
plug_status=[(True, True, True)]

def run(machine):
    host = hosts.create_host(machine, chameleon_args=chameleon_args)
    job.run_test("display_HotPlugAtSuspend", host=host,
                 plug_status=plug_status, test_mirrored=True,
                 tag="mirrored")

parallel_simple(run, machines)
