Beispiel #1
0
def testValidateDataMajorityPasses():
    consense = consensing.CompositeConsense()

    response1 = builder.DideryResponseBuilder(
        builder.CompositeHistoryBuilder().withRotations()).withPort(8000)
    response2 = builder.DideryResponseBuilder(builder.CompositeHistoryBuilder(
    ).withRotations().withInvalidRotationSigAt(1))
    response3 = builder.DideryResponseBuilder(
        builder.CompositeHistoryBuilder().withRotations()).withPort(8081)

    data = {
        'http://localhost:8000/event/': response1.build(),
        'http://localhost:8080/event/': response2.build(),
        'http://localhost:8081/event/': response3.build()
    }

    consense.validateData(data)

    exp_data = response1.historyBuilder.build()
    sha = sha256(str(ODict(exp_data)).encode()).hexdigest()

    assert sha in consense.valid_data
    assert consense.valid_data[sha]['0'] == exp_data['0'].data
    assert consense.valid_data[sha]['1'] == exp_data['1'].data
    assert sha in consense.valid_match_counts
    assert consense.valid_match_counts == {sha: 2}
Beispiel #2
0
def testValidateDataValidSigsConflictingData():
    consense = consensing.CompositeConsense()

    response1 = builder.DideryResponseBuilder(
        builder.CompositeHistoryBuilder().withRotations()).withPort(8000)
    response2 = builder.DideryResponseBuilder(
        builder.CompositeHistoryBuilder().withRotations().withRotations())
    response3 = builder.DideryResponseBuilder(
        builder.CompositeHistoryBuilder().withRotations()).withPort(8081)

    data = {
        'http://localhost:8000/event/': response1.build(),
        'http://localhost:8080/event/': response2.build(),
        'http://localhost:8081/event/': response3.build()
    }

    consense.validateData(data)

    exp_data = response1.historyBuilder.build()
    sha = sha256(str(ODict(exp_data)).encode()).hexdigest()
    bad_exp_data = response2.historyBuilder.build()
    bad_sha = sha256(str(ODict(bad_exp_data)).encode()).hexdigest()

    assert sha in consense.valid_data
    assert consense.valid_data[sha]['0'] == exp_data['0'].data
    assert consense.valid_data[sha]['1'] == exp_data['1'].data
    assert sha in consense.valid_match_counts
    assert consense.valid_match_counts[sha] == 2

    assert bad_sha in consense.valid_data
    assert consense.valid_data[bad_sha]['0'] == bad_exp_data['0'].data
    assert consense.valid_data[bad_sha]['1'] == bad_exp_data['1'].data
    assert consense.valid_data[bad_sha]['2'] == bad_exp_data['2'].data
    assert bad_sha in consense.valid_match_counts
    assert consense.valid_match_counts[bad_sha] == 1
Beispiel #3
0
def testValidateDataValidSigsConflictingData():
    consense = consensing.Consense()

    response1 = builder.DideryResponseBuilder(
        builder.SignedHistoryBuilder()).withPort(8000)
    response2 = builder.DideryResponseBuilder(builder.SignedHistoryBuilder())
    response3 = builder.DideryResponseBuilder(
        builder.SignedHistoryBuilder().withRotation().withRotation()).withPort(
            8081)

    data = {
        "http://localhost:8000/history": response1.build(),
        "http://localhost:8080/history": response2.build(),
        "http://localhost:8081/history": response3.build()
    }

    consense.validateData(data)

    history1 = response1.historyBuilder
    history3 = response3.historyBuilder

    assert consense.valid_data == {
        history1.signerSig: history1.build().data,
        history3.rotationSig: history3.build().data
    }
    assert history1.signerSig in consense.valid_match_counts
    assert consense.valid_match_counts[history1.signerSig] == 2
    assert history3.rotationSig in consense.valid_match_counts
    assert consense.valid_match_counts[history3.rotationSig] == 1
Beispiel #4
0
def testValidateDataWithTimeOut():
    consense = consensing.Consense()

    response1 = builder.DideryResponseBuilder(
        builder.SignedHistoryBuilder().withEmptyData()).withPort(
            8000).withStatus(0)
    response2 = builder.DideryResponseBuilder(builder.SignedHistoryBuilder())

    data = {
        "http://localhost:8000/history": response1.build(),
        "http://localhost:8080/history": response2.build()
    }

    consense.validateData(data)

    history2 = response2.historyBuilder

    assert consense.valid_data == {history2.signerSig: history2.build().data}
    assert consense.valid_match_counts == {history2.signerSig: 1}
Beispiel #5
0
def testConsenseIncompleteMajority():
    consense = consensing.Consense()

    response1 = builder.DideryResponseBuilder(
        builder.SignedHistoryBuilder().withInvalidSignerSignature()).withPort(
            8000)
    response2 = builder.DideryResponseBuilder(
        builder.SignedHistoryBuilder().withRotation())
    response3 = builder.DideryResponseBuilder(
        builder.SignedHistoryBuilder().withRotation().withRotation()).withPort(
            8081)

    data = {
        "http://localhost:8000/history": response1.build(),
        "http://localhost:8080/history": response2.build(),
        "http://localhost:8081/history": response3.build()
    }

    assert consense.consense(data)[0] is None
Beispiel #6
0
def testValidateDataInvalidSigsIncompleteMajority():
    consense = consensing.Consense()

    response1 = builder.DideryResponseBuilder(
        builder.SignedHistoryBuilder().withInvalidSignerSignature()).withPort(
            8000)
    response2 = builder.DideryResponseBuilder(builder.SignedHistoryBuilder())

    data = {
        "http://localhost:8000/history": response1.build(),
        "http://localhost:8080/history": response2.build()
    }

    consense.validateData(data)

    history2 = response2.historyBuilder
    assert consense.valid_data == {
        history2.signerSig: builder.SignedHistoryBuilder().build().data
    }
    assert consense.valid_match_counts == {history2.signerSig: 1}
Beispiel #7
0
def test50_50Split():
    consense = consensing.Consense()

    response1 = builder.DideryResponseBuilder(
        builder.SignedHistoryBuilder()).withPort(8000)
    response2 = builder.DideryResponseBuilder(builder.SignedHistoryBuilder())
    response3 = builder.DideryResponseBuilder(
        builder.SignedHistoryBuilder().withRotation().withRotation()).withPort(
            8081)
    response4 = builder.DideryResponseBuilder(
        builder.SignedHistoryBuilder().withRotation().withRotation()).withPort(
            8001)

    data = {
        "http://localhost:8000/history": response1.build(),
        "http://localhost:8080/history": response2.build(),
        "http://localhost:8081/history": response3.build(),
        "http://localhost:8001/history": response4.build()
    }

    assert consense.consense(data)[0] is None
Beispiel #8
0
def testValidateDataWith200StatusNoData():
    consense = consensing.CompositeConsense()

    response1 = builder.DideryResponseBuilder(
        builder.CompositeHistoryBuilder().withRotations()).withPort(8000)
    response2 = builder.DideryResponseBuilder(
        builder.CompositeHistoryBuilder().withEmptyData()).withStatus(200)

    data = {
        'http://localhost:8000/event/': response1.build(),
        'http://localhost:8080/event/': response2.build()
    }

    consense.validateData(data)

    exp_data = response1.historyBuilder.build()
    sha = sha256(str(ODict(exp_data)).encode()).hexdigest()

    assert len(consense.valid_data) == 1
    assert sha in consense.valid_data
    assert consense.valid_data[sha]['0'] == exp_data['0'].data
    assert consense.valid_data[sha]['1'] == exp_data['1'].data
    assert sha in consense.valid_match_counts
    assert consense.valid_match_counts == {sha: 1}
Beispiel #9
0
def testConsenseAllEqual():
    consense = consensing.Consense()

    response1 = builder.DideryResponseBuilder(
        builder.SignedHistoryBuilder().withRotation()).withPort(8000)

    data = {
        "http://localhost:8000/history": response1.withPort(8000).build(),
        "http://localhost:8080/history": response1.withPort(8080).build(),
        "http://localhost:8081/history": response1.withPort(8081).build()
    }

    signature = response1.historyBuilder.rotationSig

    assert consense.consense(data)[0] == response1.historyBuilder.build().data
    assert signature in consense.valid_data
    assert signature in consense.valid_match_counts
    assert consense.valid_match_counts[signature] == 3