def _doUpgrade(self, oResponse, oConnection, fReboot): """ Common worker for _cmdUpgrade and _cmdUpgradeAndReboot. Will sys.exit on success! """ # # The server specifies a ZIP archive with the new scripts. It's ASSUMED # that the zip is of selected files at g_ksValidationKitDir in SVN. It's # further ASSUMED that we're executing from # sZipUrl = oResponse.getStringChecked( constants.tbresp.UPGRADE_PARAM_URL) oResponse.checkParameterCount(2) if utils.isRunningFromCheckout(): raise TestBoxException( 'Cannot upgrade when running from the tree!') oConnection.sendAckAndClose(constants.tbresp.CMD_UPGRADE_AND_REBOOT if fReboot else constants.tbresp.CMD_UPGRADE) testboxcommons.log('Upgrading...') # # Download the file and install it. # sDstFile = os.path.join(g_ksTestScriptDir, 'VBoxTestBoxScript.zip') if os.path.exists(sDstFile): os.unlink(sDstFile) fRc = webutils.downloadFile(sZipUrl, sDstFile, self._oTestBoxScript.getPathBuilds(), testboxcommons.log) if fRc is not True: return False if upgradeFromZip(sDstFile) is not True: return False # # Restart the system or the script (we have a parent script which # respawns us when we quit). # if fReboot: self.doReboot() sys.exit(TBS_EXITCODE_NEED_UPGRADE) return False
def _getHelperOutput(self, sCmd): """ Invokes TestBoxHelper to obtain information hard to access from python. """ if self._sTestBoxHelper is None: if not utils.isRunningFromCheckout(): # See VBoxTestBoxScript.zip for layout. self._sTestBoxHelper = os.path.join(g_ksValidationKitDir, utils.getHostOs(), utils.getHostArch(), \ 'TestBoxHelper'); else: # Only for in-tree testing, so don't bother be too accurate right now. sType = os.environ.get('KBUILD_TYPE', os.environ.get('BUILD_TYPE', 'debug')); self._sTestBoxHelper = os.path.join(g_ksValidationKitDir, os.pardir, os.pardir, os.pardir, 'out', \ utils.getHostOsDotArch(), sType, 'testboxscript', \ utils.getHostOs(), utils.getHostArch(), \ 'TestBoxHelper'); if utils.getHostOs() in ['win', 'os2']: self._sTestBoxHelper += '.exe'; return utils.processOutputChecked([self._sTestBoxHelper, sCmd]).strip();
def _doUpgrade(self, oResponse, oConnection, fReboot): """ Common worker for _cmdUpgrade and _cmdUpgradeAndReboot. Will sys.exit on success! """ # # The server specifies a ZIP archive with the new scripts. It's ASSUMED # that the zip is of selected files at g_ksValidationKitDir in SVN. It's # further ASSUMED that we're executing from # sZipUrl = oResponse.getStringChecked(constants.tbresp.UPGRADE_PARAM_URL) oResponse.checkParameterCount(2); if utils.isRunningFromCheckout(): raise TestBoxException('Cannot upgrade when running from the tree!'); oConnection.sendAckAndClose(constants.tbresp.CMD_UPGRADE_AND_REBOOT if fReboot else constants.tbresp.CMD_UPGRADE); testboxcommons.log('Upgrading...'); # # Download the file and install it. # sDstFile = os.path.join(g_ksTestScriptDir, 'VBoxTestBoxScript.zip'); if os.path.exists(sDstFile): os.unlink(sDstFile); fRc = webutils.downloadFile(sZipUrl, sDstFile, self._oTestBoxScript.getPathBuilds(), testboxcommons.log); if fRc is not True: return False; if upgradeFromZip(sDstFile) is not True: return False; # # Restart the system or the script (we have a parent script which # respawns us when we quit). # if fReboot: self.doReboot(); sys.exit(TBS_EXITCODE_NEED_UPGRADE); return False; # shuts up pylint (it will probably complain later when it learns DECL_NO_RETURN).
def upgradeFromZip(sZipFile): """ Upgrade the testboxscript install using the specified zip file. Returns True/False. """ # A little precaution. if utils.isRunningFromCheckout(): testboxcommons.log('Use "svn up" to "upgrade" your source tree!') return False # # Prepare. # # Note! Don't bother cleaning up files and dirs in the error paths, # they'll be restricted to the one zip and the one upgrade dir. # We'll remove them next time we upgrade. # oZip = zipfile.ZipFile(sZipFile, 'r') asMembers = _doUpgradeCheckZip(oZip) if asMembers is None: return False sUpgradeDir = os.path.join(g_ksTestScriptDir, 'upgrade') testboxcommons.log('Unzipping "%s" to "%s"...' % (sZipFile, sUpgradeDir)) if _doUpgradeUnzipAndCheck(oZip, sUpgradeDir, asMembers) is not True: return False oZip.close() if _doUpgradeTestRun(sUpgradeDir) is not True: return False # # Execute. # if _doUpgradeApply(sUpgradeDir, asMembers) is not True: return False _doUpgradeRemoveOldStuff(sUpgradeDir, asMembers) return True
def upgradeFromZip(sZipFile): """ Upgrade the testboxscript install using the specified zip file. Returns True/False. """ # A little precaution. if utils.isRunningFromCheckout(): testboxcommons.log('Use "svn up" to "upgrade" your source tree!') return False # # Prepare. # # Note! Don't bother cleaning up files and dirs in the error paths, # they'll be restricted to the one zip and the one upgrade dir. # We'll remove them next time we upgrade. # oZip = zipfile.ZipFile(sZipFile, "r") asMembers = _doUpgradeCheckZip(oZip) if asMembers is None: return False sUpgradeDir = os.path.join(g_ksTestScriptDir, "upgrade") testboxcommons.log('Unzipping "%s" to "%s"...' % (sZipFile, sUpgradeDir)) if _doUpgradeUnzipAndCheck(oZip, sUpgradeDir, asMembers) is not True: return False oZip.close() if _doUpgradeTestRun(sUpgradeDir) is not True: return False # # Execute. # if _doUpgradeApply(sUpgradeDir, asMembers) is not True: return False _doUpgradeRemoveOldStuff(sUpgradeDir, asMembers) return True