blob: dfedecbe72b0d86eb54c37308b9b078471903044 [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright 2013 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.
"""Unittest for serial_utils."""
import unittest
from unittest import mock
import serial
from cros.factory.test.fixture import arduino
_DEFAULT_DRIVER = 'cdc_acm'
_DEFAULT_READY_DELAY_SECS = 2.0
# pylint: disable=no-value-for-parameter
class ArduinoControllerTest(unittest.TestCase):
def setUp(self):
self.device = arduino.ArduinoController()
def tearDown(self):
del self.device
@mock.patch('time.sleep')
@mock.patch('cros.factory.test.utils.serial_utils.SerialDevice.Connect')
def testConnectDefault(self, connect_mock, sleep_mock):
self.device.Ping = mock.Mock(return_value=True)
self.device.Connect()
connect_mock.assert_called_once_with(driver=_DEFAULT_DRIVER)
sleep_mock.assert_called_once_with(_DEFAULT_READY_DELAY_SECS)
self.device.Ping.assert_called_once_with()
@mock.patch('time.sleep')
@mock.patch('cros.factory.test.utils.serial_utils.SerialDevice.Connect')
def testCustomReadyDelay(self, connect_mock, sleep_mock):
ready_delay_secs = 0.5
self.device = arduino.ArduinoController(ready_delay_secs=ready_delay_secs)
self.device.Ping = mock.Mock(return_value=True)
self.device.Connect()
connect_mock.assert_called_once_with(driver=_DEFAULT_DRIVER)
sleep_mock.assert_called_once_with(ready_delay_secs)
self.device.Ping.assert_called_once_with()
@mock.patch('time.sleep')
@mock.patch('cros.factory.test.utils.serial_utils.SerialDevice.Connect')
def testCustomDriver(self, connect_mock, sleep_mock):
custom_driver = 'CustomDriver'
self.device.Ping = mock.Mock(return_value=True)
self.device.Connect(driver=custom_driver)
connect_mock.assert_called_once_with(driver=custom_driver)
sleep_mock.assert_called_once_with(_DEFAULT_READY_DELAY_SECS)
self.device.Ping.assert_called_once_with()
@mock.patch('time.sleep')
@mock.patch('cros.factory.test.utils.serial_utils.SerialDevice.Connect')
def testConnectPingFailed(self, connect_mock, sleep_mock):
self.device.Ping = mock.Mock(return_value=False)
self.assertRaises(serial.SerialException, self.device.Connect)
connect_mock.assert_called_once_with(driver=_DEFAULT_DRIVER)
sleep_mock.assert_called_once_with(_DEFAULT_READY_DELAY_SECS)
self.device.Ping.assert_called_once_with()
def testPing(self):
self.device.SendExpectReceive = mock.Mock(side_effect=[True, True, True])
send_expect_receive_calls = [
mock.call(chr(1), chr(1), retry=0),
mock.call(chr(2), chr(2)),
mock.call(chr(3), chr(3))]
self.assertTrue(self.device.Ping())
self.assertEqual(self.device.SendExpectReceive.call_args_list,
send_expect_receive_calls)
def testPingFail(self):
self.device.SendExpectReceive = mock.Mock(side_effect=[True, False])
send_expect_receive_calls = [
mock.call(chr(1), chr(1), retry=0),
mock.call(chr(2), chr(2))]
self.assertFalse(self.device.Ping())
self.assertEqual(self.device.SendExpectReceive.call_args_list,
send_expect_receive_calls)
@mock.patch('time.sleep')
def testReset(self, sleep_mock):
serial_mock = mock.Mock(serial.Serial)
self.device._serial = serial_mock # pylint: disable=protected-access
serial_setDTR_calls = [mock.call(False), mock.call(True)]
sleep_calls = [mock.call(0.05), mock.call(_DEFAULT_READY_DELAY_SECS)]
self.device.Reset()
self.assertEqual(serial_mock.setDTR.call_args_list, serial_setDTR_calls)
self.assertEqual(sleep_mock.call_args_list, sleep_calls)
@mock.patch('time.sleep')
def testResetNoWait(self, sleep_mock):
serial_mock = mock.Mock(serial.Serial)
self.device._serial = serial_mock # pylint: disable=protected-access
serial_setDTR_calls = [mock.call(False), mock.call(True)]
self.device.Reset(wait_ready=False)
self.assertEqual(serial_mock.setDTR.call_args_list, serial_setDTR_calls)
sleep_mock.assert_called_once_with(0.05)
if __name__ == '__main__':
unittest.main()