Files
easy-wallet/tests/test_p2pk.py
Davide Grilli c98d4db711 test: expand test suite to 194 tests across all modules
Add tests/test_crypto.py (22 tests) and tests/test_single_wallet.py
(46 tests) for previously uncovered modules; extend existing test files
with WIF format checks, error/validation cases, BIP39 passphrase,
account index, words_num, and redeem script structure tests
2026-03-10 09:40:01 +01:00

97 lines
2.6 KiB
Python

import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
from src.p2pk import generate_p2pk
SECRETSCAN_URL = "https://secretscan.org/Bitcoin?address={}"
NETWORKS = ['mainnet', 'testnet', 'regtest']
def test_p2pk_fields():
result = generate_p2pk('mainnet', compressed=True)
assert set(result.keys()) == {'network', 'script_type', 'private_key_hex', 'private_key_wif', 'public_key_hex'}
def test_p2pk_script_type():
result = generate_p2pk('mainnet')
assert result['script_type'] == 'p2pk'
def test_p2pk_private_key_length():
result = generate_p2pk('mainnet')
assert len(result['private_key_hex']) == 64
def test_p2pk_compressed_pubkey_length():
result = generate_p2pk('mainnet', compressed=True)
assert len(result['public_key_hex']) == 66
assert result['public_key_hex'][:2] in ('02', '03')
def test_p2pk_uncompressed_pubkey_length():
result = generate_p2pk('mainnet', compressed=False)
assert len(result['public_key_hex']) == 130
assert result['public_key_hex'][:2] == '04'
def test_p2pk_wif_mainnet():
result = generate_p2pk('mainnet', compressed=True)
assert result['private_key_wif'][0] in ('K', 'L')
def test_p2pk_wif_testnet():
result = generate_p2pk('testnet', compressed=True)
assert result['private_key_wif'][0] == 'c'
def test_p2pk_all_networks():
for network in NETWORKS:
result = generate_p2pk(network)
assert result['network'] == network
def test_p2pk_unique_keys():
r1 = generate_p2pk('mainnet')
r2 = generate_p2pk('mainnet')
assert r1['private_key_hex'] != r2['private_key_hex']
def test_p2pk_print_secretscan(capsys):
# P2PK has no address — print the public key for manual reference
result = generate_p2pk('mainnet')
print(f"\n[P2PK] Public key: {result['public_key_hex']}")
print(f"[P2PK] SecretScan (search by pubkey): https://secretscan.org/")
captured = capsys.readouterr()
assert 'secretscan.org' in captured.out
# --- Error cases ---
def test_p2pk_invalid_network_raises():
import pytest
with pytest.raises(ValueError):
generate_p2pk('invalid_net')
# --- P2PK has no address field ---
def test_p2pk_no_address_field():
result = generate_p2pk('mainnet')
assert 'address' not in result
# --- Regtest WIF same as testnet ---
def test_p2pk_wif_regtest_compressed_starts_c():
result = generate_p2pk('regtest', compressed=True)
assert result['private_key_wif'][0] == 'c'
# --- Uncompressed WIF mainnet starts with 5 ---
def test_p2pk_wif_mainnet_uncompressed_starts_5():
result = generate_p2pk('mainnet', compressed=False)
assert result['private_key_wif'][0] == '5'