# 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.

# TEST IS DISABLED UNTIL MIGRATED TO PYTHON 3.
# For instructions on how to: go/tauto-py3-migration
# To re-enable migrate to Python 3.
# If the test is not migrated by 1/14/22 it will be deleted.

AUTHOR = 'quiche, wiley, pstew'
NAME = 'network_WiFi_VisibleScan.11b'
TIME = 'SHORT'
TEST_TYPE = 'Server'
ATTRIBUTES = ''
DEPENDENCIES = 'wificell'

DOC = """
This test scans for networks, with a shill profile that does not
contain any hidden networks. The test verifies that 802.11 probe
frames are seen over-the-air, and that the probe frames specify
a broadcast scan.

"""

from autotest_lib.server.cros.network import hostap_config


def run(machine):
    host = hosts.create_host(machine)
    # This configuration uses as many defaults as possible
    configurations = [hostap_config.HostapConfig(channel=1,
            mode=hostap_config.HostapConfig.MODE_11B)]
    job.run_test('network_WiFi_VisibleScan',
                 tag=NAME.split('.')[1],
                 host=host,
                 raw_cmdline_args=args,
                 additional_params=configurations)


parallel_simple(run, machines)
