# Copyright (c) 2012 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 = "stanleyw@google.com"
NAME = "network_WiFiInteropChaos"
TIME = "LENGTHY"
TEST_TYPE = "Server"

DOC = """
This test attempts to connect to all the ap's as as defined in the
configuration file wifi_interop_ap_list.conf.  This is not a standalone
control file and should be used with run_remote_tests.sh with the bss
argument passed to use the desired BSS for the test.
"""

from autotest_lib.server.cros.chaos_config import ChaosAPList
from autotest_lib.server import packet_capture
from autotest_lib.server import utils

args_dict = utils.args_to_dict(args)

def run(machine):
    host = hosts.create_host(machine)

    ap_config = ChaosAPList()
    ap = ap_config.get_ap_by_bss(args_dict.get('bss'))
    tries = args_dict.get('tries', 1)
    with packet_capture.PacketCaptureManager() as capturer:
        capturer.allocate_packet_capture_machine()
        tag = ' '.join([ap.get_ssid(), ap.get_bss()])
        job.run_test("network_WiFiInteropChaos", host=host,
                     ap=ap, capturer=capturer, tries=tries, tag=tag)

parallel_simple(run, machines)
