# 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 = 'kirtika'
NAME = 'network_WiFi_BgscanBackoff.5760_noise_check'
TIME = 'SHORT'
TEST_TYPE = 'Server'
ATTRIBUTES = ''
DEPENDENCIES = 'wificell'
MAX_RESULT_SIZE_KB = 512000

DOC = """
This test case verifies that bgscan aborts and/or backs off when
there is consistent outgoing traffic. This is a fork of the legacy test
that runs the test on channels 1 and 153 to serve two purposes:
(a) provide more 5 GHz coverage.
(b) help (a wee bit) to catch noise concerns around 5760 MHz as seen on
certain Intel SoCs.
This test can be compared with the '.wifi_bgscan_backoff' variant, to see
whether channel 153 behaves worse than other 5GHz channels.
"""

from autotest_lib.server.cros.network import hostap_config

def run(machine):
    host = hosts.create_host(machine)
    caps = [hostap_config.HostapConfig.N_CAPABILITY_HT40]
    mode = hostap_config.HostapConfig.MODE_11N_MIXED
    config_first_ap = (hostap_config.HostapConfig(channel=1,
            mode=mode, n_capabilities=caps))
    config_second_ap = (hostap_config.HostapConfig(channel=153,
            mode=mode, n_capabilities=caps))
    params = [config_first_ap, config_second_ap]
    job.run_test('network_WiFi_BgscanBackoff',
                 host=host,
                 raw_cmdline_args=args,
                 additional_params=params)

parallel_simple(run, machines)
