def testGift(self): # we must start by giving Alice a reference to both Bob and Carol. self.bob = HelperTarget("bob") self.bob_url = self.tubB.registerReference(self.bob) self.carol = HelperTarget("carol") self.carol_url = self.tubC.registerReference(self.carol) # now, from Alice's point of view: d = self.tubA.getReference(self.bob_url) d.addCallback(self._aliceGotBob) return d
def send(self, arg): rr, target = self.setupTarget(HelperTarget()) d = rr.callRemote("set", obj=arg) d.addCallback(self.failUnless) # some of these tests require that we return a Failure object, so we # have to wrap this in a tuple to survive the Deferred. d.addCallback(lambda res: (target.obj, )) return d
def testAnswer2(self): # but objects returned by separate method calls should be distinct rr, target = self.setupTarget(HelperTarget()) r = [1, 2] target.obj = r d = rr.callRemote("get") d.addCallback(self._testAnswer2_1, rr, target) return d
def testAnswer1(self): # also, shared objects in a return value should be shared r = [1, 2] rr, target = self.setupTarget(HelperTarget()) target.obj = (r, r) d = rr.callRemote("get") d.addCallback(lambda res: self.failUnlessIdentical(res[0], res[1])) return d
def testArgs2(self): # but sending them as multiple arguments of the *same* method call # results in identical objects r = [1, 2] rr, target = self.setupTarget(HelperTarget()) d = rr.callRemote("set2", obj1=r, obj2=r) d.addCallback(self._testArgs2_1, rr, target) return d
def testRef4(self): # sending the same Referenceable in multiple calls will result in # equivalent RRs r = Target() rr, target = self.setupTarget(HelperTarget()) d = rr.callRemote("set", obj=r) d.addCallback(self._testRef4_1, rr, r, target) return d
def testDisconnect2(self): rr, target = self.setupTarget(HelperTarget()) self.lost = 0 rr.notifyOnDisconnect(self.disconnected) rr.tracker.broker.transport.loseConnection(CONNECTION_LOST) d = eventually() d.addCallback(lambda res: self.failUnless(self.lost)) return d
def testDisconnect1(self): rr, target = self.setupTarget(HelperTarget()) d = rr.callRemote("hang") e = RuntimeError("lost connection") rr.tracker.broker.transport.loseConnection(e) d.addCallbacks(lambda res: self.fail("should have failed"), lambda why: why.trap(RuntimeError) and None) return d
def NOTtestRemoteRef1(self): # known URLRemoteReferences turn into Referenceables root = Target() rr, target = self.setupTarget(HelperTarget()) self.targetBroker.factory = pb.PBServerFactory(root) urlRRef = self.callingBroker.remoteReferenceForName("", []) # urlRRef points at root d = rr.callRemote("set", obj=urlRRef) self.failUnless(dr(d)) self.failUnlessIdentical(target.obj, root)
def testArgs1(self): # sending the same non-Referenceable object in multiple calls results # in distinct objects, because the serialization scope is bounded by # each method call r = [1, 2] rr, target = self.setupTarget(HelperTarget()) d = rr.callRemote("set", obj=r) d.addCallback(self._testArgs1_1, rr, r, target) # TODO: also make sure the original list goes out of scope once the # method call has finished, to guard against a leaky # reference-tracking implementation. return d
def NOTtestRemoteRef2(self): # unknown URLRemoteReferences are errors root = Target() rr, target = self.setupTarget(HelperTarget()) self.targetBroker.factory = pb.PBServerFactory(root) urlRRef = self.callingBroker.remoteReferenceForName("bogus", []) # urlRRef points at nothing d = rr.callRemote("set", obj=urlRRef) f = de(d) #print f #self.failUnlessEqual(f.type, tokens.Violation) self.failUnlessEqual(type(f.value), str) self.failUnless(f.value.find("unknown clid 'bogus'") != -1)
def echo(self, arg): rr, target = self.setupTarget(HelperTarget()) d = rr.callRemote("echo", obj=arg) return d
def send2(self, arg1, arg2): rr, target = self.setupTarget(HelperTarget()) d = rr.callRemote("set2", obj1=arg1, obj2=arg2) d.addCallback(self.failUnless) d.addCallback(lambda res: (target.obj1, target.obj2)) return d
def send(self, arg): rr, target = self.setupTarget(HelperTarget()) d = rr.callRemote("set", obj=arg) d.addCallback(self.failUnless) d.addCallback(lambda res: target.obj) return d
def testUnsendable(self): rr, target = self.setupTarget(HelperTarget()) d = rr.callRemote("set", obj=Unsendable()) d.addCallbacks(lambda res: self.fail("should have failed"), self._testUnsendable_1) return d
def testDefer(self): rr, target = self.setupTarget(HelperTarget()) d = rr.callRemote("defer", obj=12) d.addCallback(lambda res: self.failUnlessEqual(res, 12)) return d