Example #1
0
    def checkReactor(self, phase, *_):
        delayed_calls = reactor.getDelayedCalls()
        if delayed_calls:
            self._logger.error("The reactor was dirty during %s:", phase)
            for dc in delayed_calls:
                self._logger.error(">     %s" % dc)
                dc.cancel()

        has_network_selectables = False
        for item in reactor.getReaders() + reactor.getWriters():
            if isinstance(item, HTTPChannel) or isinstance(item, Client):
                has_network_selectables = True
                break

        if has_network_selectables:
            # TODO(Martijn): we wait a while before we continue the check since network selectables
            # might take some time to cleanup. I'm not sure what's causing this.
            yield deferLater(reactor, 0.2, lambda: None)

        # This is the same check as in the _cleanReactor method of Twisted's Trial
        selectable_strings = []
        for sel in reactor.removeAll():
            if interfaces.IProcessTransport.providedBy(sel):
                self._logger.error("Sending kill signal to %s", repr(sel))
                sel.signalProcess('KILL')
            selectable_strings.append(repr(sel))

        self.assertFalse(delayed_calls,
                         "The reactor was dirty during %s" % phase)
        if Session.has_instance():
            try:
                yield Session.get_instance().shutdown()
            except:
                pass
            Session.del_instance()

            raise RuntimeError("Found a leftover session instance during %s" %
                               phase)

        self.assertFalse(
            selectable_strings,
            "The reactor has leftover readers/writers during %s: %r" %
            (phase, selectable_strings))

        # Check whether we have closed all the sockets
        open_readers = reactor.getReaders()
        for reader in open_readers:
            self.assertNotIsInstance(
                reader, BasePort,
                "Listening ports left on the reactor during %s: %s" %
                (phase, reader))

        # Check whether the threadpool is clean
        self.assertFalse(reactor.getThreadPool().working)
Example #2
0
def __main__():
    """
    Run Tribler and check if the reactor is dirty when shutting down.

    This method is also called from tribler_exe.py.
    """
    run()
    delayed_calls = reactor.getDelayedCalls()
    if delayed_calls:
        print >> sys.stderr, "The reactor was not clean after stopping:"
        for dc in delayed_calls:
            print >> sys.stderr, ">     %s" % dc

    stop_reactor()
Example #3
0
def __main__():
    """
    Run Tribler and check if the reactor is dirty when shutting down.

    This method is also called from tribler_exe.py.
    """
    run()
    delayed_calls = reactor.getDelayedCalls()
    if delayed_calls:
        print >> sys.stderr, "The reactor was not clean after stopping:"
        for dc in delayed_calls:
            print >> sys.stderr, ">     %s" % dc

    stop_reactor()
Example #4
0
    def tearDown(self, annotate=True):
        self.tearDownCleanup()
        if annotate:
            self.annotate(self._testMethodName, start=False)

        delayed_calls = reactor.getDelayedCalls()
        if delayed_calls:
            self._logger.error("The reactor was dirty:")
            for dc in delayed_calls:
                self._logger.error(">     %s" % dc)
        self.assertFalse(delayed_calls, "The reactor was dirty when tearing down the test")
        self.assertFalse(Session.has_instance(), 'A session instance is still present when tearing down the test')

        process_unhandled_exceptions()
        self.watchdog.join()