Browse Source

rewrite tool API test

The MMGen Project 4 years ago
parent
commit
c7dbdfe756
2 changed files with 66 additions and 36 deletions
  1. 65 35
      test/misc/tool_api_test.py
  2. 1 1
      test/test_py_d/ts_tool.py

+ 65 - 35
test/misc/tool_api_test.py

@@ -10,6 +10,12 @@ tool_api_test.py: test the MMGen suite tool API
 import sys,os
 os.chdir(os.path.dirname(os.path.dirname(os.path.abspath(os.path.dirname(sys.argv[0])))))
 sys.path[0] = os.curdir
+from mmgen.obj import PrivKey,CoinAddr
+
+keys = [
+	'118089d66b4a5853765e94923abdd5de4616c6e5118089d66b4a5853765e9492',
+	'deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
+	]
 
 def check_equal(a,b):
 	assert a == b, f'{a} != {b}'
@@ -17,15 +23,45 @@ def check_equal(a,b):
 def msg(*args,**kwargs):
 	print(*args,**kwargs,file=sys.stdout)
 
-def init_coin(t,coinsym,network,addrtype,triplet):
+def init_coin(t,coinsym,network,addrtype):
 	t.init_coin(coinsym,network)
 	t.addrtype = addrtype
 	check_equal(type(t.addrtype).__name__,'MMGenAddrType')
-	check_equal(f'{t.coin} {t.proto.cls_name} {t.addrtype}', triplet)
-	msg('\ncoin/proto/type:',triplet)
+	msg(f'\n{t.coin} {t.proto.network.capitalize()} {t.addrtype.name.upper()} ({t.addrtype})')
+
+def test_randpair(t):
+	wif,addr = t.randpair()
+	wif_chk = PrivKey(proto=t.proto,wif=wif).wif
+	check_equal(wif,wif_chk)
+	msg('\n  === randwif ===')
+	msg('  wif:',wif)
+	msg('  addr:',CoinAddr(proto=t.proto,addr=addr))
+
+def test_wif2addr(t,wif_chk,addr_chk,key_idx):
+	key_bytes = bytes.fromhex(keys[key_idx])
+	wif = PrivKey(
+		proto       = t.proto,
+		s           = key_bytes,
+		compressed  = t.addrtype.compressed,
+		pubkey_type = t.addrtype.pubkey_type ).wif
+	addr = t.wif2addr(wif)
+
+	msg('\n  === wif2addr ===')
+	msg('  wif:',PrivKey(proto=t.proto,wif=wif).wif)
+	msg('  addr:',CoinAddr(proto=t.proto,addr=addr))
+
+	addr_ph = t.privhex2addr(key_bytes.hex())
+
+	check_equal(addr,addr_ph)
+	check_equal(wif,wif_chk)
+	check_equal(addr,addr_chk)
+
+def test_triplet(tool,coin,network,addrtype,key_idx,wif_chk,addr_chk):
+	init_coin(tool,coin,network,addrtype)
+	test_randpair(tool)
+	test_wif2addr(tool,wif_chk,addr_chk,key_idx)
 
 def run_test():
-	key_bytes = bytes.fromhex('deadbeef' * 8)
 
 	from mmgen.tool import tool_api
 	tool = tool_api()
@@ -33,50 +69,44 @@ def run_test():
 	tool.coins
 	tool.print_addrtypes()
 
-	check_equal(f'{tool.coin} {tool.proto.cls_name} {tool.addrtype}', 'BTC Bitcoin L' )
-
 	tool.usr_randchars     # getter
 	tool.usr_randchars = 0 # setter
 	check_equal(tool.usr_randchars,0)
 
-	init_coin(tool,'xmr','mainnet','M','XMR Monero M')
-	msg('\n'.join(tool.randpair()))
-
-	init_coin(tool,'etc','mainnet','E','ETC EthereumClassic E')
-	msg('\n'.join(tool.randpair()))
+	check_equal(f'{tool.coin} {tool.proto.cls_name} {tool.addrtype}', 'BTC Bitcoin L' )
 
-	init_coin(tool,'ltc','regtest','bech32','LTC LitecoinRegtest B')
+	# test vectors from tooltest2.py:
 
-	wif,addr = tool.randpair()
-	from mmgen.obj import PrivKey,CoinAddr
-	msg('wif:',PrivKey(proto=tool.proto,wif=wif).wif)
-	msg('addr:',CoinAddr(proto=tool.proto,addr=addr))
+	test_triplet(tool,'btc','mainnet','L',0,
+		'5HwzecKMWD82ppJK3qMKpC7ohXXAwcyAN5VgdJ9PLFaAzpBG4sX',
+		'1C5VPtgq9xQ6AcTgMAR3J6GDrs72HC4pS1' )
 
-	wif = PrivKey(proto=tool.proto,s=key_bytes,compressed=True,pubkey_type='std').wif
-	addr = tool.wif2addr(wif)
-	msg('wif:',PrivKey(proto=tool.proto,wif=wif).wif)
-	msg('addr:',CoinAddr(proto=tool.proto,addr=addr))
+	test_triplet(tool,'btc','mainnet','C',0,
+		'KwojSzt1VvW343mQfWQi3J537siAt5ktL2qbuCg1ZyKR8BLQ6UJm',
+		'1Kz9fVSUMshzPejpzW9D95kScgA3rY6QxF' )
 
-	addr_chk = tool.privhex2addr(key_bytes.hex())
+	test_triplet(tool,'btc','mainnet','segwit',0,
+		'KwojSzt1VvW343mQfWQi3J537siAt5ktL2qbuCg1ZyKR8BLQ6UJm',
+		'3AhjTiWHhVJAi1s5CfKMcLzYps12x3gZhg' )
 
-	check_equal(addr,addr_chk)
-	check_equal(wif,'cV3ZRqf8PhyfiFwtJfkvGu2qmBsazE1wXoA2A16S3nixb3BTvvVx')
-	check_equal(addr,'rltc1qvmqas4maw7lg9clqu6kqu9zq9cluvllnz4kj9y')
+	test_triplet(tool,'btc','mainnet','B',0,
+		'KwojSzt1VvW343mQfWQi3J537siAt5ktL2qbuCg1ZyKR8BLQ6UJm',
+		'bc1q6pqnfwwakuuejpm9w52ds342f9d5u36v0qnz7c' )
 
-	init_coin(tool,'zec','mainnet','Z','ZEC Zcash Z')
+	test_triplet(tool,'ltc','regtest','bech32',1,
+		'cV3ZRqf8PhyfiFwtJfkvGu2qmBsazE1wXoA2A16S3nixb3BTvvVx',
+		'rltc1qvmqas4maw7lg9clqu6kqu9zq9cluvllnz4kj9y' )
 
-	wif = PrivKey(proto=tool.proto,s=key_bytes,compressed=True,pubkey_type='zcash_z').wif
-	addr = tool.wif2addr(wif)
-	msg('wif:',wif)
-	msg('addr:',CoinAddr(proto=tool.proto,addr=addr))
+	test_triplet(tool,'xmr','mainnet','M',1,
+		'e8164dda6d42bd1e261a3406b2038dcbddadbeefdeadbeefdeadbeefdeadbe0f',
+		'41i7saPWA53EoHenmJVRt34dubPxsXwoWMnw8AdMyx4mTD1svf7qYzcVjxxRfteLNdYrAxWUMmiPegFW9EfoNgXx7vDMExv' ),
 
-	addr_chk = tool.privhex2addr(key_bytes.hex())
-	wif_chk = PrivKey(proto=tool.proto,wif=wif).wif
+	test_triplet(tool,'etc','mainnet','E',1,
+		'deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
+		'c96aaa54e2d44c299564da76e1cd3184a2386b8d' ),
 
-	check_equal(addr,addr_chk)
-	check_equal(wif,wif_chk)
-	check_equal(
-		addr,
+	test_triplet(tool,'zec','mainnet','Z',1,
+		'SKxuS56e99jpCeD9mMQ5o63zoGPakNdM9HCvt4Vt2cypvRjCdvGJ',
 		'zchFELwBxqsAubsLQ8yZgPCDDGukjXJssgCbiTPwFNmFwn9haLnDatzfhLdZzJT4PcU4o2yr92B52UFirUzEdF6ZYM2gBkM' )
 
 run_test()

+ 1 - 1
test/test_py_d/ts_tool.py

@@ -26,7 +26,7 @@ class TestSuiteTool(TestSuiteMain,TestSuiteBase):
 		('tool_encrypt',         (9,"'mmgen-tool encrypt' (random data)",     [])),
 		('tool_decrypt',         (9,"'mmgen-tool decrypt' (random data)", [[[enc_infn+'.mmenc'],9]])),
 		('tool_twview_bad_comment',(9,"'mmgen-tool twview' (with bad comment)", [])),
-		('tool_api',             (9,'tool API (initialization, config methods)',[])),
+		('tool_api',             (9,'tool API (initialization, config methods, wif2addr)',[])),
 		# ('tool_encrypt_ref', (9,"'mmgen-tool encrypt' (reference text)",  [])),
 	)