def testImageCorrupted(self):
    """Verify error when firmware extraction corrupts SSD image.

    The primary motivator is potentially calling mount_gpt_image.sh improperly.
    """
    cb_command_lib.CheckEnvironment(self.image_name,
                                    self.firmware_dest,
                                    self.mount_point).AndReturn(True)
    cb_command_lib.RunCommand(mox.IsA(list))
    os.path.exists(self.mount_point).AndReturn(True)
    os.listdir(self.mount_point).AndReturn(['stuff', 'is', 'here'])
    cb_command_lib.ListFirmware(
        mox.IsA(str), mox.IsA(str), self.board).AndReturn(
            dict(bios='_ignore', ec='_ignore', ec2='_ignore'))
    cb_command_lib.ExtractFiles(mox.IsA(str)).AndReturn('/tmp/firmware_dir')
    for i in range(3):  # Test for alex only
      os.path.exists(mox.IsA(str)).AndReturn(True)
      shutil.copy(mox.IsA(str), mox.IsA(str))
    shutil.copy(mox.IsA(str), mox.IsA(str))
    cb_command_lib.RunCommand(mox.IsA(list))
    cb_command_lib.CheckMd5(mox.IsA(str), mox.IsA(str)).AndReturn(False)
    self.mox.ReplayAll()
    self.assertRaises(cb_constants.BundlingError,
                      cb_command_lib.ExtractFirmware,
                      self.image_name,
                      self.firmware_dest,
                      self.mount_point,
                      self.board)
 def testEnvironmentIsGood(self):
   """Verify return value when environment is all good."""
   os.getcwd().AndReturn('/home/$USER/chromiumos/src/scripts')
   cb_command_lib.RunCommand(mox.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(mox.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 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(mox.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(mox.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(mox.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(mox.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))
 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(mox.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 testCheckEnvironmentBad(self):
   """Verify error when environment check fails."""
   cb_command_lib.CheckEnvironment(self.image_name,
                                   self.firmware_dest,
                                   self.mount_point).AndReturn(False)
   self.mox.ReplayAll()
   self.assertRaises(cb_constants.BundlingError,
                     cb_command_lib.ExtractFirmware,
                     self.image_name,
                     self.firmware_dest,
                     self.mount_point,
                     self.board)
 def testMountSsdFailsMountPointNotThere(self):
   """Verify error when SSD image is not mounted."""
   cb_command_lib.CheckEnvironment(self.image_name,
                                   self.firmware_dest,
                                   self.mount_point).AndReturn(True)
   cb_command_lib.RunCommand(mox.IsA(list))
   os.path.exists(self.mount_point).AndReturn(False)
   cb_command_lib.RunCommand(mox.IsA(list))
   self.mox.ReplayAll()
   self.assertRaises(cb_constants.BundlingError,
                     cb_command_lib.ExtractFirmware,
                     self.image_name,
                     self.firmware_dest,
                     self.mount_point,
                     self.board)
 def testFirmwareExtractionFails(self):
   """Verify error when firmware extraction fails."""
   cb_command_lib.CheckEnvironment(self.image_name,
                                   self.firmware_dest,
                                   self.mount_point).AndReturn(True)
   cb_command_lib.RunCommand(mox.IsA(list))
   os.path.exists(self.mount_point).AndReturn(True)
   os.listdir(self.mount_point).AndReturn(['stuff', 'is', 'here'])
   cb_command_lib.ListFirmware(
       mox.IsA(str), mox.IsA(str), self.board).AndReturn(
           ('_ignore', '_ignore', '_ignore'))
   cb_command_lib.ExtractFiles(mox.IsA(str))
   cb_command_lib.RunCommand(mox.IsA(list))
   self.mox.ReplayAll()
   self.assertRaises(cb_constants.BundlingError,
                     cb_command_lib.ExtractFirmware,
                     self.image_name,
                     self.firmware_dest,
                     self.mount_point,
                     self.board)
 def testExtractFirmwareSuccess(self):
   """Verify behavior of quiet success when all goes well."""
   cb_command_lib.CheckEnvironment(self.image_name,
                                   self.firmware_dest,
                                   self.mount_point).AndReturn(True)
   cb_command_lib.RunCommand(mox.IsA(list))
   os.path.exists(self.mount_point).AndReturn(True)
   os.listdir(self.mount_point).AndReturn(['stuff', 'is', 'here'])
   cb_command_lib.ListFirmware(
       mox.IsA(str), mox.IsA(str), self.board).AndReturn(
           dict(ec='ec_name', ec2='ec2_name', bios='bios_name'))
   cb_command_lib.ExtractFiles(mox.IsA(str)).AndReturn('/tmp/firmware_dir')
   for i in range(3):  # Test for alex only
     os.path.exists(mox.IsA(str)).AndReturn(True)
     shutil.copy(mox.IsA(str), mox.IsA(str))
   shutil.copy(mox.IsA(str), mox.IsA(str))
   cb_command_lib.RunCommand(mox.IsA(list))
   cb_command_lib.CheckMd5(mox.IsA(str), mox.IsA(str)).AndReturn(True)
   self.mox.ReplayAll()
   cb_command_lib.ExtractFirmware(self.image_name,
                                  self.firmware_dest,
                                  self.mount_point,
                                  self.board)