# Copyright (c) 2012 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 = "network_3GModemControl.pseudomodem"
PURPOSE = "Verify commands sent to a modem manager are reflected in shill."
CRITERIA = """
This test will fail if modem manager state differs from shill state.
"""
SUITE = "network3g_pseudomodem"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "network"
TEST_TYPE = "client"

DOC = """
  Tests that commands sent to ModemManager1 are reflected in shill.

  Issues many connect, disconnect, enable, and disable commands to
  ensure that the modem state is always properly reflected in shill --
  even if the commands are sent to the modem manager instead of shill.
  Uses a pseudo modem to simulate modem manager so that this test can
  be run on a virtual machine.
"""

from autotest_lib.client.cros.cellular import test_environment

# 3GPP
test_env = test_environment.CellularPseudoMMTestEnvironment(
        pseudomm_args=({'family': '3GPP'},))
job.run_test('network_3GModemControl', test_env=test_env, autoconnect=False,
             tag='no-autoconnect-pseudomodem.3GPP')
job.run_test('network_3GModemControl', test_env=test_env, autoconnect=True,
             tag='autoconnect-pseudomodem.3GPP')

# CDMA
test_env = test_environment.CellularPseudoMMTestEnvironment(
        pseudomm_args=({'family': 'CDMA'},))
job.run_test('network_3GModemControl', test_env=test_env, autoconnect=False,
             tag='no-autoconnect-pseudomodem.CDMA')
job.run_test('network_3GModemControl', test_env=test_env, autoconnect=True,
             tag='autoconnect-pseudomodem.CDMA')
