# Copyright (c) 2015 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 = 'pstew, quiche'
NAME = 'network_WiFi_RegDomain'
TIME = 'MEDIUM'
TEST_TYPE = 'Server'
SUITE = ('wifi_matfunc_bcm4356')
DEPENDENCIES = 'wificell'

DOC = """
This test verifies that a DUT can, or cannot, connect on given
channels, in given regions.

This test exercises:
- parsing of VPD data
- mapping of VPD data to ISO country code
- communication of country code from user-space to kernel
- communication of country code / rules from kernel to driver
- communication of country code / rules from driver to firmware

This test is an aid to identify changes in behavior. It does not
provide advice on regulatory requirements.
"""

# When adding a negative rule ('expect_connect': False), be sure to add a
# case with the opposite rule. Otherwise, we haven't ruled out the
# possibility that the test itself prevents the DUT from connecting.
CONFIGS = [
    {'region': 'ca.hybrid',  # <country code>.<extra>
     'channels': [
        {'number': 13, 'expect_connect': False},
        {'number': 149, 'expect_connect': True}]},
    {'region': 'nordic',  # virtual set
     'channels': [
        {'number': 13, 'expect_connect': True},
        {'number': 149, 'expect_connect': False}]},
    {'region': 'us',
     'channels': [
        {'number': 13, 'expect_connect': False},
        {'number': 149, 'expect_connect': True}]},
]


def run(machine):
    for config in CONFIGS:
        host = hosts.create_host(machine)
        job.run_test(
            'network_WiFi_RegDomain',
            tag=config['region'],
            host=host,
            raw_cmdline_args=args,
            additional_params=config)


parallel_simple(run, machines)
