# 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_Signal"
PURPOSE = "Verify cell modem properly deals with technology changes."
CRITERIA = """Modem reregisters after technology changes."""
SUITE = "cell_emulator"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "network"
TEST_TYPE = "client"

DOC = """
  Test that a modem can reregister after the network technology abruptly
  changes.
"""

from autotest_lib.client.cros.cellular import cellular
from autotest_lib.client.cros.cellular import labconfig


config = labconfig.Configuration(args)
technologies = config.get_technologies()
gsm_technologies = [tech for tech in technologies
    if cellular.TechnologyToFamily[tech] == cellular.TechnologyFamily.UMTS]

# One can only roam with a given technology family
job.run_test('cellular_Signal',
             config=config,
             technologies=gsm_technologies,
             wait_for_disc=True,
             verify_set_power=False,
             tag='GSM.Wait')

job.run_test('cellular_Signal',
             config=config,
             technologies=gsm_technologies,
             wait_for_disc=False,
             verify_set_power=False,
             tag='GSM.NoWait')

# TODO(jglasgow): run tests for CDMA technologies
