File size: 1,267 Bytes
efeddde
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
from pathlib import Path
from blockchain.blockchain import LocalBlockchain

def test_local_blockchain_lifecycle(tmp_path: Path):
    chain_file = tmp_path / "test_chain.json"
    chain = LocalBlockchain(chain_path=chain_file)

    assert len(chain) == 1
    assert chain.get_chain()[0]["index"] == 0

    # Add forensic block
    evidence = {
        "evidence_hash": "a" * 64,
        "source_image": "test.jpg",
        "match": True
    }
    block1 = chain.add_block(evidence)
    assert block1["index"] == 1
    assert len(chain) == 2
    assert block1["previous_hash"] == chain.get_chain()[0]["hash"]

    # Verify validity
    valid, err = chain.is_valid_chain()
    assert valid is True
    assert err is None

    # Search for evidence hash
    found = chain.verify_evidence_hash("a" * 64)
    assert found is not None
    assert found["index"] == 1

def test_local_blockchain_tamper_detection(tmp_path: Path):
    chain_file = tmp_path / "tamper_chain.json"
    chain = LocalBlockchain(chain_path=chain_file)
    chain.add_block({"evidence_hash": "1" * 64})

    # Tamper with block data
    chain.chain[1]["evidence_record"]["evidence_hash"] = "2" * 64
    valid, err = chain.is_valid_chain()
    assert valid is False
    assert "mismatch" in err.lower()