# Copyright (c) 2013 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_checkSSIDLimits'
TIME = 'SHORT'
TEST_TYPE = 'Server'
ATTRIBUTES = ('suite:wifi_correctness_cros_core, suite:wifi_matfunc,'
              'suite:wifi_matfunc_noservo,'
              'suite:wifi_matfunc_bcm4371, suite:wifi_release, subsystem:wifi,'
              'suite:android_wifi_connect')
DEPENDENCIES = 'wificell'

DOC = """
This test attempts to verify that we can connect to a networks with the
longest and shortest possible SSIDs.
"""


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


def run(machine):
    LONGEST_SSID = ('MaxLengthSSID' * 8)[:32]
    SHORTEST_SSID = 'a'
    g_mode = hostap_config.HostapConfig.MODE_11G
    configurations = [(hostap_config.HostapConfig(channel=1,
                                                  mode=g_mode,
                                                  ssid=ssid),
                       xmlrpc_datatypes.AssociationParameters())
                       for ssid in (LONGEST_SSID, SHORTEST_SSID)]
    host = hosts.create_host(machine)
    job.run_test('network_WiFi_SimpleConnect',
                 tag=NAME.split('.')[1],
                 host=host,
                 raw_cmdline_args=args,
                 additional_params=configurations)


parallel_simple(run, machines)
