# Copyright (c) 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 = 'krisr, tienchang, bmahadev'
NAME = 'network_WiFi_SuspendStress.11b'
TIME = 'MEDIUM'
TEST_TYPE = 'Server'
DEPENDENCIES = 'wificell'
ATTRIBUTES = ('suite:wifi_matfunc, suite:wifi_matfunc_bcm4371,'
              'suite:wifi_matfunc_noservo')

DOC = """
This test uses powerd_dbus to suspend and resume and checks that the
wifi adapter is brought back up and connects to a 802.11b network on channels
48, 64.
"""

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

def run(machine):
    host = hosts.create_host(machine)
    b_mode = hostap_config.HostapConfig.MODE_11B
    configurations = [(hostap_config.HostapConfig(channel=1, mode=b_mode),
                       xmlrpc_datatypes.AssociationParameters()),
                      (hostap_config.HostapConfig(channel=6, mode=b_mode),
                       xmlrpc_datatypes.AssociationParameters()),
                      (hostap_config.HostapConfig(channel=11, mode=b_mode),
                       xmlrpc_datatypes.AssociationParameters())]
    job.run_test('network_WiFi_SuspendStress',
                 host=host,
                 tag=NAME.split('.')[1],
                 suspends=5,
                 raw_cmdline_args=args,
                 additional_params=configurations)


parallel_simple(run, machines)
