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
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()
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()
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)