普通文本  |  101行  |  4.02 KB

# 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 time

from autotest_lib.client.cros.cellular import mm1_constants
from autotest_lib.client.cros.cellular.pseudomodem import modem_3gpp
from autotest_lib.client.cros.cellular.pseudomodem import sim
from autotest_lib.client.cros.cellular.pseudomodem import utils as pm_utils

I_ACTIVATION_TEST = 'Interface.LTEActivationTest'

class TestModem(modem_3gpp.Modem3gpp):
    """
    Base class for the custom 3GPP fake modems that are defined in this test.
    This modem boots up as unprovisioned & becomes activated only if it has
    been explicitly activated by calling CompleteCellularActivation

    """
    def __init__(self,
                 state_machine_factory=None,
                 bus=None,
                 device='pseudomodem0',
                 index=0,
                 roaming_networks=None,
                 config=None):
        super(TestModem, self).__init__(state_machine_factory,
                                        bus=bus,
                                        device=device,
                                        roaming_networks=roaming_networks,
                                        config=config)
        # Update the registered susbscription state as unprovisioned
        # for this activation test
        self._cached_registered_subscription_state = (
                mm1_constants.MM_MODEM_3GPP_SUBSCRIPTION_STATE_UNPROVISIONED)


    def _InitializeProperties(self):
        props = modem_3gpp.Modem3gpp._InitializeProperties(self)
        modem_props = props[mm1_constants.I_MODEM]
        modem_props['OwnNumbers'] = ['0000000000']
        modem_props['AccessTechnologies'] = dbus.types.UInt32(
            mm1_constants.MM_MODEM_ACCESS_TECHNOLOGY_LTE)
        modem_props['ModemCapabilities'] = dbus.types.UInt32(
            mm1_constants.MM_MODEM_CAPABILITY_LTE)
        modem_props['CurrentCapabilities'] = dbus.types.UInt32(
            mm1_constants.MM_MODEM_CAPABILITY_LTE)

        # For the purposes of this test, introduce a property to help
        # verify that a reset has taken place. Expose this under a test
        # specific interface.
        if hasattr(self, '_properties'):
            reset_called = \
                self._properties[I_ACTIVATION_TEST]['ResetCalled']
        else:
            reset_called = False
        props[I_ACTIVATION_TEST] = {
            'ResetCalled' : dbus.types.Boolean(reset_called)
        }
        return props


    @pm_utils.log_dbus_method()
    def Reset(self):
        self.Set(
            I_ACTIVATION_TEST, 'ResetCalled', dbus.types.Boolean(True))
        modem_3gpp.Modem3gpp.Reset(self)


class ResetRequiredForActivationModem(TestModem):
    """
    Fake modem boots up as unprovisioned & becomes activated only if it has
    been explicitly activated by calling CompleteCellularActivation
    and has been reset at least once after initiating activatation
    """
    def RegisterWithNetwork(
            self, operator_id='', return_cb=None, raise_cb=None):
        if self.Get(I_ACTIVATION_TEST, 'ResetCalled'):
            modem_3gpp.Modem3gpp.RegisterWithNetwork(
                    self, operator_id, return_cb, raise_cb)


class TestSIM(sim.SIM):
    """ SIM instantiated with the default test network, for ease of use. """
    def __init__(self):
        # Shill's activating ICCID store tracks which SIM identifiers are in
        # the process of activation. If we use the same SIM identifier for
        # every test pass, then a failed test may leave a stale entry in the
        # activating ICCD store which will erroneously mark the SIM as pending
        # activation. So, to avoid this, try to use a unique SIM identifier
        # each time.
        sim_identifier = int(time.time())
        sim.SIM.__init__(
                self,
                sim.SIM.Carrier('test'),
                mm1_constants.MM_MODEM_ACCESS_TECHNOLOGY_LTE,
                msin=str(sim_identifier))