# 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.switch_ap'
TIME = 'SHORT'
TEST_TYPE = 'Server'
ATTRIBUTES = ('suite:wifi_correctness_cros_core, suite:wifi_matfunc, '
              'suite:wifi_matfunc_bcm4371')
DEPENDENCIES = 'wificell'

DOC = """
This test reads (but does not verify) the reported DiconnectReason property
reported by supplicant when the client switches from one AP to another AP.
"""


from autotest_lib.server import site_linux_system


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


parallel_simple(run, machines)
