# 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 dbus.types
import gobject
from autotest_lib.client.cros.cellular.pseudomodem import modem_cdma
from autotest_lib.client.cros.cellular.pseudomodem import pm_errors
from autotest_lib.client.cros.cellular.pseudomodem import utils as pm_utils
I_ACTIVATION_TEST = 'Interface.CDMAActivationTest'
class UnactivatedCdmaModem(modem_cdma.ModemCdma):
""" A |ModemCDMA| subclass that starts off unactivated. """
def __init__(self):
super(UnactivatedCdmaModem, self).__init__(
home_network=modem_cdma.ModemCdma.CdmaNetwork(activated=False))
class ActivationRetryModem(modem_cdma.ModemCdma):
"""
TestModem to test that shill retries OTASP activation until it succeeds.
"""
def __init__(self, num_activate_retries):
# This assignment is needed before the call to super.__init__(...)
self.activate_count = 0
super(ActivationRetryModem, self).__init__(
home_network=modem_cdma.ModemCdma.CdmaNetwork(activated=False))
self._num_activate_retries = num_activate_retries
def _InitializeProperties(self):
props = super(ActivationRetryModem, self)._InitializeProperties()
# For the purposes of this test, introduce a property that
# stores how many times "Activate" has been called on this
# modem.
props[I_ACTIVATION_TEST] = {
'ActivateCount' : dbus.types.UInt32(self.activate_count)
}
return props
def _IncrementActivateCount(self):
self.activate_count += 1
self.Set(I_ACTIVATION_TEST,
'ActivateCount',
self.activate_count)
@pm_utils.log_dbus_method(return_cb_arg='return_cb',
raise_cb_arg='raise_cb')
def Activate(self, carrier, return_cb, raise_cb):
"""
Activation will only succeed on the NUM_ACTIVATE_RETRIESth try.
"""
self._IncrementActivateCount()
if (self.activate_count == self._num_activate_retries):
super(ActivationRetryModem, self).Activate(
carrier, return_cb, raise_cb)
else:
def _raise_activation_error():
raise_cb(pm_errors.MMCdmaActivationError(
pm_errors.MMCdmaActivationError.START_FAILED))
gobject.idle_add(_raise_activation_error)