blob: 772d3d419414e9fd7a267616aeb2ee7ec0294757 [file] [log] [blame]
# Copyright (c) 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.
"""Tests control of UART busses for beaglebone devices."""
import mox
import os
import subprocess
import unittest
import bbuart
SET_PROP_EXPECTED_ARGS = [
'stty', '-F', '/dev/ttyO1', '115200', 'cs8', '-cstopb', '-parenb'
]
SET_PROP_EXPECTED_ARGS.extend(bbuart.STTY_EXTRA_ARGS)
TXD_MUXFILE = 'lcd_data8'
RXD_MUXFILE = 'lcd_data9'
MUX_SELVAL = 0x4
GET_PROPS_ARGS = ['stty', '-F', '/dev/ttyO1', '-a']
STTY_GET_ATTRIBUTES_OUTPUT = (
'speed 115200 baud; rows 0; columns 0; line = 0;\n'
'intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;'
' eol2 = <undef>; swtch = <undef>;\n'
'start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;'
'flush = ^O; min = 1; time = 0;\n'
'-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts\n'
'-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon'
' -ixoff -iuclc -ixany\n'
'-imaxbel -iutf8\n'
'-opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0'
' vt0 ff0\n'
'-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop'
' -echoprt -echoctl -echoke\n')
GET_UART_PROPS_EXPECTED_RESULTS = {
'parity': 0,
'baudrate': 115200,
'bits': 8,
'sbits': 0
}
BAD_UART_SETTINGS = {'baudrate': 115200, 'bits': 12, 'parity': 0, 'sbits': 0}
class TestBBuart(mox.MoxTestBase):
def setUp(self):
super(TestBBuart, self).setUp()
bbuart.bbmux_controller = self.mox.CreateMockAnything()
self._bbmux_controller = self.mox.CreateMockAnything()
bbuart.bbmux_controller.use_omapmux().AndReturn(True)
bbuart.bbmux_controller.BBmuxController().AndReturn(self._bbmux_controller)
bbuart.subprocess = self.mox.CreateMockAnything()
def _initializeBBuartDefault(self):
"""Helper to initalize BBuart with default options.
I.E. the muxfile is not specified.
"""
self._interface = {'name': 'bb_uart', 'uart_num': 1}
self._bbmux_controller.set_pin_mode(
bbuart.TXD_PATTERN % self._interface['uart_num'], bbuart.TXD_MODE)
self._bbmux_controller.set_pin_mode(
bbuart.RXD_PATTERN % self._interface['uart_num'], bbuart.RXD_MODE)
bbuart.subprocess.check_output(SET_PROP_EXPECTED_ARGS)
def _initializeBBuartWithParems(self):
"""Helper to initalize BBuart with specified parameters.
I.E. the muxfile is not specified.
"""
self._interface = {
'name': 'bb_uart',
'uart_num': 1,
'txd': [TXD_MUXFILE, MUX_SELVAL],
'rxd': [RXD_MUXFILE, MUX_SELVAL]
}
self._bbmux_controller.set_muxfile(TXD_MUXFILE, bbuart.TXD_MODE, MUX_SELVAL)
self._bbmux_controller.set_muxfile(RXD_MUXFILE, bbuart.RXD_MODE, MUX_SELVAL)
bbuart.subprocess.check_output(SET_PROP_EXPECTED_ARGS)
def testInitDefault(self):
"""Initialize and ensure that initializing with default args works."""
self._initializeBBuartDefault()
self.mox.ReplayAll()
uart = bbuart.BBuart(self._interface)
self.mox.VerifyAll()
def testInitParems(self):
"""Initialize and ensure that initializing with parameters works."""
self._initializeBBuartWithParems()
self.mox.ReplayAll()
uart = bbuart.BBuart(self._interface)
self.mox.VerifyAll()
def testGetUartProps(self):
"""Test get_uart_props."""
self._initializeBBuartDefault()
bbuart.subprocess.check_output(GET_PROPS_ARGS).AndReturn(
STTY_GET_ATTRIBUTES_OUTPUT)
self.mox.ReplayAll()
uart = bbuart.BBuart(self._interface)
self.assertEquals(GET_UART_PROPS_EXPECTED_RESULTS, uart.get_uart_props())
def testGetUartPropsFailure(self):
"""Test get_uart_props failure case.
This can occur when stty returns bad output.
"""
self._initializeBBuartDefault()
bbuart.subprocess.check_output(GET_PROPS_ARGS).AndReturn('')
self.mox.ReplayAll()
uart = bbuart.BBuart(self._interface)
self.assertRaises(bbuart.BBuartError, uart.get_uart_props)
def testSetUartPropsFailure(self):
"""Test when set_uart_props fails due to bad line_prop."""
self._initializeBBuartDefault()
self.mox.ReplayAll()
uart = bbuart.BBuart(self._interface)
self.assertRaises(bbuart.BBuartError, uart.set_uart_props,
BAD_UART_SETTINGS)
def testGetValue(self):
"""Test the _get_value helper function."""
self._initializeBBuartDefault()
self.mox.ReplayAll()
uart = bbuart.BBuart(self._interface)
uart_speed = uart._get_value(STTY_GET_ATTRIBUTES_OUTPUT, bbuart.SPEED_RE)
self.assertEquals(int(uart_speed, 0), 115200)
def testGetValueFailByBadOutput(self):
"""Test the _get_value helper function.
Fail due to bad output.
"""
self._initializeBBuartDefault()
self.mox.ReplayAll()
uart = bbuart.BBuart(self._interface)
self.assertRaises(bbuart.BBuartError, uart._get_value, '', bbuart.SPEED_RE)
def testGetValueFailByBadRegex(self):
"""Test the _get_value helper function.
Fail due to bad regex.
"""
self._initializeBBuartDefault()
self.mox.ReplayAll()
uart = bbuart.BBuart(self._interface)
self.assertRaises(bbuart.BBuartError, uart._get_value,
STTY_GET_ATTRIBUTES_OUTPUT, 'bad_regex')
def testGetParity(self):
"""Test the _get_parity helper function."""
self._initializeBBuartDefault()
self.mox.ReplayAll()
uart = bbuart.BBuart(self._interface)
# Test no parity.
self.assertEquals(0, uart._get_parity('speed 115200 baud; -parenb'))
# Test odd parity.
self.assertEquals(1, uart._get_parity('speed 115200 baud; parodd'))
# Test even parity.
self.assertEquals(1, uart._get_parity('speed 115200 baud; -parodd'))
if __name__ == '__main__':
unittest.main()