# 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_WakeOnWiFiThrottling'
TIME = 'SHORT'
TEST_TYPE = 'Server'
DEPENDENCIES = 'servo, wificell, lucidsleep'
ATTRIBUTES = ('suite:wifi_lucidsleep')

DOC = """
This test verifies that shill disables wake on WiFi when the DUT wakes up in
dark resume too frequently. Test both the short and long thresholds, which are 3
dark resumes per 1 minute and 10 dark resumes per 10 minutes respectively.
"""

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

parallel_simple(run, machines)
