• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
5import dbus
6import dbus.types
7import time
8
9from autotest_lib.client.cros.cellular import mm1_constants
10from autotest_lib.client.cros.cellular.pseudomodem import modem_3gpp
11from autotest_lib.client.cros.cellular.pseudomodem import sim
12from autotest_lib.client.cros.cellular.pseudomodem import utils as pm_utils
13
14I_ACTIVATION_TEST = 'Interface.LTEActivationTest'
15
16class TestModem(modem_3gpp.Modem3gpp):
17    """
18    Base class for the custom 3GPP fake modems that are defined in this test.
19    This modem boots up as unprovisioned & becomes activated only if it has
20    been explicitly activated by calling CompleteCellularActivation
21
22    """
23    def __init__(self,
24                 state_machine_factory=None,
25                 bus=None,
26                 device='pseudomodem0',
27                 index=0,
28                 roaming_networks=None,
29                 config=None):
30        super(TestModem, self).__init__(state_machine_factory,
31                                        bus=bus,
32                                        device=device,
33                                        roaming_networks=roaming_networks,
34                                        config=config)
35        # Update the registered susbscription state as unprovisioned
36        # for this activation test
37        self._cached_registered_subscription_state = (
38                mm1_constants.MM_MODEM_3GPP_SUBSCRIPTION_STATE_UNPROVISIONED)
39
40
41    def _InitializeProperties(self):
42        props = modem_3gpp.Modem3gpp._InitializeProperties(self)
43        modem_props = props[mm1_constants.I_MODEM]
44        modem_props['OwnNumbers'] = ['0000000000']
45        modem_props['AccessTechnologies'] = dbus.types.UInt32(
46            mm1_constants.MM_MODEM_ACCESS_TECHNOLOGY_LTE)
47        modem_props['ModemCapabilities'] = dbus.types.UInt32(
48            mm1_constants.MM_MODEM_CAPABILITY_LTE)
49        modem_props['CurrentCapabilities'] = dbus.types.UInt32(
50            mm1_constants.MM_MODEM_CAPABILITY_LTE)
51
52        # For the purposes of this test, introduce a property to help
53        # verify that a reset has taken place. Expose this under a test
54        # specific interface.
55        if hasattr(self, '_properties'):
56            reset_called = \
57                self._properties[I_ACTIVATION_TEST]['ResetCalled']
58        else:
59            reset_called = False
60        props[I_ACTIVATION_TEST] = {
61            'ResetCalled' : dbus.types.Boolean(reset_called)
62        }
63        return props
64
65
66    @pm_utils.log_dbus_method()
67    def Reset(self):
68        self.Set(
69            I_ACTIVATION_TEST, 'ResetCalled', dbus.types.Boolean(True))
70        modem_3gpp.Modem3gpp.Reset(self)
71
72
73class ResetRequiredForActivationModem(TestModem):
74    """
75    Fake modem boots up as unprovisioned & becomes activated only if it has
76    been explicitly activated by calling CompleteCellularActivation
77    and has been reset at least once after initiating activatation
78    """
79    def RegisterWithNetwork(
80            self, operator_id='', return_cb=None, raise_cb=None):
81        if self.Get(I_ACTIVATION_TEST, 'ResetCalled'):
82            modem_3gpp.Modem3gpp.RegisterWithNetwork(
83                    self, operator_id, return_cb, raise_cb)
84
85
86class TestSIM(sim.SIM):
87    """ SIM instantiated with the default test network, for ease of use. """
88    def __init__(self):
89        # Shill's activating ICCID store tracks which SIM identifiers are in
90        # the process of activation. If we use the same SIM identifier for
91        # every test pass, then a failed test may leave a stale entry in the
92        # activating ICCD store which will erroneously mark the SIM as pending
93        # activation. So, to avoid this, try to use a unique SIM identifier
94        # each time.
95        sim_identifier = int(time.time())
96        sim.SIM.__init__(
97                self,
98                sim.SIM.Carrier('test'),
99                mm1_constants.MM_MODEM_ACCESS_TECHNOLOGY_LTE,
100                msin=str(sim_identifier))
101