# Copyright (c) 2014 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.
import logging
from autotest_lib.client.bin import test
from autotest_lib.client.common_lib import error
from autotest_lib.client.cros.cellular import mm1_constants
from autotest_lib.client.cros.cellular import test_environment
from autotest_lib.client.cros.cellular.pseudomodem import modem_3gpp
from autotest_lib.client.cros.cellular.pseudomodem import modem_cdma
from autotest_lib.client.cros.cellular.pseudomodem import sim
TEST_MODEMS_MODULE_PATH = __file__
# Use valid carrier info since shill looks this up in its database.
TEST_3GPP_HOME_CARRIER = 'Orange'
TEST_3GPP_HOME_CARRIER_MCC = '232'
TEST_3GPP_HOME_CARRIER_MNC = '05'
TEST_3GPP_ROAMING_CARRIER = 'T-Mobile'
TEST_3GPP_ROAMING_OPERATOR_CODE = '23203'
TEST_CDMA_CARRIER = 'Test Network'
TEST_CDMA_SID = 99998
class TestModemRoaming(modem_3gpp.Modem3gpp):
"""
Test modem that registers with a roaming network.
"""
def __init__(self):
roaming_networks = [modem_3gpp.Modem3gpp.GsmNetwork(
operator_long=TEST_3GPP_ROAMING_CARRIER,
operator_short=TEST_3GPP_ROAMING_CARRIER,
operator_code=TEST_3GPP_ROAMING_OPERATOR_CODE,
status=mm1_constants.
MM_MODEM_3GPP_NETWORK_AVAILABILITY_AVAILABLE,
access_technology=mm1_constants.MM_MODEM_ACCESS_TECHNOLOGY_LTE)]
modem_3gpp.Modem3gpp.__init__(self, roaming_networks=roaming_networks)
def RegisterWithNetwork(
self, operator_id='', return_cb=None, raise_cb=None):
""" Overriden from superclass. """
logging.info('Force modem to register with roaming network |%s| '
'instead of |%s|',
TEST_3GPP_ROAMING_OPERATOR_CODE, operator_id)
modem_3gpp.Modem3gpp.RegisterWithNetwork(
self, TEST_3GPP_ROAMING_OPERATOR_CODE, return_cb, raise_cb)
class TestSIM(sim.SIM):
"""
Test SIM with a specific carrier name that the tests below are expecting.
"""
def __init__(self):
carrier = sim.SIM.Carrier()
carrier.mcc = TEST_3GPP_HOME_CARRIER_MCC
carrier.mnc = TEST_3GPP_HOME_CARRIER_MNC
carrier.operator_name = TEST_3GPP_HOME_CARRIER
carrier.operator_id = carrier.mcc + carrier.mnc
sim.SIM.__init__(self, carrier,
mm1_constants.MM_MODEM_ACCESS_TECHNOLOGY_LTE)
class TestCdmaModem(modem_cdma.ModemCdma):
"""
Test modem that simulates a CDMA modem.
"""
def __init__(self):
network = modem_cdma.ModemCdma.CdmaNetwork(sid=TEST_CDMA_SID)
modem_cdma.ModemCdma.__init__(self, home_network=network)
class cellular_ServiceName(test.test):
"""
Verifies that shill reports the correct service name depending on the SIM
provider information and the network registration status.
"""
version = 1
def _verify_service_name(self, expected_name):
"""
Verifies the service name is as expected.
@param expected_name: Service name that is expected.
@raises error.TestFail() if the service name and expected name does not
match.
"""
cellular_service = \
self.test_env.shill.wait_for_cellular_service_object()
service_name = cellular_service.GetProperties()['Name']
if service_name != expected_name:
raise error.TestFail('Expected service name: |%s|, '
'actual service name: |%s|' %
(expected_name, service_name))
logging.info('Successfully verified service name |%s|',
expected_name)
def _test_3gpp_no_roaming(self):
"""
Checks the service name when the SIM and the network is the same
carrier.
"""
logging.info('Testing service name for 3GPP no roaming')
self.test_env = test_environment.CellularPseudoMMTestEnvironment(
pseudomm_args=({'family': '3GPP',
'test-module': TEST_MODEMS_MODULE_PATH,
'test-sim-class': 'TestSIM'},))
with self.test_env:
self._verify_service_name(TEST_3GPP_HOME_CARRIER)
def _test_3gpp_roaming(self):
"""
Checks the service name when roaming.
The service name while roaming should be (per 3GPP TS 31.102 and
annex A of 122.101):
<home provider> | <serving operator>
"""
logging.info('Testing service name for 3GPP roaming')
self.test_env = test_environment.CellularPseudoMMTestEnvironment(
pseudomm_args=({'family': '3GPP',
'test-module': TEST_MODEMS_MODULE_PATH,
'test-modem-class': 'TestModemRoaming',
'test-sim-class': 'TestSIM'},))
with self.test_env:
expected_name = (TEST_3GPP_HOME_CARRIER + ' | ' +
TEST_3GPP_ROAMING_CARRIER)
self._verify_service_name(expected_name)
def _test_cdma(self):
""" Checks the service name for a CDMA network. """
logging.info('Testing service name for CDMA')
self.test_env = test_environment.CellularPseudoMMTestEnvironment(
pseudomm_args=({'family': 'CDMA',
'test-module': TEST_MODEMS_MODULE_PATH,
'test-modem-class': 'TestCdmaModem'},))
with self.test_env:
self._verify_service_name(TEST_CDMA_CARRIER)
def run_once(self):
tests = [self._test_3gpp_no_roaming,
self._test_3gpp_roaming,
self._test_cdma]
for test in tests:
test()