# Copyright (c) 2014 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 = 'wiley, pstew, quiche'
NAME = 'network_WiFi_SimpleConnect.wifi_checkDFS'
TIME = 'SHORT'
TEST_TYPE = 'Server'
ATTRIBUTES = ('suite:wifi_matfunc, suite:wifi_release, subsystem:wifi')
DEPENDENCIES = 'wificell'

DOC = """
This test verifies that DUT can connect to an open network on a DFS channel.

There are regulatory domains where this is not expected (e.g. China) but we
do not make devices for those domains (yet).
"""


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


def run(machine):
    a_mode = hostap_config.HostapConfig.MODE_11A
    configurations = [(hostap_config.HostapConfig(channel=136, mode=a_mode),
                       xmlrpc_datatypes.AssociationParameters())]
    job.run_test('network_WiFi_SimpleConnect',
                 tag=NAME.split('.')[1],
                 host=hosts.create_host(machine),
                 raw_cmdline_args=args,
                 additional_params=configurations)


parallel_simple(run, machines)
