def setup(startedNodes): A = startedNodes.Alpha B = startedNodes.Beta for node in A, B: makeNodeFaulty(node, changesRequest) node.delaySelfNomination(10) return adict(faulties=(A, B))
def setup(nodeSet): gn = [v for k, v in nodeSet.nodes.items() if k != 'Alpha'] # delay incoming client messages for good nodes by 250 milliseconds # this gives Alpha a chance to send a propagate message for n in gn: # type: TestNode n.clientIbStasher.delay(lambda _: 1) return adict(goodNodes=gn)
def setup(startedNodes): A = startedNodes.Alpha B = startedNodes.Beta for node in A, B: makeNodeFaulty(node, partial(delaysPrePrepareProcessing, delay=60)) node.delaySelfNomination(10) return adict(faulties=(A, B))
def setup(nodeSet, up): primaryRep, nonPrimaryReps = getPrimaryReplica(nodeSet, 0), \ getNonPrimaryReplicas(nodeSet, 0) # The primary replica would send PRE-PREPARE messages with incorrect digest makeNodeFaulty(primaryRep.node, partial(send3PhaseMsgWithIncorrectDigest, msgType=PrePrepare)) return adict(primaryRep=primaryRep, nonPrimaryReps=nonPrimaryReps)
def setup(startedNodes): A = startedNodes.Alpha B = startedNodes.Beta G = startedNodes.Gamma for node in A, B, G: makeNodeFaulty(node, changesRequest, partial(delaysPrePrepareProcessing, delay=60)) node.delaySelfNomination(10) return adict(faulties=(A, B, G))
def setup(startedNodes): A = startedNodes.Alpha B = startedNodes.Beta # Delay processing of PRE-PREPARE messages by Alpha and Beta for 90 # seconds since the timeout for checking sufficient commits is 60 seconds makeNodeFaulty(A, partial(delaysPrePrepareProcessing, delay=90)) makeNodeFaulty(B, partial(delaysPrePrepareProcessing, delay=90)) A.delaySelfNomination(10) B.delaySelfNomination(10) return adict(faulties=(A, B))
def run(self, coro, nodecount=4): tmpdir = self.fresh_tdir() with TestNodeSet(count=nodecount, tmpdir=tmpdir) as nodeset: with Looper(nodeset) as looper: for n in nodeset: n.startKeySharing() ctx = adict(looper=looper, nodeset=nodeset, tmpdir=tmpdir) looper.run(checkNodesConnected(nodeset)) ensureElectionsDone(looper=looper, nodes=nodeset, retryWait=1, timeout=30) looper.run(coro(ctx))
def setup(nodeSet, up): primaryRep, nonPrimaryReps = getPrimaryReplica(nodeSet, 0), \ getNonPrimaryReplicas(nodeSet, 0) # A non primary replica sends PREPARE messages with incorrect digest faultyRep = nonPrimaryReps[0] makeNodeFaulty(faultyRep.node, partial(send3PhaseMsgWithIncorrectDigest, msgType=Prepare, instId=0)) return adict(primaryRep=primaryRep, nonPrimaryReps=nonPrimaryReps, faultyRep=faultyRep)
def setup(nodeSet, up): primaryRep, nonPrimaryReps = getPrimaryReplica(nodeSet, 0), \ getNonPrimaryReplicas(nodeSet, 0) # The primary replica would send 3 duplicate PRE-PREPARE requests to # non primary replicas makeNodeFaulty(primaryRep.node, partial(sendDuplicate3PhaseMsg, msgType=PrePrepare, count=3)) # The node of the primary replica above should not be blacklisted by any # other node since we are simulating multiple PRE-PREPARE messages and # want to check for a particular suspicion # for node in nodeSet: # if node != primaryRep.node: # node.whitelistNode(primaryRep.node.name, # Suspicions.DUPLICATE_PPR_SENT.code) return adict(primaryRep=primaryRep, nonPrimaryReps=nonPrimaryReps)
def setup(nodeSet, up): primaryRep, nonPrimaryReps = getPrimaryReplica(nodeSet, 0), \ getNonPrimaryReplicas(nodeSet, 0) # A non primary replica sends duplicate PREPARE requests to all other # replicas faultyRep = nonPrimaryReps[0] makeNodeFaulty(faultyRep.node, partial(sendDuplicate3PhaseMsg, msgType=Prepare, count=3, instId=0)) # The node of the primary replica above should not be blacklisted by any # other node since we are simulating multiple PREPARE messages and # want to check for a particular suspicion whitelistNode(faultyRep.node.name, [node for node in nodeSet if node != faultyRep.node], Suspicions.DUPLICATE_PR_SENT.code) return adict(primaryRep=primaryRep, nonPrimaryReps=nonPrimaryReps, faultyRep=faultyRep)
def setup(startedNodes): A = startedNodes.Alpha A.delaySelfNomination(10) makeNodeFaulty(A, partial(delaysPrePrepareProcessing, delay=60)) return adict(faulty=A)
def pool(looper, nodeSet): for n in nodeSet: # type: TestNode n.startKeySharing() looper.run(checkNodesConnected(nodeSet)) checkProtocolInstanceSetup(looper, nodeSet, timeout=5) return adict(looper=looper, nodeset=nodeSet)