Ejemplo n.º 1
0
 def _setUpTestdir(self):
     self._tearDownLogFile()
     currentDir = os.getcwd()
     base = filepath.FilePath(self.workingDirectory)
     testdir, self._testDirLock = util._unusedTestDirectory(base)
     os.chdir(testdir.path)
     return currentDir
Ejemplo n.º 2
0
 def _setUpTestdir(self):
     self._tearDownLogFile()
     currentDir = os.getcwd()
     base = filepath.FilePath(self.workingDirectory)
     testdir, self._testDirLock = util._unusedTestDirectory(base)
     os.chdir(testdir.path)
     return currentDir
Ejemplo n.º 3
0
def trial_temp(request):
    # pytest monkey-patches Failure at some point, and there's an interaction
    # between importing things from Twisted during plugin discovery and
    # pytest-xdist that causes problems capturing error output.
    # Therefore, we import these in here.
    from twisted.python.filepath import FilePath
    from twisted.trial.util import _unusedTestDirectory

    olddir = os.getcwd()
    testdir, testdir_lock = _unusedTestDirectory(FilePath("_trial_temp"))
    os.chdir(testdir.path)

    def teardown_tempdir():
        os.chdir(olddir)
        testdir_lock.unlock()
    request.addfinalizer(teardown_tempdir)
Ejemplo n.º 4
0
 def prepareRun(self, reactor=None):
     """
     Spawn local worker processes for running load tests.
     """
     if reactor is None:
         from twisted.internet import reactor
     self.reactor = reactor
     testDir, testDirLock = _unusedTestDirectory(
         FilePath(self._workingDirectory))
     workerNumber = self._workerNumber
     ampWorkers = [LocalWorkerAMP() for x in xrange(workerNumber)]
     workers = self.createLocalWorkers(ampWorkers, testDir.path)
     processEndDeferreds = [worker.endDeferred for worker in workers]
     self.launchWorkerProcesses(reactor.spawnProcess, workers,
                                self._workerArguments)
     self.processEndDeferreds = processEndDeferreds
     self.ampWorkers = ampWorkers
     self.workers = workers
     self.testDirLock = testDirLock
Ejemplo n.º 5
0
    def run(self, suite, reactor=None, cooperate=cooperate,
            untilFailure=False):
        """
        Spawn local worker processes and load tests. After that, run them.

        @param suite: A tests suite to be run.

        @param reactor: The reactor to use, to be customized in tests.
        @type reactor: A provider of
            L{twisted.internet.interfaces.IReactorProcess}

        @param cooperate: The cooperate function to use, to be customized in
            tests.
        @type cooperate: C{function}

        @param untilFailure: If C{True}, continue to run the tests until they
            fail.
        @type untilFailure: C{bool}.

        @return: The test result.
        @rtype: L{DistReporter}
        """
        if reactor is None:
            from twisted.internet import reactor
        result = self._makeResult()
        count = suite.countTestCases()
        self._stream.write("Running %d tests.\n" % (count,))

        if not count:
            # Take a shortcut if there is no test
            suite.run(result.original)
            self.writeResults(result)
            return result

        testDir, testDirLock = _unusedTestDirectory(
            FilePath(self._workingDirectory))
        workerNumber = min(count, self._workerNumber)
        ampWorkers = [LocalWorkerAMP() for x in xrange(workerNumber)]
        workers = self.createLocalWorkers(ampWorkers, testDir.path)
        processEndDeferreds = [worker.endDeferred for worker in workers]
        self.launchWorkerProcesses(reactor.spawnProcess, workers,
                                   self._workerArguments)

        def runTests():
            testCases = iter(list(_iterateTests(suite)))

            workerDeferreds = []
            for worker in ampWorkers:
                workerDeferreds.append(
                    self._driveWorker(worker, result, testCases,
                                      cooperate=cooperate))
            return DeferredList(workerDeferreds, consumeErrors=True,
                                fireOnOneErrback=True)

        stopping = []

        def nextRun(ign):
            self.writeResults(result)
            if not untilFailure:
                return
            if not result.wasSuccessful():
                return
            d = runTests()
            return d.addCallback(nextRun)

        def stop(ign):
            testDirLock.unlock()
            if not stopping:
                stopping.append(None)
                reactor.stop()

        def beforeShutDown():
            if not stopping:
                stopping.append(None)
                d = DeferredList(processEndDeferreds, consumeErrors=True)
                return d.addCallback(continueShutdown)

        def continueShutdown(ign):
            self.writeResults(result)
            return ign

        d = runTests()
        d.addCallback(nextRun)
        d.addBoth(stop)

        reactor.addSystemEventTrigger('before', 'shutdown', beforeShutDown)
        reactor.run()

        return result
Ejemplo n.º 6
0
    def run(self,
            suite,
            reactor=None,
            cooperate=cooperate,
            untilFailure=False):
        """
        Spawn local worker processes and load tests. After that, run them.

        @param suite: A tests suite to be run.

        @param reactor: The reactor to use, to be customized in tests.
        @type reactor: A provider of
            L{twisted.internet.interfaces.IReactorProcess}

        @param cooperate: The cooperate function to use, to be customized in
            tests.
        @type cooperate: C{function}

        @param untilFailure: If C{True}, continue to run the tests until they
            fail.
        @type untilFailure: C{bool}.

        @return: The test result.
        @rtype: L{DistReporter}
        """
        if reactor is None:
            from twisted.internet import reactor
        result = self._makeResult()
        count = suite.countTestCases()
        self._stream.write("Running %d tests.\n" % (count, ))

        if not count:
            # Take a shortcut if there is no test
            suite.run(result.original)
            self.writeResults(result)
            return result

        testDir, testDirLock = _unusedTestDirectory(
            FilePath(self._workingDirectory))
        workerNumber = min(count, self._workerNumber)
        ampWorkers = [LocalWorkerAMP() for x in range(workerNumber)]
        workers = self.createLocalWorkers(ampWorkers, testDir.path)
        processEndDeferreds = [worker.endDeferred for worker in workers]
        self.launchWorkerProcesses(reactor.spawnProcess, workers,
                                   self._workerArguments)

        def runTests():
            testCases = iter(list(_iterateTests(suite)))

            workerDeferreds = []
            for worker in ampWorkers:
                workerDeferreds.append(
                    self._driveWorker(worker,
                                      result,
                                      testCases,
                                      cooperate=cooperate))
            return DeferredList(workerDeferreds,
                                consumeErrors=True,
                                fireOnOneErrback=True)

        stopping = []

        def nextRun(ign):
            self.writeResults(result)
            if not untilFailure:
                return
            if not result.wasSuccessful():
                return
            d = runTests()
            return d.addCallback(nextRun)

        def stop(ign):
            testDirLock.unlock()
            if not stopping:
                stopping.append(None)
                reactor.stop()

        def beforeShutDown():
            if not stopping:
                stopping.append(None)
                d = DeferredList(processEndDeferreds, consumeErrors=True)
                return d.addCallback(continueShutdown)

        def continueShutdown(ign):
            self.writeResults(result)
            return ign

        d = runTests()
        d.addCallback(nextRun)
        d.addBoth(stop)

        reactor.addSystemEventTrigger('before', 'shutdown', beforeShutDown)
        reactor.run()

        return result