# Copyright 2018 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 = 'harpreet'
NAME = 'network_WiFi_ChaosConnectDisconnect.static_2Ghz'
TIME = 'LONG'
TEST_TYPE = 'server'
ATTRIBUTES = 'suite:wifi_interop'
DEPENDENCIES = 'chaos_dut'

DOC = """
This script iterates through all 2Ghz access points in Chaos chamber.
"""

from autotest_lib.server.cros.ap_configurators import ap_spec
from autotest_lib.server.cros.chaos_lib import static_runner

def run_chaos_static(machine):
    host = hosts.create_host(machine)
    # Test all 2Ghz static APs on channel 1, 6 and 11
    ap_specs = [ap_spec.APSpec(band=ap_spec.BAND_2GHZ,
                               channel = 1,
                               configurator_type=ap_spec.CONFIGURATOR_STATIC),
                ap_spec.APSpec(band=ap_spec.BAND_2GHZ,
                               channel = 6,
                               configurator_type=ap_spec.CONFIGURATOR_STATIC),
                ap_spec.APSpec(band=ap_spec.BAND_2GHZ,
                               channel = 11,
                               configurator_type=ap_spec.CONFIGURATOR_STATIC)]

    for spec in ap_specs:
        runner = static_runner.StaticRunner(
                'network_WiFi_ChaosConnectDisconnect', host, spec)
        runner.run(job)

parallel_simple(run_chaos_static, machines)
