blob: f3a388fd3efa2b989bd57455f768203b14227caf [file] [log] [blame]
#!/usr/bin/env python3
# Copyright 2012 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import unittest
from unittest import mock
from cros.factory.test import device_data
from cros.factory.test.pytests import probe_cellular_info
from cros.factory.test.rf import cellular
from cros.factory.utils.arg_utils import Args
def MakeProbeModemInfoMock(mapping):
def Get(fields):
return [mapping.get(field, None) for field in fields]
return mock.Mock(side_effect=Get)
def MakeProbeSimInfoMock(mapping):
def Get(fields):
return [[mapping.get(field, None) for field in fields]]
return mock.Mock(side_effect=Get)
class ProbeCellularInfoTestTest(unittest.TestCase):
def setUp(self):
self.test = probe_cellular_info.ProbeCellularInfoTest()
@mock.patch.object(cellular, 'ProbeModemInfo',
MakeProbeModemInfoMock({
'imei': '838293836198373',
'meid': 'Q9298301CDF827'
}))
@mock.patch.object(cellular, 'ProbeSimInfo', mock.Mock(return_value=[]))
@mock.patch('cros.factory.utils.process_utils.CheckOutput')
@mock.patch('cros.factory.test.event_log.Log')
@mock.patch('cros.factory.testlog.testlog.LogParam')
@mock.patch('cros.factory.test.device_data.UpdateDeviceData')
def testValid(self, update_device_data_mock, log_param_mock, log_mock,
check_output_mock):
stdout = 'test_modem_status_stdout'
log_param_calls = [
mock.call('modem_status_stdout', stdout),
mock.call('imei', '838293836198373'),
mock.call('meid', 'Q9298301CDF827')]
check_output_mock.return_value = stdout
self.test.args = Args(*self.test.ARGS).Parse({})
self.test.runTest()
check_output_mock.assert_called_once_with(['modem', 'status'], log=True)
self.assertEqual(log_param_mock.call_args_list, log_param_calls)
log_mock.assert_called_once_with(
'cellular_info', modem_status_stdout=stdout,
imei='838293836198373', meid='Q9298301CDF827')
update_device_data_mock.assert_called_once_with(
{'component.cellular.imei': '838293836198373',
'component.cellular.meid': 'Q9298301CDF827'})
@mock.patch.object(cellular, 'ProbeModemInfo',
MakeProbeModemInfoMock({'Imei': '359636040066332'}))
@mock.patch.object(cellular, 'ProbeSimInfo',
MakeProbeSimInfoMock(
{'SimIdentifier': '89148000000328035895'}))
@mock.patch('cros.factory.utils.process_utils.CheckOutput')
@mock.patch('cros.factory.test.event_log.Log')
@mock.patch('cros.factory.testlog.testlog.LogParam')
@mock.patch('cros.factory.test.device_data.UpdateDeviceData')
def testValidLTE(self, update_device_data_mock, log_param_mock, log_mock,
check_output_mock):
stdout = 'test_modem_status_stdout'
log_param_calls = [
mock.call('modem_status_stdout', stdout),
mock.call('lte_imei', '359636040066332'),
mock.call('lte_iccid', '89148000000328035895')]
check_output_mock.return_value = stdout
self.test.args = Args(*self.test.ARGS).Parse(
{'probe_imei': False,
'probe_meid': False,
'probe_lte_imei': True,
'probe_lte_iccid': True})
self.test.runTest()
check_output_mock.assert_called_once_with(['modem', 'status'], log=True)
self.assertEqual(log_param_mock.call_args_list, log_param_calls)
log_mock.assert_called_once_with(
'cellular_info', modem_status_stdout=stdout,
lte_imei='359636040066332', lte_iccid='89148000000328035895')
update_device_data_mock.assert_called_once_with(
{'component.cellular.lte_imei': '359636040066332',
'component.cellular.lte_iccid': '89148000000328035895'})
@mock.patch.object(cellular, 'ProbeModemInfo',
MakeProbeModemInfoMock({'meid': 'Q9298301CDF827'}))
@mock.patch.object(cellular, 'ProbeSimInfo', mock.Mock(return_value=[]))
@mock.patch('cros.factory.utils.process_utils.CheckOutput')
@mock.patch('cros.factory.test.event_log.Log')
@mock.patch('cros.factory.testlog.testlog.LogParam')
@mock.patch.object(device_data, 'UpdateDeviceData', mock.Mock())
def testMissingIMEI(self, log_param_mock, log_mock, check_output_mock):
stdout = 'test_modem_status_stdout'
log_param_calls = [
mock.call('modem_status_stdout', stdout),
mock.call('imei', None),
mock.call('meid', 'Q9298301CDF827')]
check_output_mock.return_value = stdout
self.test.args = Args(*self.test.ARGS).Parse({})
self.assertRaisesRegex(AssertionError, r"Missing elements.+: \['imei'\]",
self.test.runTest)
check_output_mock.assert_called_once_with(['modem', 'status'], log=True)
self.assertEqual(log_param_mock.call_args_list, log_param_calls)
log_mock.assert_called_once_with(
'cellular_info', modem_status_stdout=stdout,
imei=None, meid='Q9298301CDF827')
@mock.patch.object(cellular, 'ProbeModemInfo',
MakeProbeModemInfoMock(
{'EquipmentIdentifier': '862227050001326'}))
@mock.patch.object(cellular, 'ProbeSimInfo', mock.Mock(return_value=[]))
@mock.patch('cros.factory.utils.process_utils.CheckOutput')
@mock.patch('cros.factory.test.event_log.Log')
@mock.patch('cros.factory.testlog.testlog.LogParam')
@mock.patch('cros.factory.test.device_data.UpdateDeviceData')
def testSpecifiedFields(self, update_device_data_mock, log_param_mock,
log_mock, check_output_mock):
stdout = 'test_modem_status_stdout'
log_param_calls = [
mock.call('modem_status_stdout', stdout),
mock.call('imei', '862227050001326')
]
check_output_mock.return_value = stdout
self.test.args = Args(*self.test.ARGS).Parse({
'probe_meid': False,
'fields': {
'imei': 'EquipmentIdentifier'
}
})
self.test.runTest()
check_output_mock.assert_called_once_with(['modem', 'status'], log=True)
log_mock.assert_called_once_with(
'cellular_info', modem_status_stdout=stdout, imei='862227050001326')
self.assertEqual(log_param_mock.call_args_list, log_param_calls)
update_device_data_mock.assert_called_once_with(
{'component.cellular.imei': '862227050001326'})
if __name__ == '__main__':
unittest.main()