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

AUTHOR = 'samueltan, ejcaruso'
NAME = 'network_WiFi_FastReconnectInDarkResume'
TIME = 'SHORT'
TEST_TYPE = 'Server'
DEPENDENCIES = 'servo, wificell, lucidsleep'
ATTRIBUTES = 'suite:wifi_correctness_cros_core, suite:wifi_lucidsleep'

DOC = """
This test verifies that, during suspend, when a DUT is momentarily disconnected
from an AP that is still up, the DUT will reconnect to that AP during the same
dark resume that was triggered by the disconnect.

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.
"""

from autotest_lib.client.common_lib.cros.network import xmlrpc_datatypes
from autotest_lib.client.common_lib.cros.network import xmlrpc_security_types
from autotest_lib.server.cros.network import hostap_config
from autotest_lib.server import utils

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_FastReconnectInDarkResume',
                 host=host,
                 raw_cmdline_args=args)

parallel_simple(run, machines)
