# Copyright 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 = 'matthewmwang'
TIME = 'SHORT'
NAME = 'network_WiFi_RoamFT.mixedPSK'
TEST_TYPE = 'Server'
ATTRIBUTES = ('suite:wifi_matfunc, suite:wifi_matfunc_noservo')
DEPENDENCIES = 'wificell'

DOC = """
This test attempts to verify that we can connect to and roam to and from APs
that support FT mixed mode for PSK in full view of the DUT. This ensures that
devices that don't support FT are still compatible with APs that do. Fast BSS
Transition is part of the 802.11r protocol, which describes a procedure for fast
roaming from one AP to another within an SSID.
"""

from autotest_lib.client.common_lib.cros.network import xmlrpc_security_types

def run(machine):
    ft_psk_config = xmlrpc_security_types.WPAConfig(
        psk='chromeos',
        wpa_mode=xmlrpc_security_types.WPAConfig.MODE_PURE_WPA2,
        wpa2_ciphers=[xmlrpc_security_types.WPAConfig.CIPHER_CCMP],
        ft_mode=xmlrpc_security_types.WPAConfig.FT_MODE_MIXED)
    host = hosts.create_host(machine)
    job.run_test('network_WiFi_RoamFT',
                 tag=NAME.split('.')[1],
                 host=host,
                 raw_cmdline_args=args,
                 additional_params=ft_psk_config)


parallel_simple(run, machines)
