FBPA - Begun unit testing of cb_command_lib module.
Testing for CheckEnvironment
BUG=chromium-os:17511
TEST=Developing tests
Change-Id: If1aa655012d2ad88701af2ea932acb3dad0b276b
Reviewed-on: http://gerrit.chromium.org/gerrit/5114
Reviewed-by: Tan Gao <tgao@chromium.org>
Tested-by: Tan Gao <tgao@chromium.org>
diff --git a/cb_command_lib.py b/cb_command_lib.py
index 89966a2..622f67b 100644
--- a/cb_command_lib.py
+++ b/cb_command_lib.py
@@ -107,7 +107,7 @@
logging.error('\nPlease run this script from the src/scripts directory.\n')
res = False
cmd_result = RunCommand(['which', 'uudecode'],
- redirect_stdout=True)
+ redirect_stdout=True)
output_string = cmd_result.output
if not output_string:
logging.error('\nMissing uudecode. Please run sudo apt-get install '
diff --git a/cb_command_lib_unittest.py b/cb_command_lib_unittest.py
new file mode 100644
index 0000000..2ef5827
--- /dev/null
+++ b/cb_command_lib_unittest.py
@@ -0,0 +1,166 @@
+#!/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 the cb_command_lib module."""
+
+import logging
+import mox
+import re
+import os
+import shutil
+import subprocess
+import tempfile
+import unittest
+
+import cb_command_lib
+import cb_constants
+import cb_name_lib
+import cb_url_lib
+import cb_util_lib
+
+from mox import IsA
+
+from cb_constants import BundlingError
+
+
+def _CleanUp(obj):
+ """Common logic to clean up file system state after a test.
+
+ Assuming permission to delete files and directories specified.
+
+ Args:
+ obj: an object with member 'clean_dirs', a list
+ """
+ for dir_to_clean in obj.clean_dirs:
+ if os.path.isdir(dir_to_clean):
+ shutil.rmtree(dir_to_clean)
+
+
+# RunCommand tested in <chromeos_root>/chromite/lib/cros_build_lib_unittest.py
+
+
+class TestCheckEnvironment(mox.MoxTestBase):
+ """Unit test related to CheckEnvironment."""
+
+ def setUp(self):
+ self.mox = mox.Mox()
+ # defaults used by most tests
+ self.image = tempfile.NamedTemporaryFile(suffix='ssd.bin')
+ self.image_name = self.image.name
+ self.firmware_dest = tempfile.mkdtemp()
+ self.mount_point = self.firmware_dest
+ self.mox.StubOutWithMock(os, 'getcwd')
+ self.mox.StubOutWithMock(cb_command_lib, 'RunCommand')
+ self.mock_cres = cb_command_lib.CommandResult()
+ self.mock_cres.output = 'uudecode present'
+ # do not need to clean up empty temporary file
+ self.clean_dirs = [self.firmware_dest]
+
+ def tearDown(self):
+ _CleanUp(self)
+
+ def testEnvironmentIsGood(self):
+ """Verify return value when environment is all good."""
+ os.getcwd().AndReturn('/home/$USER/chromiumos/src/scripts')
+ cb_command_lib.RunCommand(IsA(list),
+ redirect_stdout=True).AndReturn(self.mock_cres)
+ self.mox.ReplayAll()
+ self.assertTrue(cb_command_lib.CheckEnvironment(self.image_name,
+ self.firmware_dest,
+ self.mount_point))
+
+ def testNotInScriptsDirectory(self):
+ """Verify return value when script not run from <cros_root/src/scripts."""
+ os.getcwd().AndReturn('/home/$USER/chromiumos/src/scripts/lib')
+ cb_command_lib.RunCommand(IsA(list),
+ redirect_stdout=True).AndReturn(self.mock_cres)
+ self.mox.ReplayAll()
+ self.assertFalse(cb_command_lib.CheckEnvironment(self.image_name,
+ self.firmware_dest,
+ self.mount_point))
+
+ def testNoUudecode(self):
+ """Verify return value when uudecode not present."""
+ os.getcwd().AndReturn('/home/$USER/chromiumos/src/scripts')
+ self.mock_cres.output = ''
+ cb_command_lib.RunCommand(IsA(list),
+ redirect_stdout=True).AndReturn(self.mock_cres)
+ self.mox.ReplayAll()
+ self.assertFalse(cb_command_lib.CheckEnvironment(self.image_name,
+ self.firmware_dest,
+ self.mount_point))
+
+ def testSsdDoesNotExist(self):
+ """Verify return value when given ssd image file not present."""
+ self.image_name = ''
+ os.getcwd().AndReturn('/home/$USER/chromiumos/src/scripts')
+ cb_command_lib.RunCommand(IsA(list),
+ redirect_stdout=True).AndReturn(self.mock_cres)
+ self.mox.ReplayAll()
+ self.assertFalse(cb_command_lib.CheckEnvironment(self.image_name,
+ self.firmware_dest,
+ self.mount_point))
+
+ def testBadSsdName(self):
+ """Verify return value when given ssd image has bad name."""
+ self.image = tempfile.NamedTemporaryFile(suffix='recovery.bin')
+ os.getcwd().AndReturn('/home/$USER/chromiumos/src/scripts')
+ cb_command_lib.RunCommand(IsA(list),
+ redirect_stdout=True).AndReturn(self.mock_cres)
+ self.mox.ReplayAll()
+ self.assertFalse(cb_command_lib.CheckEnvironment(self.image_name,
+ self.firmware_dest,
+ self.mount_point))
+
+ def testFirmwareDestinationDoesNotExist(self):
+ """Verify return value when environment is all good."""
+ self.firmware_dest = ''
+ os.getcwd().AndReturn('/home/$USER/chromiumos/src/scripts')
+ cb_command_lib.RunCommand(IsA(list),
+ redirect_stdout=True).AndReturn(self.mock_cres)
+ self.mox.ReplayAll()
+ self.assertFalse(cb_command_lib.CheckEnvironment(self.image_name,
+ self.firmware_dest,
+ self.mount_point))
+
+ def testFirmwareDestinationNotWritable(self):
+ """Verify return value when firmware destination directory not writable."""
+ self.mox.StubOutWithMock(os, 'access')
+ os.getcwd().AndReturn('/home/$USER/chromiumos/src/scripts')
+ cb_command_lib.RunCommand(IsA(list),
+ redirect_stdout=True).AndReturn(self.mock_cres)
+ os.access(self.firmware_dest, os.W_OK).AndReturn(False)
+ self.mox.ReplayAll()
+ self.assertFalse(cb_command_lib.CheckEnvironment(self.image_name,
+ self.firmware_dest,
+ self.mount_point))
+
+ def testNoMountPoint(self):
+ """Verify return value when mount point not given or does not exist."""
+ self.mount_point = ''
+ os.getcwd().AndReturn('/home/$USER/chromiumos/src/scripts')
+ cb_command_lib.RunCommand(IsA(list),
+ redirect_stdout=True).AndReturn(self.mock_cres)
+ self.mox.ReplayAll()
+ self.assertFalse(cb_command_lib.CheckEnvironment(self.image_name,
+ self.firmware_dest,
+ self.mount_point))
+
+ def testMountPointNotEmpty(self):
+ """Verify return value when provided mount point is not empty."""
+ self.mox.StubOutWithMock(os, 'listdir')
+ os.getcwd().AndReturn('/home/$USER/chromiumos/src/scripts')
+ cb_command_lib.RunCommand(IsA(list),
+ redirect_stdout=True).AndReturn(self.mock_cres)
+ os.listdir(self.mount_point).AndReturn(['there_is_a_file'])
+ self.mox.ReplayAll()
+ self.assertFalse(cb_command_lib.CheckEnvironment(self.image_name,
+ self.firmware_dest,
+ self.mount_point))
+
+
+if __name__ == "__main__":
+ logging.basicConfig(level=logging.CRITICAL)
+ unittest.main()