def testInit(self): # # patch functions called in constructor # # patch os.path.exists() to always return False mockedExists = Mock(return_value=False) self.patch(os.path, "exists", mockedExists) # capture calls to os.makedirs() mockedMakedirs = Mock() self.patch(os, 'makedirs', mockedMakedirs) # capture calls to tempfile.mkstemp() mockedMkstemp = Mock(return_value=(7, "tmpname")) self.patch(tempfile, "mkstemp", mockedMkstemp) # capture calls to os.fdopen() mockedFdopen = Mock() self.patch(os, "fdopen", mockedFdopen) # # call _FileWriter constructor # destfile = os.path.join("dir", "file") remotetransfer.FileWriter(destfile, 64, stat.S_IRUSR) # # validate captured calls # absdir = os.path.dirname(os.path.abspath(os.path.join("dir", "file"))) mockedExists.assert_called_once_with(absdir) mockedMakedirs.assert_called_once_with(absdir) mockedMkstemp.assert_called_once_with(dir=absdir) mockedFdopen.assert_called_once_with(7, 'wb')
def _uploadRemoteReport(self, workersrc, masterdest): """Upload the remote file into the master. Args: workersrc (str): Path of the file to upload in the worker. masterdest (str): Path of the file to write in the master. """ file_writer = remotetransfer.FileWriter(masterdest, self.maxSize, None) args = { 'workdir': self.workdir, 'writer': file_writer, 'maxsize': self.maxSize, 'blocksize': self.blockSize, 'keepstamp': False, 'workersrc': workersrc, } cmd = remotecommand.RemoteCommand('uploadFile', args) self.cmd = cmd try: yield self.runCommand(cmd) except Exception: file_writer.cancel() raise finally: self.cmd = None if cmd.didFail(): file_writer.cancel() defer.returnValue(FAILURE) defer.returnValue(SUCCESS)
def start(self): self.checkWorkerHasCommand("uploadFile") self.stdio_log = self.addLog("stdio") source = self.workersrc masterdest = self.masterdest # we rely upon the fact that the buildmaster runs chdir'ed into its # basedir to make sure that relative paths in masterdest are expanded # properly. TODO: maybe pass the master's basedir all the way down # into the BuildStep so we can do this better. masterdest = os.path.expanduser(masterdest) log.msg("FileUpload started, from worker %r to master %r" % (source, masterdest)) if self.description is None: self.description = [ 'uploading {}'.format(os.path.basename(source)) ] if self.descriptionDone is None: self.descriptionDone = self.description if self.url is not None: urlText = self.urlText if urlText is None: urlText = os.path.basename(masterdest) self.addURL(urlText, self.url) self.step_status.setText(self.description) # we use maxsize to limit the amount of data on both sides fileWriter = remotetransfer.FileWriter(masterdest, self.maxsize, self.mode) if self.keepstamp and self.workerVersionIsOlderThan( "uploadFile", "2.13"): m = (("This worker ({}) does not support preserving timestamps. " "Please upgrade the worker.").format(self.build.workername)) raise WorkerTooOldError(m) # default arguments args = { 'workdir': self.workdir, 'writer': fileWriter, 'maxsize': self.maxsize, 'blocksize': self.blocksize, 'keepstamp': self.keepstamp, } if self.workerVersionIsOlderThan('uploadFile', '3.0'): args['slavesrc'] = source else: args['workersrc'] = source cmd = makeStatusRemoteCommand(self, 'uploadFile', args) d = self.runTransferCommand(cmd, fileWriter) d.addCallback(self.finished).addErrback(self.failed)
def uploadFile(self, source, masterdest): fileWriter = remotetransfer.FileWriter(masterdest, self.maxsize, self.mode) args = { 'slavesrc': source, 'workdir': self.workdir, 'writer': fileWriter, 'maxsize': self.maxsize, 'blocksize': self.blocksize, 'keepstamp': self.keepstamp, } cmd = makeStatusRemoteCommand(self, 'uploadFile', args) return self.runTransferCommand(cmd, fileWriter)
def uploadFile(self, source, masterdest): fileWriter = remotetransfer.FileWriter(masterdest, self.maxsize, self.mode) args = { 'workdir': self.workdir, 'writer': fileWriter, 'maxsize': self.maxsize, 'blocksize': self.blocksize, 'keepstamp': self.keepstamp, } if self.workerVersionIsOlderThan('uploadFile', '3.0'): args['slavesrc'] = source else: args['workersrc'] = source cmd = makeStatusRemoteCommand(self, 'uploadFile', args) return self.runTransferCommand(cmd, fileWriter)
def start(self): self.checkSlaveHasCommand("uploadFile") source = self.slavesrc masterdest = self.masterdest # we rely upon the fact that the buildmaster runs chdir'ed into its # basedir to make sure that relative paths in masterdest are expanded # properly. TODO: maybe pass the master's basedir all the way down # into the BuildStep so we can do this better. masterdest = os.path.expanduser(masterdest) log.msg("FileUpload started, from slave %r to master %r" % (source, masterdest)) self.descriptionDone = "uploading %s" % os.path.basename(source) if self.url is not None: self.addURL(os.path.basename(os.path.normpath(masterdest)), self.url) # we use maxsize to limit the amount of data on both sides fileWriter = remotetransfer.FileWriter(masterdest, self.maxsize, self.mode) if self.keepstamp and self.slaveVersionIsOlderThan( "uploadFile", "2.13"): m = ( "This buildslave (%s) does not support preserving timestamps. " "Please upgrade the buildslave." % self.build.slavename) raise BuildSlaveTooOldError(m) # default arguments args = { 'slavesrc': source, 'workdir': self.workdir, 'writer': fileWriter, 'maxsize': self.maxsize, 'blocksize': self.blocksize, 'keepstamp': self.keepstamp, } cmd = makeStatusRemoteCommand(self, 'uploadFile', args) d = self.runTransferCommand(cmd, fileWriter) d.addCallback(self.finished).addErrback(self.failed)