# Copyright (c) 2011 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 = "ChromeOS Team"
NAME = "cellular_3GModemControl"
PURPOSE = "Verify commands sent to a modem manager are reflected in flimflam."
CRITERIA = """
This test will fail if modem manager state differs from flimflam state.
"""
ATTRIBUTES = "suite:cell_emulator"
SUITE = "cell_emulator"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "network"
TEST_TYPE = "client"

DOC = """
  Tests that commands sent to ModemManager or cromo are reflected in flimflam.

  Issues many connect, disconnect, enable, and disable commands to ensure
  that the modem state is always properly reflected in flimflam -- even
  if the commands are sent to the modem manager instead of flimflam.
"""

from autotest_lib.client.cros.cellular import labconfig

config = labconfig.Configuration(args)

variations = [(False, 'no-autoconnect'), (True, 'autoconnect')]

for technology in config.get_technologies():
    for autoconnect, tag in variations:
        job.run_test('network_3GModemControl',
                     config=config,
                     technology=technology,
                     tag='%s-%s' % (technology, tag),
                     autoconnect=autoconnect)
