Пример #1
0
    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')
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
0
    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)