Ejemplo n.º 1
0
 def testRebootAndVerifyWithRootfsAndReboot(self):
     """Test RebootAndVerify if rootfs update and reboot are enabled."""
     with remote_access.ChromiumOSDeviceHandler('1.1.1.1') as device:
         CrOS_AU = auto_updater.ChromiumOSFlashUpdater(
             device, self.payload_dir)
         CrOS_AU.RunUpdate()
         self.assertTrue(
             self.base_updater_mock.patched['RebootAndVerify'].called)
Ejemplo n.º 2
0
 def testRebootAndVerifyWithoutReboot(self):
     """Test RebootAndVerify doesn't run if reboot is unenabled."""
     with remote_access.ChromiumOSDeviceHandler('1.1.1.1') as device:
         CrOS_AU = auto_updater.ChromiumOSFlashUpdater(device,
                                                       self.payload_dir,
                                                       reboot=False)
         CrOS_AU.RunUpdate()
         self.assertFalse(
             self.base_updater_mock.patched['RebootAndVerify'].called)
Ejemplo n.º 3
0
 def testNoPomptWithYes(self):
     """Test prompts won't be called if yes is set as True."""
     with remote_access.ChromiumOSDeviceHandler('1.1.1.1') as device:
         CrOS_AU = auto_updater.ChromiumOSFlashUpdater(device,
                                                       self.payload_dir,
                                                       yes=True)
         self.PatchObject(cros_build_lib, 'BooleanPrompt')
         CrOS_AU.RunUpdate()
         self.assertFalse(cros_build_lib.BooleanPrompt.called)
Ejemplo n.º 4
0
 def testCheckRestoreStateful(self):
     """Test whether CheckRestoreStateful is called in update process."""
     precheck_mock = self.StartPatcher(ChromiumOSPreCheckMock())
     with remote_access.ChromiumOSDeviceHandler('1.1.1.1') as device:
         CrOS_AU = auto_updater.ChromiumOSFlashUpdater(
             device, self.payload_dir)
         CrOS_AU.RunUpdate()
         self.assertTrue(
             precheck_mock.patched['CheckRestoreStateful'].called)
Ejemplo n.º 5
0
 def testRestoreStateful(self):
     """Test RestoreStateful is called when it's required."""
     with remote_access.ChromiumOSDeviceHandler('1.1.1.1') as device:
         CrOS_AU = auto_updater.ChromiumOSFlashUpdater(
             device, self.payload_dir)
         self.PatchObject(auto_updater.ChromiumOSFlashUpdater,
                          'CheckRestoreStateful',
                          return_value=True)
         CrOS_AU.RunUpdate()
         self.assertTrue(
             self.base_updater_mock.patched['RestoreStateful'].called)
Ejemplo n.º 6
0
    def testSetupRootfsUpdateError(self):
        """Test ChromiumOSFlashUpdater.SetupRootfsUpdate with raising exception.

    RootfsUpdateError is raised if it cannot get status from GetUpdateStatus.
    """
        with remote_access.ChromiumOSDeviceHandler('1.1.1.1') as device:
            CrOS_AU = auto_updater.ChromiumOSFlashUpdater(
                device, self.payload_dir)
            self.PatchObject(auto_updater.ChromiumOSFlashUpdater,
                             'GetUpdateStatus',
                             return_value=('cannot_update', ))
            self.assertRaises(auto_updater.RootfsUpdateError,
                              CrOS_AU.RunUpdate)
Ejemplo n.º 7
0
 def testCopyPythonFilesToTemp(self):
     """Test copy python files to temp directory."""
     with mock.patch('shutil.copytree'), \
         mock.patch('shutil.ignore_patterns') as m, \
         remote_access.ChromiumOSDeviceHandler('1.1.1.1') as device:
         CrOS_AU = auto_updater.ChromiumOSFlashUpdater(
             device, self.payload_dir, do_rootfs_update=False)
         # pylint: disable=protected-access
         CrOS_AU._CopyPythonFilesToTemp('dir_src',
                                        'dir_temp',
                                        extra_ignore_patterns=['bad_thing'])
         m.assert_called_with('*.pyc', 'tmp*', '.*', 'static', '*~',
                              'bad_thing')
Ejemplo n.º 8
0
 def testCheckRestoreStatefulError(self):
     """Test CheckRestoreStateful fails with raising ChromiumOSUpdateError."""
     with remote_access.ChromiumOSDeviceHandler('1.1.1.1') as device:
         CrOS_AU = auto_updater.ChromiumOSFlashUpdater(
             device, self.payload_dir)
         self.PatchObject(cros_build_lib,
                          'BooleanPrompt',
                          return_value=False)
         self.PatchObject(auto_updater.ChromiumOSFlashUpdater,
                          '_CanRunDevserver',
                          return_value=False)
         self.assertRaises(auto_updater.ChromiumOSUpdateError,
                           CrOS_AU.RunUpdate)
Ejemplo n.º 9
0
 def testVerifyErrorWithRootDevEqualsNone(self):
     """Test RebootAndVerify fails with raising AutoUpdateVerifyError."""
     with remote_access.ChromiumOSDeviceHandler('1.1.1.1') as device:
         CrOS_AU = auto_updater.ChromiumOSFlashUpdater(
             device, self.payload_dir, do_stateful_update=False)
         self.PatchObject(auto_updater.ChromiumOSFlashUpdater,
                          'SetupRootfsUpdate')
         self.PatchObject(auto_updater.ChromiumOSFlashUpdater,
                          'UpdateRootfs')
         self.PatchObject(auto_updater.ChromiumOSFlashUpdater,
                          'GetRootDev',
                          return_value=None)
         self.assertRaises(auto_updater.AutoUpdateVerifyError,
                           CrOS_AU.RunUpdate)
Ejemplo n.º 10
0
    def Run(self):
        """Perform remote device update.

    The update process includes:
    1. initialize a device instance for the given remote device.
    2. achieve payload_dir which contains the required payloads for updating.
    3. initialize an auto-updater instance to do RunUpdate().
    4. After auto-update, all temp files and dir will be cleaned up.
    """
        try:
            device_connected = False

            with remote_access.ChromiumOSDeviceHandler(
                    self.ssh_hostname,
                    port=self.ssh_port,
                    base_dir=self.DEVICE_BASE_DIR,
                    private_key=self.ssh_private_key,
                    ping=self.ping) as device:
                device_connected = True

                # Get payload directory
                payload_dir = self.GetPayloadDir(device)

                # Do auto-update
                chromeos_AU = auto_updater.ChromiumOSFlashUpdater(
                    device,
                    payload_dir,
                    self.tempdir,
                    do_rootfs_update=self.do_rootfs_update,
                    do_stateful_update=self.do_stateful_update,
                    reboot=self.reboot,
                    disable_verification=self.disable_verification,
                    clobber_stateful=self.clobber_stateful,
                    yes=self.yes)
                chromeos_AU.CheckPayloads()
                chromeos_AU.RunUpdate()

        except Exception:
            logging.error('Device update failed.')
            if device_connected and device.lsb_release:
                lsb_entries = sorted(device.lsb_release.items())
                logging.info(
                    'Following are the LSB version details of the device:\n%s',
                    '\n'.join('%s=%s' % (k, v) for k, v in lsb_entries))
            raise
        else:
            logging.notice('Update performed successfully.')
        finally:
            self.Cleanup()
Ejemplo n.º 11
0
    def testRunStateful(self):
        """Test the update functions are called correctly.

    Only UpdateStateful is called for stateful update.
    """
        with remote_access.ChromiumOSDeviceHandler('1.1.1.1') as device:
            CrOS_AU = auto_updater.ChromiumOSFlashUpdater(
                device, self.payload_dir, do_rootfs_update=False)
            CrOS_AU.RunUpdate()
            self.assertFalse(
                self.base_updater_mock.patched['SetupRootfsUpdate'].called)
            self.assertFalse(
                self.base_updater_mock.patched['UpdateRootfs'].called)
            self.assertTrue(
                self.base_updater_mock.patched['UpdateStateful'].called)
Ejemplo n.º 12
0
    def testTransferForRootfs(self):
        """Test transfer functions for rootfs update.

    When rootfs update is enabled, Devserver and rootfs update payload are
    transferred. Stateful update payload is not.
    """
        with remote_access.ChromiumOSDeviceHandler('1.1.1.1') as device:
            CrOS_AU = auto_updater.ChromiumOSFlashUpdater(
                device, self.payload_dir, do_stateful_update=False)
            CrOS_AU.RunUpdate()
            self.assertTrue(
                self.transfer_mock.patched['TransferDevServerPackage'].called)
            self.assertTrue(
                self.transfer_mock.patched['TransferRootfsUpdate'].called)
            self.assertFalse(
                self.transfer_mock.patched['TransferStatefulUpdate'].called)
Ejemplo n.º 13
0
    def testNoVerifyError(self):
        """Test RebootAndVerify won't raise any error when unable do_rootfs_update.

    If do_rootfs_update is unabled, verify logic won't be touched, which means
    no AutoUpdateVerifyError will be thrown.
    """
        with remote_access.ChromiumOSDeviceHandler('1.1.1.1') as device:
            CrOS_AU = auto_updater.ChromiumOSFlashUpdater(
                device, self.payload_dir, do_rootfs_update=False)
            self.PatchObject(remote_access.ChromiumOSDevice, 'RunCommand')
            self.PatchObject(auto_updater.ChromiumOSFlashUpdater,
                             'GetRootDev',
                             return_value=None)
            try:
                CrOS_AU.RunUpdate()
            except auto_updater.AutoUpdateVerifyError:
                self.fail('RunUpdate raise AutoUpdateVerifyError.')
Ejemplo n.º 14
0
    def testRootfsUpdateDevServerError(self):
        """Test ChromiumOSFlashUpdater.UpdateRootfs with raising exception.

    RootfsUpdateError is raised if devserver cannot start.
    """
        with remote_access.ChromiumOSDeviceHandler('1.1.1.1') as device:
            CrOS_AU = auto_updater.ChromiumOSFlashUpdater(
                device, self.payload_dir)
            self.prepareRootfsUpdate()
            self.PatchObject(
                dev_server_wrapper.RemoteDevServerWrapper,
                'Start',
                side_effect=dev_server_wrapper.DevServerException())
            self.PatchObject(auto_updater.ChromiumOSFlashUpdater,
                             'RevertBootPartition')
            with mock.patch('os.path.join', return_value=''):
                self.assertRaises(auto_updater.RootfsUpdateError,
                                  CrOS_AU.RunUpdate)
Ejemplo n.º 15
0
    def testStatefulUpdateCmdError(self):
        """Test ChromiumOSFlashUpdater.UpdateStateful with raising exception.

    StatefulUpdateError is raised if device fails to run stateful update
    command 'stateful_update ...'.
    """
        with remote_access.ChromiumOSDeviceHandler('1.1.1.1') as device:
            CrOS_AU = auto_updater.ChromiumOSFlashUpdater(
                device, self.payload_dir, do_rootfs_update=False)
            self.PatchObject(remote_access.ChromiumOSDevice,
                             'RunCommand',
                             side_effect=cros_build_lib.RunCommandError(
                                 'fail', ''))
            self.PatchObject(auto_updater.ChromiumOSFlashUpdater,
                             'ResetStatefulPartition')
            with mock.patch('os.path.join', return_value=''):
                self.assertRaises(auto_updater.StatefulUpdateError,
                                  CrOS_AU.RunUpdate)
Ejemplo n.º 16
0
    def testRestoreStatefulError(self):
        """Test ChromiumOSFlashUpdater.RestoreStateful with raising exception.

    Devserver still cannot run after restoring stateful partition will lead
    to ChromiumOSUpdateError.
    """
        with remote_access.ChromiumOSDeviceHandler('1.1.1.1') as device:
            CrOS_AU = auto_updater.ChromiumOSFlashUpdater(
                device, self.payload_dir)
            self.PatchObject(auto_updater.ChromiumOSFlashUpdater,
                             'RunUpdateStateful')
            self.PatchObject(auto_updater.ChromiumOSFlashUpdater,
                             'CheckRestoreStateful',
                             return_value=True)
            self.PatchObject(auto_updater.ChromiumOSFlashUpdater,
                             '_CanRunDevserver',
                             return_value=False)
            self.assertRaises(auto_updater.ChromiumOSUpdateError,
                              CrOS_AU.RunUpdate)
Ejemplo n.º 17
0
    def testRootfsUpdateTrackError(self):
        """Test ChromiumOSFlashUpdater.UpdateRootfs with raising exception.

    RootfsUpdateError is raised if it fails to track device's status by
    GetUpdateStatus.
    """
        with remote_access.ChromiumOSDeviceHandler('1.1.1.1') as device:
            CrOS_AU = auto_updater.ChromiumOSFlashUpdater(
                device, self.payload_dir)
            self.prepareRootfsUpdate()
            self.PatchObject(dev_server_wrapper.DevServerWrapper, 'Start')
            self.PatchObject(dev_server_wrapper.DevServerWrapper,
                             'GetDevServerURL')
            self.PatchObject(remote_access.ChromiumOSDevice, 'RunCommand')
            self.PatchObject(
                auto_updater.ChromiumOSFlashUpdater,
                'GetUpdateStatus',
                side_effect=ValueError('Cannot get update status'))
            with mock.patch('os.path.join', return_value=''):
                self.assertRaises(auto_updater.RootfsUpdateError,
                                  CrOS_AU.RunUpdate)
Ejemplo n.º 18
0
    def testRootfsUpdateCmdError(self):
        """Test ChromiumOSFlashUpdater.UpdateRootfs with raising exception.

    RootfsUpdateError is raised if device fails to run rootfs update command
    'update_engine_client ...'.
    """
        with remote_access.ChromiumOSDeviceHandler('1.1.1.1') as device:
            CrOS_AU = auto_updater.ChromiumOSFlashUpdater(
                device, self.payload_dir)
            self.prepareRootfsUpdate()
            self.PatchObject(dev_server_wrapper.DevServerWrapper, 'Start')
            self.PatchObject(dev_server_wrapper.DevServerWrapper,
                             'GetDevServerURL')
            self.PatchObject(remote_access.ChromiumOSDevice,
                             'RunCommand',
                             side_effect=cros_build_lib.RunCommandError(
                                 'fail', ''))
            self.PatchObject(auto_updater.ChromiumOSFlashUpdater,
                             'RevertBootPartition')
            with mock.patch('os.path.join', return_value=''):
                self.assertRaises(auto_updater.RootfsUpdateError,
                                  CrOS_AU.RunUpdate)