blob: 711fe40991da9a33a3cdd27204c4cddbf0155fb7 [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2015 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 for SystemInterface in LinuxBoard."""
import mock
import unittest
import factory_common # pylint: disable=W0611
from cros.factory.device import types
from cros.factory.device.boards import linux
class MockProcess(object):
def __init__(self, returncode):
self._returncode = returncode
def wait(self):
return
@property
def returncode(self):
return self._returncode
class LinuxTargetTest(unittest.TestCase):
def setUp(self):
self.link = types.DeviceLink()
self.dut = linux.LinuxBoard(self.link)
def testReadFile(self):
self.link.Pull = mock.MagicMock(return_value='TEST')
self.assertEquals(self.dut.ReadFile('/non-exist'), 'TEST')
self.link.Pull.assert_called_with('/non-exist')
self.dut.CheckOutput = mock.MagicMock(return_value='TEST')
self.assertEquals(self.dut.ReadFile('/non-exist', 4), 'TEST')
self.dut.CheckOutput.assert_called_with(['dd', 'bs=1', 'if=/non-exist',
'count=4'])
self.dut.CheckOutput = mock.MagicMock(return_value='TEST')
self.assertEquals(self.dut.ReadFile('/non-exist', 4, 4), 'TEST')
self.dut.CheckOutput.assert_called_with(['dd', 'bs=1', 'if=/non-exist',
'count=4', 'skip=4'])
self.dut.CheckOutput = mock.MagicMock(return_value='TEST')
self.assertEquals(self.dut.ReadFile('/non-exist', skip=4), 'TEST')
self.dut.CheckOutput.assert_called_with(['dd', 'bs=1', 'if=/non-exist',
'skip=4'])
def testWriteFile(self):
def fakePush(local, remote):
self.assertEquals(remote, '/non-exist')
self.assertEquals(open(local).read(), 'TEST')
self.link.Push = mock.MagicMock(side_effect=fakePush)
self.dut.WriteFile('/non-exist', 'TEST')
def testCall(self):
self.link.Shell = mock.MagicMock(return_value=MockProcess(1))
self.assertEquals(self.dut.Call(['ls']), 1)
self.link.Shell.assert_called_with(['ls'], None, None, None)
def testCheckCall(self):
self.link.Shell = mock.MagicMock(return_value=MockProcess(0))
self.assertEquals(self.dut.CheckCall(['ls']), 0)
self.link.Shell.assert_called_with(['ls'], None, None, None)
self.link.Shell = mock.MagicMock(return_value=MockProcess(1))
with self.assertRaises(types.CalledProcessError):
self.dut.CheckCall(['ls'])
self.link.Shell.assert_called_with(['ls'], None, None, None)
def testCheckOutput(self):
def fakeCallSuccess(command, stdin, stdout, stderr, log):
# pylint: disable=unused-argument
stdout.write('fake data')
return 0
def fakeCallFailure(command, stdin, stdout, stderr, log):
# pylint: disable=unused-argument
stdout.write('fake data')
return 1
self.dut.Call = mock.MagicMock(side_effect=fakeCallSuccess)
self.assertEquals(self.dut.CheckOutput(['cmd']), 'fake data')
self.dut.Call = mock.MagicMock(side_effect=fakeCallFailure)
with self.assertRaises(types.CalledProcessError):
self.dut.CheckOutput(['cmd'])
def testCallOutput(self):
def fakeCallSuccess(command, stdin, stdout, stderr, log):
# pylint: disable=unused-argument
stdout.write('fake data')
return 0
def fakeCallFailure(command, stdin, stdout, stderr, log):
# pylint: disable=unused-argument
stdout.write('fake data')
return 1
self.dut.Call = mock.MagicMock(side_effect=fakeCallSuccess)
self.assertEquals(self.dut.CallOutput(['cmd']), 'fake data')
self.dut.Call = mock.MagicMock(side_effect=fakeCallFailure)
self.assertEquals(self.dut.CallOutput(['cmd']), None)
def testGlob(self):
self.dut.CallOutput = mock.MagicMock(return_value=None)
self.assertEquals(self.dut.Glob('/non-exist'), [])
self.dut.CallOutput = mock.MagicMock(return_value='/ab\n/a1b\n/a2b\n')
self.assertEquals(self.dut.Glob('/a*b'), ['/ab', '/a1b', '/a2b'])
if __name__ == '__main__':
unittest.main()