# Copyright (c) 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 = 'asnagarajan, wiley, jabele'
NAME = 'network_WiFi_ChaosLongConnect.debug'
TIME = 'LONG'
TEST_TYPE = 'server'

DOC = """
This script iterates through all of the access points in the AP compatibility
lab and has a chrome device connect to each in series. This test must be
performed in the AP compatibility lab. This test would hold the connection with
AP and performs some work during the connection.
"""

from autotest_lib.server.cros.chaos_ap_configurators import ap_spec
from autotest_lib.server.cros.chaos_lib import chaos_runner
from autotest_lib.server.cros.chaos_lib import connection_worker

def run_chaos_debug(machine):
    host = hosts.create_host(machine)
    # List of specific APs to debug. Please verify the APs indeed support PSK.
    # Add your APs here.
    debug_aps = ['chromeos3-row2-rack1-host3', 'chromeos3-row2-rack1-host7']
    # IP or DNS name of host to use as a packet capturing device.
    # capturer_hostname = 'chromeos3-row1-rack1-host15.cros'
    # IP or DNS name of host to use as a work client device.
    # work_client_hostname = 'chromeos3-row1-rack1-host12.cros'
    ap_specs = [ap_spec.APSpec(security=ap_spec.SECURITY_TYPE_WPA2PSK,
                               band=ap_spec.BAND_2GHZ,
                               hostnames=debug_aps),
                ap_spec.APSpec(security=ap_spec.SECURITY_TYPE_WPA2PSK,
                               band=ap_spec.BAND_5GHZ,
                               hostnames=debug_aps)]
    # Note that duration_sec of 10s is to make debuging faster. This is not
    # going to capture re-keying events. See crbug.com/339222
    conn_worker = connection_worker.ConnectionDuration(duration_sec=10)
    for spec in ap_specs:
        runner = chaos_runner.ChaosRunner(
                'network_WiFi_ChaosLongConnect', host, spec)
        runner.run(job, batch_size=2, conn_worker=conn_worker)


parallel_simple(run_chaos_debug, machines)
