83 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
| # 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 dbus
 | |
| import logging
 | |
| import time
 | |
| 
 | |
| 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.networking import pm_proxy
 | |
| 
 | |
| class cellular_DeferredRegistration(test.test):
 | |
|     """
 | |
|     Tests that shill can handle temporary registration loss without
 | |
|     disconnecting the service because some modems periodically go searching for
 | |
|     a better signal while still connected to the network.  Conversely, make
 | |
|     sure that shill still disconnects a service that has suffered a
 | |
|     registration loss for an extended period of time (>15s).
 | |
| 
 | |
|     """
 | |
|     version = 1
 | |
| 
 | |
|     DEFERRED_REGISTRATION_TIMEOUT_SECONDS = 15
 | |
| 
 | |
|     def _init(self):
 | |
|         self.pseudomm = pm_proxy.PseudoMMProxy.get_proxy()
 | |
|         service = self.test_env.shill.find_cellular_service_object()
 | |
|         self.test_env.shill.connect_service_synchronous(
 | |
|                 service,
 | |
|                 timeout_seconds=self.test_env.shill.SERVICE_CONNECT_TIMEOUT)
 | |
| 
 | |
| 
 | |
|     def _set_modem_registration_state(self, state):
 | |
|         self.pseudomm.get_modem().iface_properties.Set(
 | |
|                 mm1_constants.I_MODEM_3GPP,
 | |
|                 'RegistrationState',
 | |
|                 dbus.types.UInt32(state))
 | |
| 
 | |
| 
 | |
|     def _test_temporary_registration_loss(self):
 | |
|         logging.info('Verifying temporary loss of registration behavior')
 | |
|         self._set_modem_registration_state(
 | |
|                 mm1_constants.MM_MODEM_3GPP_REGISTRATION_STATE_SEARCHING)
 | |
|         time.sleep(self.DEFERRED_REGISTRATION_TIMEOUT_SECONDS / 2)
 | |
|         self._set_modem_registration_state(
 | |
|                 mm1_constants.MM_MODEM_3GPP_REGISTRATION_STATE_HOME)
 | |
|         time.sleep(self.DEFERRED_REGISTRATION_TIMEOUT_SECONDS * 2)
 | |
|         if self.test_env.shill.find_cellular_service_object() is None:
 | |
|             raise error.TestFail('Cellular service should not have been '
 | |
|                                  'destroyed after temporary registration loss.')
 | |
|         logging.info('Successfully verified temporary loss of registration '
 | |
|                      'behavior')
 | |
| 
 | |
| 
 | |
|     def _test_permanent_registration_loss(self):
 | |
|         logging.info('Verifying permanent loss of registration behavior')
 | |
|         self._set_modem_registration_state(
 | |
|                 mm1_constants.MM_MODEM_3GPP_REGISTRATION_STATE_SEARCHING)
 | |
|         time.sleep(self.DEFERRED_REGISTRATION_TIMEOUT_SECONDS * 2)
 | |
|         if self.test_env.shill.find_cellular_service_object() is not None:
 | |
|             raise error.TestFail('Cellular service should have been destroyed '
 | |
|                                  'after permanent registration loss.')
 | |
|         logging.info('Successfully verified permanent loss of registration '
 | |
|                      'behavior')
 | |
| 
 | |
| 
 | |
|     def run_once(self):
 | |
|         """Called by autotest to run this test."""
 | |
| 
 | |
|         with test_environment.CellularPseudoMMTestEnvironment(
 | |
|                 pseudomm_args=({'family': '3GPP'},)) as self.test_env:
 | |
|             self._init()
 | |
| 
 | |
|             tests = [self._test_temporary_registration_loss,
 | |
|                      self._test_permanent_registration_loss]
 | |
| 
 | |
|             for test in tests:
 | |
|                 test()
 |