def testReplyWhenRepliesFromAllNodesAreSame(looper, client1): """ When there are not faulty nodes, the client must get a reply from all the nodes. """ request = sendRandomRequest(client1) looper.run( eventually(assertLength, client1.inBox, 2 * nodeCount * request.reqId, retryWait=.25, timeout=15)) checkResponseCorrectnessFromNodes(client1.inBox, request.reqId, F)
def testReplyWhenRepliesFromExactlyFPlusOneNodesAreSame(looper, client1): """ When only :math:`2f+1` replies from the nodes are matching, the client would accept the reply """ request = sendRandomRequest(client1) # exactly f + 1 => (3) nodes have correct responses # modify some (numOfResponses of type REPLY - (f + 1)) => 4 responses to # have a different operations looper.run( eventually(assertLength, client1.inBox, 2 * nodeCount * request.reqId, retryWait=.25, timeout=15)) replies = (msg for msg, frm in client1.inBox if msg['op'] == REPLY and msg['reqId'] == request.reqId) # change two responses to something different for i in range(2): msg = next(replies) msg['result']['txnId'] = str(i) + "Some random id" checkResponseCorrectnessFromNodes(client1.inBox, request.reqId, F)