# (c) Copyright 2018 by Coinkite Inc. This file is part of Coldcard # and is covered by GPLv3 license found in COPYING. # # Run tests on the simulator itself, not here... these are basically "unit tests" # import pytest, glob def test_remote_exec(sim_exec): assert sim_exec("RV.write('testing123')") == 'testing123' def test_codecs(sim_execfile): assert sim_execfile('devtest/segwit_addr.py') == '' def test_public(sim_execfile): "verify contents of public 'dump' file" from pycoin.key.BIP32Node import BIP32Node from pycoin.contrib.segwit_addr import encode as sw_encode from pycoin.contrib.segwit_addr import decode as sw_decode from pycoin.encoding import a2b_hashed_base58, hash160 pub = sim_execfile('devtest/dump_public.py') assert 'Error' not in pub #print(pub) pub, dev = pub.split('#DEBUG#', 1) assert 'pub' in pub assert 'prv' not in pub assert 'prv' in dev lines = [i.strip() for i in pub.split('\n')] for ln in lines: if ln[1:4] == 'pub': node_pub = BIP32Node.from_wallet_key(ln) break node_prv = BIP32Node.from_wallet_key(dev.strip()) # pub and private are linked assert node_prv.hwif(as_private=False) == node_pub.hwif() # check every path we derived count = 0 for ln in lines: if ln[0:1] == 'm' and '=>' in ln: subpath, result = ln.split(' => ', 1) sk = node_prv.subkey_for_path(subpath[2:]) if result[0:2] in {'tp', 'xp'}: expect = BIP32Node.from_wallet_key(result) assert sk.hwif(as_private=False) == result elif result[0] in '1mn': assert result == sk.address(False) elif result[0:3] in { 'bc1', 'tb1' }: h20 = sk.hash160() assert result == sw_encode(result[0:2], 0, h20) elif result[0] in '23': h20 = hash160(b'\x00\x14' + sk.hash160()) assert h20 == a2b_hashed_base58(result)[1:] else: raise ValueError(result) count += 1 print("OK: %s" % ln) assert count > 12 def test_nvram(unit_test): # exercise nvram simulation unit_test('devtest/nvram.py') def test_backups(unit_test): # exercise dump of pub data # NOTE: previous tests might have wiped default mnemonic-based seed; so it fails. unit_test('devtest/backups.py') def test_bip143(unit_test): # exercise hash digesting for bip143 signatures unit_test('devtest/unit_bip143.py') def test_addr_decode(unit_test): # - runs som known examples thru CTxIn and check it categories, and extracts pubkey/pkh right unit_test('devtest/unit_addrs.py') def test_clear_seed(unit_test): # just testing the test? unit_test('devtest/clear_seed.py') # EOF