Exemplo n.º 1
0
    def test_fail(self):
        """Test event failure."""
        result = []

        def failed(res):
            result.append(res)

        e = TwistedEvent()

        e.wait().addErrback(failed)
        self.assertEqual(result, [])

        f = Failure(Exception())
        e.fail(f)
        self.assertEqual(result, [f])

        self.assertRaises(AlreadyFiredError, e.fire)
        self.assertRaises(AlreadyFiredError, e.fail, f)

        e.wait().addErrback(failed)
        self.assertEqual(result, [f, f])

        e.fail_if_not_fired(None)

        e = TwistedEvent()

        e.wait().addErrback(failed)
        e.fail_if_not_fired(f)
        self.assertEqual(result, [f, f, f])
Exemplo n.º 2
0
    def __init__(self,
                 delegate,
                 vhost,
                 spec,
                 heartbeat=0,
                 clock=None,
                 insist=False):
        FrameReceiver.__init__(self, spec)
        self.delegate = delegate

        # XXX Cyclic dependency
        self.delegate.client = self

        self.vhost = vhost

        self.channelFactory = type("Channel%s" % self.spec.klass.__name__,
                                   (self.channelClass, self.spec.klass), {})
        self.channels = {}
        self.channelLock = defer.DeferredLock()

        self.outgoing = defer.DeferredQueue()
        self.work = defer.DeferredQueue()

        self.started = TwistedEvent()
        self.disconnected = TwistedEvent()  # Fired upon connection shutdown
        self.closed = False

        self.queueLock = defer.DeferredLock()
        self.basic_return_queue = TimeoutDeferredQueue()

        self.queues = {}

        self.outgoing.get().addCallback(self.writer)
        self.work.get().addCallback(self.worker)
        self.heartbeatInterval = heartbeat
        self.insist = insist
        if clock is None:
            from twisted.internet import reactor
            clock = reactor
        self.clock = clock
        if self.heartbeatInterval > 0:
            self.checkHB = self.clock.callLater(
                self.heartbeatInterval * self.MAX_UNSEEN_HEARTBEAT,
                self.check_heartbeat)
            self.sendHB = LoopingCall(self.send_heartbeat)
            self.sendHB.clock = self.clock
            d = self.started.wait()
            d.addCallback(lambda _: self.reschedule_send_heartbeat())
            d.addCallback(lambda _: self.reschedule_check_heartbeat())
            # If self.started fails, don't start the heartbeat.
            d.addErrback(lambda _: None)
    def __init__(self, delegate, vhost, spec, heartbeat=0):
        FrameReceiver.__init__(self, spec)
        self.delegate = delegate

        # XXX Cyclic dependency
        self.delegate.client = self

        self.vhost = vhost

        self.channelFactory = type("Channel%s" % self.spec.klass.__name__,
                                   (self.channelClass, self.spec.klass), {})
        self.channels = {}
        self.channelLock = defer.DeferredLock()

        self.outgoing = defer.DeferredQueue()
        self.work = defer.DeferredQueue()

        self.started = TwistedEvent()

        self.queueLock = defer.DeferredLock()
        self.basic_return_queue = TimeoutDeferredQueue()

        self.queues = {}

        self.outgoing.get().addCallback(self.writer)
        self.work.get().addCallback(self.worker)
        self.heartbeatInterval = heartbeat
        if self.heartbeatInterval > 0:
            self.checkHB = reactor.callLater(
                self.heartbeatInterval * self.MAX_UNSEEN_HEARTBEAT,
                self.checkHeartbeat)
            self.sendHB = LoopingCall(self.sendHeartbeat)
            d = self.started.wait()
            d.addCallback(lambda _: self.reschedule_sendHB())
            d.addCallback(lambda _: self.reschedule_checkHB())
Exemplo n.º 4
0
    def test_independent(self):
        """Test that waiters are independent."""
        result = []

        def bad(res):
            result.append(res)
            raise Exception()

        def fired(res):
            result.append(res)

        e = TwistedEvent()

        d = e.wait().addCallback(bad)
        e.wait().addCallback(fired)
        d.addErrback(lambda _ : None)

        e.fire()

        self.assertEqual(result, [True, True])
Exemplo n.º 5
0
    def test_fire(self):
        """Test event success."""
        result = []

        def fired(res):
            result.append(res)

        e = TwistedEvent()

        e.wait().addCallback(fired)
        self.assertEqual(result, [])

        e.fire()
        self.assertEqual(result, [True])

        self.assertRaises(AlreadyFiredError, e.fire)
        self.assertRaises(AlreadyFiredError, e.fail, None)

        e.wait().addCallback(fired)
        self.assertEqual(result, [True, True])

        e.fail_if_not_fired(None)