# 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 = 'silberst, pstew, quiche'
NAME = 'network_WiFi_DisconnectReason.ap_send_chan_switch'
TIME = 'SHORT'
TEST_TYPE = 'Server'

# TODO: This test seems broken, because it passes even though DUTs with Intel
#       WiFi drivers don't support CSA: Full discussion at
#       https://chromium-review.googlesource.com/c/604753/.
#       Removing from all test suites for now.

ATTRIBUTES = (
#             'suite:wifi_correctness_cros_core, '
#             'suite:wifi_matfunc, '
#             'suite:wifi_matfunc_noservo, '
#             'suite:wifi_matfunc_bcm4371'
)
DEPENDENCIES = 'wificell'

DOC = """
This test reads (but does not verify) the reported DiconnectReason property
reported by supplicant when the AP sends a channel switch message.
"""


from autotest_lib.server import site_linux_system


def run(machine):
    host = hosts.create_host(machine)
    capabilities = [site_linux_system.LinuxSystem.CAPABILITY_SEND_MANAGEMENT_FRAME]
    job.run_test('network_WiFi_DisconnectReason',
                 host=host,
                 tag=NAME.split('.')[1],
                 disconnect_trigger='AP send channel switch',
                 req_capabilities=capabilities,
                 raw_cmdline_args=args)


parallel_simple(run, machines)
