#!/usr/bin/python # # Copyright (c) 2011 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. """Unit tests for cros_build_lib.""" import mox import os import tempfile import unittest import cros_build_lib class CrosBuildLibTest(mox.MoxTestBase): """Test class for cros_build_lib.""" def testRunCommandSimple(self): """Test that RunCommand can run a simple successful command.""" result = cros_build_lib.RunCommand(['ls'], # Keep the test quiet options print_cmd=False, redirect_stdout=True, redirect_stderr=True, # Test specific options exit_code=True) self.assertEqual(result, 0) def testRunCommandError(self): """Test that RunCommand can return an error code for a failed command.""" result = cros_build_lib.RunCommand(['ls', '/nosuchdir'], # Keep the test quiet options print_cmd=False, redirect_stdout=True, redirect_stderr=True, # Test specific options exit_code=True) self.assertNotEqual(result, 0) self.assertEquals(type(result), int) def testRunCommandErrorRetries(self): """Test that RunCommand can retry a failed command that always fails.""" # We don't actually check that it's retrying, just exercise the code path. result = cros_build_lib.RunCommand(['ls', '/nosuchdir'], # Keep the test quiet options print_cmd=False, redirect_stdout=True, redirect_stderr=True, # Test specific options num_retries=2, error_ok=True, exit_code=True) self.assertNotEqual(result, 0) self.assertEquals(type(result), int) def testRunCommandErrorException(self): """Test that RunCommand can throw an exception when a command fails.""" function = lambda : cros_build_lib.RunCommand(['ls', '/nosuchdir'], # Keep the test quiet options print_cmd=False, redirect_stdout=True, redirect_stderr=True) self.assertRaises(cros_build_lib.RunCommandException, function) def testRunCommandErrorCodeNoException(self): """Test that RunCommand doesn't throw an exception with exit_code.""" result = cros_build_lib.RunCommand(['ls', '/nosuchdir'], # Keep the test quiet options print_cmd=False, redirect_stdout=True, redirect_stderr=True, # Test specific options exit_code=True) # We are really testing that it doesn't throw an exception if exit_code # if true. self.assertNotEqual(result, 0) self.assertEquals(type(result), int) def testRunCommandCaptureOutput(self): """Test that RunCommand can capture stdout if a command succeeds.""" result = cros_build_lib.RunCommand(['echo', '-n', 'Hi'], # Keep the test quiet options print_cmd=False, redirect_stdout=True, redirect_stderr=True) self.assertEqual(result, 'Hi') def testRunCommandLogToFile(self): """Test that RunCommand can log output to a file correctly.""" log_file = tempfile.mktemp() cros_build_lib.RunCommand(['echo', '-n', 'Hi'], # Keep the test quiet options print_cmd=False, # Test specific options log_to_file=log_file) log_fh = open(log_file) log_data = log_fh.read() self.assertEquals('Hi', log_data) log_fh.close() os.remove(log_file) if __name__ == '__main__': unittest.main()