Home | History | Annotate | Download | only in state_machines
      1 #!/usr/bin/env python
      2 
      3 # Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
      4 # Use of this source code is governed by a BSD-style license that can be
      5 # found in the LICENSE file.
      6 
      7 import common
      8 import network_identity_machine
      9 
     10 import logging
     11 import mox
     12 import unittest
     13 
     14 import at_transceiver
     15 import global_state
     16 import modem_configuration
     17 import task_loop
     18 
     19 class NetworkIdentityMachineUnittest(unittest.TestCase):
     20     """ Test fixture for NetworkIdentityMachine class. """
     21 
     22     def setUp(self):
     23         self._mox = mox.Mox()
     24         self._modem_conf = modem_configuration.ModemConfiguration()
     25         self._task_loop = self._mox.CreateMock(task_loop.TaskLoop)
     26         self._transceiver = self._mox.CreateMock(at_transceiver.ATTransceiver)
     27 
     28         self._machine = network_identity_machine.NetworkIdentityMachine(
     29                 global_state.GlobalState(),
     30                 self._transceiver,
     31                 self._modem_conf)
     32 
     33         # Mock out the task_loop
     34         self._machine._task_loop = self._task_loop
     35 
     36     def test_read_sim_imsi(self):
     37         """ Test the imsi encoding in read_sim_imsi. """
     38 
     39         self._machine._mcc = '123'
     40         self._machine._mnc = '456'
     41         self._machine._misn = '123456789'
     42         expected_response = '081932541632547698'
     43 
     44         self._task_loop.post_task_after_delay(
     45                 self._transceiver.process_wardmodem_response, 0,
     46                 'wm_response_sim_info_success', expected_response)
     47         self._task_loop.post_task_after_delay(
     48                 self._transceiver.process_wardmodem_response, 0,
     49                 'wm_response_ok')
     50 
     51         self._mox.ReplayAll()
     52         self._machine.read_sim_imsi(9)
     53         self._mox.VerifyAll()
     54 
     55     def test_check_length_and_respond_successful(self):
     56         """ Test _check_length_and_respond. """
     57         response1 = 'blahblah'
     58         response2_clipped = 'moomoo'
     59         response2 = response2_clipped + '2'
     60         self._task_loop.post_task_after_delay(
     61                 self._transceiver.process_wardmodem_response, 0,
     62                 'wm_response_sim_info_success', response1)
     63         self._task_loop.post_task_after_delay(
     64                 self._transceiver.process_wardmodem_response, 0,
     65                 'wm_response_ok')
     66         self._task_loop.post_task_after_delay(
     67                 self._transceiver.process_wardmodem_response, 0,
     68                 'wm_response_sim_info_success', response2_clipped)
     69         self._task_loop.post_task_after_delay(
     70                 self._transceiver.process_wardmodem_response, 0,
     71                 'wm_response_ok')
     72 
     73         self._mox.ReplayAll()
     74         self._machine._check_length_and_respond(response1, '4')
     75         self._machine._check_length_and_respond(response2, '3')
     76         self._mox.VerifyAll()
     77 
     78 
     79     def test_check_length_and_respond_failure(self):
     80         """ Test _check_length_and_respond. """
     81         response = 'BOOoooo..'
     82 
     83         self._task_loop.post_task_after_delay(
     84                 self._transceiver.process_wardmodem_response, 0,
     85                 'wm_response_sim_info_error_too_long')
     86         self._task_loop.post_task_after_delay(
     87                 self._transceiver.process_wardmodem_response, 0,
     88                 'wm_response_ok')
     89 
     90         self._mox.ReplayAll()
     91         self._machine._check_length_and_respond(response, '24')
     92         self._mox.VerifyAll()
     93 
     94 
     95 if __name__ == '__main__':
     96     logging.basicConfig(level=logging.DEBUG)
     97     unittest.main()
     98