Home | History | Annotate | Download | only in cellular_ServiceName
      1 # Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import logging
      6 
      7 from autotest_lib.client.bin import test
      8 from autotest_lib.client.common_lib import error
      9 from autotest_lib.client.cros.cellular import mm1_constants
     10 from autotest_lib.client.cros.cellular import test_environment
     11 from autotest_lib.client.cros.cellular.pseudomodem import modem_3gpp
     12 from autotest_lib.client.cros.cellular.pseudomodem import modem_cdma
     13 from autotest_lib.client.cros.cellular.pseudomodem import sim
     14 
     15 TEST_MODEMS_MODULE_PATH = __file__
     16 
     17 # Use valid carrier info since shill looks this up in its database.
     18 TEST_3GPP_HOME_CARRIER = 'Orange'
     19 TEST_3GPP_HOME_CARRIER_MCC = '232'
     20 TEST_3GPP_HOME_CARRIER_MNC = '05'
     21 TEST_3GPP_ROAMING_CARRIER = 'T-Mobile'
     22 TEST_3GPP_ROAMING_OPERATOR_CODE = '23203'
     23 TEST_CDMA_CARRIER = 'Test Network'
     24 TEST_CDMA_SID = 99998
     25 
     26 class TestModemRoaming(modem_3gpp.Modem3gpp):
     27     """
     28     Test modem that registers with a roaming network.
     29 
     30     """
     31     def __init__(self):
     32         roaming_networks = [modem_3gpp.Modem3gpp.GsmNetwork(
     33                 operator_long=TEST_3GPP_ROAMING_CARRIER,
     34                 operator_short=TEST_3GPP_ROAMING_CARRIER,
     35                 operator_code=TEST_3GPP_ROAMING_OPERATOR_CODE,
     36                 status=mm1_constants.
     37                         MM_MODEM_3GPP_NETWORK_AVAILABILITY_AVAILABLE,
     38                 access_technology=mm1_constants.MM_MODEM_ACCESS_TECHNOLOGY_LTE)]
     39         modem_3gpp.Modem3gpp.__init__(self, roaming_networks=roaming_networks)
     40 
     41 
     42     def RegisterWithNetwork(
     43         self, operator_id='', return_cb=None, raise_cb=None):
     44         """ Overriden from superclass. """
     45         logging.info('Force modem to register with roaming network |%s| '
     46                      'instead of |%s|',
     47                      TEST_3GPP_ROAMING_OPERATOR_CODE, operator_id)
     48         modem_3gpp.Modem3gpp.RegisterWithNetwork(
     49                 self, TEST_3GPP_ROAMING_OPERATOR_CODE, return_cb, raise_cb)
     50 
     51 
     52 class TestSIM(sim.SIM):
     53     """
     54     Test SIM with a specific carrier name that the tests below are expecting.
     55 
     56     """
     57     def __init__(self):
     58         carrier = sim.SIM.Carrier()
     59         carrier.mcc = TEST_3GPP_HOME_CARRIER_MCC
     60         carrier.mnc = TEST_3GPP_HOME_CARRIER_MNC
     61         carrier.operator_name = TEST_3GPP_HOME_CARRIER
     62         carrier.operator_id = carrier.mcc + carrier.mnc
     63         sim.SIM.__init__(self, carrier,
     64                          mm1_constants.MM_MODEM_ACCESS_TECHNOLOGY_LTE)
     65 
     66 
     67 class TestCdmaModem(modem_cdma.ModemCdma):
     68     """
     69     Test modem that simulates a CDMA modem.
     70 
     71     """
     72     def __init__(self):
     73         network = modem_cdma.ModemCdma.CdmaNetwork(sid=TEST_CDMA_SID)
     74         modem_cdma.ModemCdma.__init__(self, home_network=network)
     75 
     76 
     77 class cellular_ServiceName(test.test):
     78     """
     79     Verifies that shill reports the correct service name depending on the SIM
     80     provider information and the network registration status.
     81 
     82     """
     83     version = 1
     84 
     85     def _verify_service_name(self, expected_name):
     86         """
     87         Verifies the service name is as expected.
     88 
     89         @param expected_name: Service name that is expected.
     90         @raises error.TestFail() if the service name and expected name does not
     91                 match.
     92 
     93         """
     94         cellular_service = \
     95                 self.test_env.shill.wait_for_cellular_service_object()
     96         service_name = cellular_service.GetProperties()['Name']
     97         if service_name != expected_name:
     98             raise error.TestFail('Expected service name: |%s|, '
     99                                  'actual service name: |%s|' %
    100                                  (expected_name, service_name))
    101         logging.info('Successfully verified service name |%s|',
    102                      expected_name)
    103 
    104 
    105     def _test_3gpp_no_roaming(self):
    106         """
    107         Checks the service name when the SIM and the network is the same
    108         carrier.
    109 
    110         """
    111         logging.info('Testing service name for 3GPP no roaming')
    112         self.test_env = test_environment.CellularPseudoMMTestEnvironment(
    113                 pseudomm_args=({'family': '3GPP',
    114                                 'test-module': TEST_MODEMS_MODULE_PATH,
    115                                 'test-sim-class': 'TestSIM'},))
    116         with self.test_env:
    117             self._verify_service_name(TEST_3GPP_HOME_CARRIER)
    118 
    119 
    120     def _test_3gpp_roaming(self):
    121         """
    122         Checks the service name when roaming.
    123 
    124         The service name while roaming should be (per 3GPP TS 31.102 and
    125         annex A of 122.101):
    126                 <home provider> | <serving operator>
    127 
    128         """
    129         logging.info('Testing service name for 3GPP roaming')
    130         self.test_env = test_environment.CellularPseudoMMTestEnvironment(
    131                 pseudomm_args=({'family': '3GPP',
    132                                 'test-module': TEST_MODEMS_MODULE_PATH,
    133                                 'test-modem-class': 'TestModemRoaming',
    134                                 'test-sim-class': 'TestSIM'},))
    135         with self.test_env:
    136             expected_name = (TEST_3GPP_HOME_CARRIER + ' | ' +
    137                              TEST_3GPP_ROAMING_CARRIER)
    138             self._verify_service_name(expected_name)
    139 
    140 
    141     def _test_cdma(self):
    142         """ Checks the service name for a CDMA network. """
    143         logging.info('Testing service name for CDMA')
    144         self.test_env = test_environment.CellularPseudoMMTestEnvironment(
    145                 pseudomm_args=({'family': 'CDMA',
    146                                 'test-module': TEST_MODEMS_MODULE_PATH,
    147                                 'test-modem-class': 'TestCdmaModem'},))
    148         with self.test_env:
    149             self._verify_service_name(TEST_CDMA_CARRIER)
    150 
    151 
    152     def run_once(self):
    153         tests = [self._test_3gpp_no_roaming,
    154                  self._test_3gpp_roaming,
    155                  self._test_cdma]
    156 
    157         for test in tests:
    158             test()
    159