def testPrimarySendsAPrepareAndMarkedSuspicious(looper, txnPoolNodeSet, delay_commits,
                                                preprepared1):
    def sendPrepareFromPrimary(instId):
        primary = getPrimaryReplica(txnPoolNodeSet, instId)
        viewNo, ppSeqNo = next(iter(primary._ordering_service.sentPrePrepares.keys()))
        ppReq = primary._ordering_service.sentPrePrepares[viewNo, ppSeqNo]
        primary._ordering_service._do_prepare(ppReq)

        def chk():
            for r in getNonPrimaryReplicas(txnPoolNodeSet, instId):
                l = len([param for param in getAllArgs(r._ordering_service, r._ordering_service.process_prepare)
                         if param['sender'] == primary.name])
                assert l == 1

        looper.run(eventually(chk))

    sendPrepareFromPrimary(0)

    for node in txnPoolNodeSet:
        if node in getNonPrimaryReplicas(txnPoolNodeSet, 0):
            frm, reason, code = getAllArgs(node, TestNode.reportSuspiciousNode)
            assert frm == getPrimaryReplica(txnPoolNodeSet, 0).node.name
            assert isinstance(reason, SuspiciousNode)
            assert len(getNodeSuspicions(node,
                                         Suspicions.PR_FRM_PRIMARY.code)) == 10
def testPrimarySendsAPrepareAndMarkedSuspicious(looper, nodeSet, preprepared1):
    def sendPrepareFromPrimary(instId):
        primary = getPrimaryReplica(nodeSet, instId)
        viewNo, ppSeqNo = next(iter(primary.sentPrePrepares.keys()))
        prepare = Prepare(instId, viewNo, ppSeqNo, preprepared1.digest,
                          time.time())
        primary.doPrepare(prepare)

        def chk():
            for r in getNonPrimaryReplicas(nodeSet, instId):
                l = len([
                    param for param in getAllArgs(r, r.processPrepare)
                    if param['sender'] == primary.name
                ])
                assert l == 1

        looper.run(eventually(chk))

    sendPrepareFromPrimary(0)

    for node in nodeSet:
        if node in getNonPrimaryReplicas(nodeSet, 0):
            frm, reason, code = getAllArgs(node, TestNode.reportSuspiciousNode)
            assert frm == getPrimaryReplica(nodeSet, 0).node.name
            assert isinstance(reason, SuspiciousNode)
            assert len(getNodeSuspicions(node,
                                         Suspicions.PR_FRM_PRIMARY.code)) == 10
Example #3
0
 def chk():
     for r in (primaryReplica, *remainingNpr):
         recvdPps = recvdPrePrepare(r)
         assert len(recvdPps) == 1
         assert recvdPps[0]['pp'][:-1] == ppr[:-1]
         nodeSuspicions = len(getNodeSuspicions(
             r.node, Suspicions.PPR_FRM_NON_PRIMARY.code))
         assert nodeSuspicions == 1
 def chkSusp():
     for r in nonPrimaryReps:
         # Every node with non primary replicas of instance 0 should raise
         # suspicion
         assert len(getNodeSuspicions(r.node,
                                      Suspicions.PPR_DIGEST_WRONG.code)) == 1
         # No non primary replica should send any PREPARE
         assert len(sentPrepare(r)) == 0
 def g():
     for node in nodeSet:
         if node.name != maliciousNode.name:
             frm, reason, code = getAllArgs(node, Node.reportSuspiciousNode)
             assert frm == maliciousNode.name
             assert isinstance(reason, SuspiciousNode)
             assert len(getNodeSuspicions(node,
                                          Suspicions.FREQUENT_INST_CHNG.code)) == 13
Example #6
0
 def chkSusp():
     for r in (primaryRep, *nonPrimaryReps):
         if r.name != faultyRep.name:
             # Every node except the one from which PREPARE with incorrect
             # digest was sent should raise suspicion for the PREPARE
             # message
             assert len(getNodeSuspicions(r.node,
                                          Suspicions.PR_DIGEST_WRONG.code)) == 1
 def chkSusp():
     for r in nonPrimaryReps:
         # Every node with non primary replicas of instance 0 should raise
         # suspicion twice, once for each extra PRE-PREPARE request
         assert len(getNodeSuspicions(r.node,
                                      Suspicions.DUPLICATE_PPR_SENT.code)) == 2
         # Each non primary replica should just send one PREPARE
         assert len(sentPrepare(r)) == 1
Example #8
0
 def chkSusp():
     for r in (primaryRep, *nonPrimaryReps):
         if r.name != faultyRep.name:
             # Every node except the one from which PREPARE with incorrect
             # digest was sent should raise suspicion for the PREPARE
             # message
             assert len(getNodeSuspicions(r.node,
                                          Suspicions.PR_DIGEST_WRONG.code)) == 1
 def g():
     for node in nodeSet:
         if node.name != maliciousNode.name:
             frm, reason, code = getAllArgs(node, Node.reportSuspiciousNode)
             assert frm == maliciousNode.name
             assert isinstance(reason, SuspiciousNode)
             assert len(getNodeSuspicions(node,
                                          Suspicions.FREQUENT_INST_CHNG.code)) == 13
 def chkSusp():
     for r in nonPrimaryReps:
         # Every node with non primary replicas of instance 0 should raise
         # suspicion twice, once for each extra PRE-PREPARE request
         assert len(getNodeSuspicions(r.node,
                                      Suspicions.DUPLICATE_PPR_SENT.code)) == 2
         # Each non primary replica should just send one PREPARE
         assert len(sentPrepare(r)) == 1
Example #11
0
 def chkSusp():
     for r in (primaryRep, *nonPrimaryReps):
         if r.name != faultyRep.name:
             # Every node except the one from which COMMIT with incorrect
             # digest was sent should raise suspicion for the COMMIT
             # message
             susps = getNodeSuspicions(r.node,
                                       Suspicions.CM_DIGEST_WRONG.code)
             assert len(susps) == 1
Example #12
0
 def chkSusp():
     for r in (primaryRep, *nonPrimaryReps):
         if r.name != faultyRep.name:
             # Every node except the one from which COMMIT with incorrect
             # digest was sent should raise suspicion for the COMMIT
             # message
             susps = getNodeSuspicions(r.node,
                                       Suspicions.CM_DIGEST_WRONG.code)
             assert len(susps) == 1
 def chkSusp():
     for r in (primaryRep, *nonPrimaryReps):
         if r.name != faultyRep.name:
             # Every node except the one from which duplicate COMMIT was
             # sent should raise suspicion twice, once for each extra
             # PREPARE request
             assert len(getNodeSuspicions(r.node,
                                          Suspicions.DUPLICATE_CM_SENT.code)) \
                    == 2
 def chkSusp():
     for r in (primaryRep, *nonPrimaryReps):
         if r.name != faultyRep.name:
             # Every node except the one from which duplicate COMMIT was
             # sent should raise suspicion twice, once for each extra
             # PREPARE request
             assert len(
                 getNodeSuspicions(r.node,
                                   Suspicions.DUPLICATE_CM_SENT.code)) == 2
 def chk():
     for r in remainingNpr:
         recvdPps = recvd_pre_prepares(r)
         assert len(recvdPps) == 1
         assert compareNamedTuple(recvdPps[0], ppr, f.DIGEST.nm,
                                  f.STATE_ROOT.nm, f.TXN_ROOT.nm)
         nodeSuspicions = len(
             getNodeSuspicions(r.node, Suspicions.PPR_FRM_NON_PRIMARY.code))
         assert nodeSuspicions == 1
Example #16
0
 def chkSusp():
     for r in nonPrimaryReps:
         # Every node with non primary replicas of instance 0 should raise
         # suspicion
         assert len(
             getNodeSuspicions(r.node,
                               Suspicions.PPR_DIGEST_WRONG.code)) == 1
         # No non primary replica should send any PREPARE
         assert len(sentPrepare(r)) == 0
 def chk():
     for r in remainingNpr:
         recvdPps = recvd_pre_prepares(r)
         assert len(recvdPps) == 1
         assert compareNamedTuple(recvdPps[0], ppr,
                                  f.DIGEST.nm, f.STATE_ROOT.nm,
                                  f.TXN_ROOT.nm)
         nodeSuspicions = len(getNodeSuspicions(
             r.node, Suspicions.PPR_FRM_NON_PRIMARY.code))
         assert nodeSuspicions == 1
 def chkSusp():
     for r in nonPrimaryReps:
         # Every node with non primary replicas of instance 0 should raise
         # suspicion
         susp_code = Suspicions.PPR_DIGEST_WRONG.code
         # Since the node sending bad requests might become primary of
         # some backup instance after view changes, it will again send a
         # PRE-PREPARE with incorrect digest, so other nodes might raise
         # suspicion more than once
         assert len(getNodeSuspicions(r.node, susp_code)) >= 1
         # No non primary replica should send any PREPARE
         assert len(sentPrepare(r, viewNo=0, ppSeqNo=1)) == 0
 def chkSusp():
     for r in nonPrimaryReps:
         # Every node with non primary replicas of instance 0 should raise
         # suspicion
         susp_code = Suspicions.PPR_DIGEST_WRONG.code
         # Since the node sending bad requests might become primary of
         # some backup instance after view changes, it will again send a
         # PRE-PREPARE with incorrect digest, so other nodes might raise
         # suspicion more than once
         assert len(getNodeSuspicions(r.node,
                                      susp_code)) >= 1
         # No non primary replica should send any PREPARE
         assert len(sentPrepare(r, viewNo=0, ppSeqNo=1)) == 0
def testPrimarySendsAPrepareAndMarkedSuspicious(looper, nodeSet, preprepared1):
    def sendPrepareFromPrimary(instId):
        primary = getPrimaryReplica(nodeSet, instId)
        preprepared1.viewNo = instId
        preprepared1.ppSeqNo = primary.prePrepareSeqNo
        primary.doPrepare(preprepared1)
        for r in getNonPrimaryReplicas(nodeSet, instId):
            l = len([param for param in getAllArgs(r, r.processPrepare)
                     if param['sender'] == primary.name])
            assert l == 1

        sendPrepareFromPrimary(0)

    for node in nodeSet:
        if node in getNonPrimaryReplicas(nodeSet, 0):
            frm, reason, code = getAllArgs(node, Node.reportSuspiciousNode)
            assert frm == getPrimaryReplica(nodeSet, 0).node.name
            assert isinstance(reason, SuspiciousNode)
            assert len(getNodeSuspicions(node, Suspicions.PR_FRM_PRIMARY.code)) \
                   == 10
def testPrimarySendsAPrepareAndMarkedSuspicious(looper, nodeSet, preprepared1):
    def sendPrepareFromPrimary(instId):
        primary = getPrimaryReplica(nodeSet, instId)
        preprepared1.viewNo = instId
        preprepared1.ppSeqNo = primary.prePrepareSeqNo
        primary.doPrepare(preprepared1)
        for r in getNonPrimaryReplicas(nodeSet, instId):
            l = len([
                param for param in getAllArgs(r, r.processPrepare)
                if param['sender'] == primary.name
            ])
            assert l == 1

        sendPrepareFromPrimary(0)

    for node in nodeSet:
        if node in getNonPrimaryReplicas(nodeSet, 0):
            frm, reason, code = getAllArgs(node, Node.reportSuspiciousNode)
            assert frm == getPrimaryReplica(nodeSet, 0).node.name
            assert isinstance(reason, SuspiciousNode)
            assert len(getNodeSuspicions(node, Suspicions.PR_FRM_PRIMARY.code)) \
                   == 10
 def chk():
     for r in getNonPrimaryReplicas(nodeSet, instId):
         nodeSuspicions = len(getNodeSuspicions(
                 r.node, Suspicions.WRONG_PPSEQ_NO.code))
         assert nodeSuspicions == 1
Example #23
0
def get_timestamp_suspicion_count(node):
    return len(getNodeSuspicions(node, Suspicions.PPR_TIME_WRONG.code))
 def chk():
     for r in getNonPrimaryReplicas(nodeSet, instId):
         nodeSuspicions = len(
             getNodeSuspicions(r.node, Suspicions.WRONG_PPSEQ_NO.code))
         assert nodeSuspicions == 1
Example #25
0
def get_timestamp_suspicion_count(node):
    return len(getNodeSuspicions(node, Suspicions.PPR_TIME_WRONG.code))