# Copyright 2015 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.

from autotest_lib.server import utils

AUTHOR = 'samueltan, ejcaruso'
NAME = 'network_WiFi_ReconnectInDarkResume'
TIME = 'SHORT'
TEST_TYPE = 'Server'
DEPENDENCIES = 'wificell, servo, board:samus'
SUITE = 'wifi_matfunc, wifi_correctness_cros_core, wifi_release'

DOC = """
This test verifies that the DUT successfully reconnects to a network in dark
resume after getting disconnected from that network while suspended.
We verify the connectivity status of the DUT on resume by parsing shill logs,
since the delays involved in waking a DUT from suspend using autotest framework
make real-time checks inaccurate.
"""

args_dict = utils.args_to_dict(args)
servo_args = hosts.CrosHost.get_servo_arguments(args_dict)

def run(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test('network_WiFi_ReconnectInDarkResume',
                 host=host,
                 raw_cmdline_args=args)

parallel_simple(run, machines)
