Пример #1
0
def test_is_chain_valid__wrong_genesis(json_format, clean_chain_file_fixture):

    miner = Miner(path_to_chain=path_to_chain,
                  json_format=json_format,
                  port=DEFAULT_PORT,
                  difficulty=DEFAULT_DIFFICULTY,
                  neighbours=[],
                  force_new_chain=False)

    genesis_hash = miner._hash(miner.blockchain.last_block)
    miner.blockchain.add_new_block(data=Data("Some test data."),
                                   proof=1406000,
                                   previous_hash=genesis_hash)

    second_block_hash = miner._hash(miner.blockchain.last_block)
    miner.blockchain.add_new_block(data=Data("Some more test data."),
                                   proof=423135,
                                   previous_hash=second_block_hash)

    # wrong index, correct previous hash
    miner.blockchain.chain[0]._index = 1
    assert not miner._is_chain_valid()

    # wrong index, wrong previous hash
    miner.blockchain.chain[
        0]._previous_hash = "e59be601c9213694f0b72534148199b24d1ed7c1c29c02ba4602e780015a7663"
    assert not miner._is_chain_valid()

    # correct index, wrong previous hash
    miner.blockchain.chain[0]._index = 0
    assert not miner._is_chain_valid()

    # cleanup ..
    miner.blockchain.chain[0]._previous_hash = None
Пример #2
0
def test_is_chain_valid__wrong_block_2(json_format, clean_chain_file_fixture):

    miner = Miner(path_to_chain=path_to_chain,
                  json_format=json_format,
                  port=DEFAULT_PORT,
                  difficulty=DEFAULT_DIFFICULTY,
                  neighbours=[],
                  force_new_chain=False)

    genesis_hash = miner._hash(miner.blockchain.last_block)
    miner.blockchain.add_new_block(data=Data("Some test data."),
                                   proof=1406000,
                                   previous_hash=genesis_hash)

    second_block_hash = miner._hash(miner.blockchain.last_block)
    miner.blockchain.add_new_block(data=Data("Some more test data."),
                                   proof=423135,
                                   previous_hash=second_block_hash)

    # wrong index, correct previous hash, correct proof of work, correct timestamp
    miner.blockchain.chain[2]._index = 42
    assert not miner._is_chain_valid()

    # wrong index, wrong previous hash, correct proof of work, correct timestamp
    miner.blockchain.chain[2]._previous_hash = None
    assert not miner._is_chain_valid()

    # wrong index, wrong previous hash, wrong proof of work, correct timestamp
    miner.blockchain.chain[2]._proof = 1234876423876
    assert not miner._is_chain_valid()

    # wrong index, wrong previous hash, wrong proof of work, wrong timestamp
    miner.blockchain.chain[2]._timestamp = miner.blockchain.chain[0].timestamp
    assert not miner._is_chain_valid()

    # correct index, wrong previous hash, wrong proof of work, wrong timestamp
    miner.blockchain.chain[2]._index = 2
    assert not miner._is_chain_valid()

    # correct index, correct previous hash, wrong proof of work, wrong timestamp
    miner.blockchain.chain[2]._previous_hash = second_block_hash
    assert not miner._is_chain_valid()

    # correct index, correct previous hash, correct proof of work, wrong timestamp
    miner.blockchain.chain[2]._proof = 423135
    assert not miner._is_chain_valid()
Пример #3
0
def test_is_chain_valid__valid_chain(json_format, clean_chain_file_fixture):

    miner = Miner(path_to_chain=path_to_chain,
                  json_format=json_format,
                  port=DEFAULT_PORT,
                  difficulty=DEFAULT_DIFFICULTY,
                  neighbours=[],
                  force_new_chain=False)

    genesis_hash = miner._hash(miner.blockchain.last_block)
    miner.blockchain.add_new_block(data=Data("Some test data."),
                                   proof=1406000,
                                   previous_hash=genesis_hash)

    second_block_hash = miner._hash(miner.blockchain.last_block)
    miner.blockchain.add_new_block(data=Data("Some more test data."),
                                   proof=423135,
                                   previous_hash=second_block_hash)

    assert miner._is_chain_valid()
Пример #4
0
def test_hash(json_format, clean_chain_file_fixture):

    miner = Miner(path_to_chain=path_to_chain,
                  json_format=json_format,
                  port=DEFAULT_PORT,
                  difficulty=DEFAULT_DIFFICULTY,
                  neighbours=[],
                  force_new_chain=False)

    assert Blockchain.genesis_block_hash == miner._hash(
        Blockchain.genesis_block)

    # only Block objects are hashable by Miner objects
    with pytest.raises(ValueError) as error:

        string_object = "This is a random String object"
        miner._hash(string_object)

        # correct error?
        assert "Only `Block` objects are hashable!" == str(error.value)