# 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 = "network_3GDisableGobiWhileConnecting"
PURPOSE = "Check that the 3G modem can handle a disconnect while connecting."
CRITERIA = """
This test will fail if a disconnect request while the modem is
connecting is not promptly executed.  (Includes Gobi-specific
tests: delaying asynchronous connect and QMI failure.)
"""
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "network"
TEST_TYPE = "client"

DOC = """
Check that the 3G modem can handle a disconnect while connecting.
"""

from autotest_lib.client.cros.cellular import test_environment

ITERATIONS_PER_TEST=1

test_env = test_environment.CellularOTATestEnvironment()
job.run_test('network_3GDisableWhileConnecting',
             test_env=test_env,
             timeout_s=20,
             delay_before_disable_ms=0,
             disable_delay_per_iteration_ms=0,
             iterations=ITERATIONS_PER_TEST,
             tag='instant_disable')

# Since dbus-python emits our calls asynchronously, it is sometimes
# (often?) the case that the disable arrives before the connect.
# There's no good way to track what actually gets sent first, so we
# sleep.
test_env = test_environment.CellularOTATestEnvironment()
job.run_test('network_3GDisableWhileConnecting',
             test_env=test_env,
             timeout_s=20,
             delay_before_disable_ms=0,
             disable_delay_per_iteration_ms=int(1000.0 / ITERATIONS_PER_TEST),
             iterations=ITERATIONS_PER_TEST,
             tag='disable_delay_ramp')

# Gobi-specific tests:

# Similarly, we can't be sure what the relative timings of the
# completion of the session starter thread and arrival of the disable
# request are.  Try pushing the start thread completion way out.
test_env = test_environment.CellularOTATestEnvironment()
job.run_test('network_3GDisableWhileConnecting',
             test_env=test_env,
             timeout_s=20,
             delay_before_disable_ms=200,
             async_connect_sleep_ms=3000,
             iterations=ITERATIONS_PER_TEST,
             tag='short_delay_disable')

test_env = test_environment.CellularOTATestEnvironment()
job.run_test('network_3GDisableWhileConnecting',
             test_env=test_env,
             timeout_s=20,
             delay_before_disable_ms=0,
             disable_delay_per_iteration_ms=0,
             connect_fails_with_error_sending_qmi_request=1,
             iterations=1,
             tag='qmi_failure')