fix test_change_pins.py; remove mk3 code
This commit is contained in:
parent
2ac2e4ed63
commit
30480f084a
@ -13,8 +13,9 @@
|
||||
# 33-33 main duress wallet
|
||||
# 66-66 brickme
|
||||
#
|
||||
import pytest, time, os
|
||||
from helpers import xfp2str
|
||||
import pytest, time
|
||||
from charcodes import KEY_RIGHT, KEY_ENTER
|
||||
|
||||
|
||||
CLR_PIN = '999999-999999'
|
||||
|
||||
@ -23,16 +24,6 @@ def under_duress(request):
|
||||
# add flag: --duress to commandline to indicate this mode
|
||||
return request.config.getoption('duress')
|
||||
|
||||
@pytest.fixture
|
||||
def get_duress_secret(sim_exec):
|
||||
def doit(pin):
|
||||
# read the duress secret
|
||||
rv = sim_exec(f'from pincodes import pa; RV.write(repr(pa.fetch(duress_pin=b"{pin}")))')
|
||||
if rv.startswith('Traceback'):
|
||||
raise RuntimeError(rv)
|
||||
assert rv[0:2] == "b'"
|
||||
return eval(rv)
|
||||
return doit
|
||||
|
||||
@pytest.fixture
|
||||
def verify_pin_set(sim_exec):
|
||||
@ -51,11 +42,6 @@ def verify_pin_set(sim_exec):
|
||||
|
||||
return doit
|
||||
|
||||
@pytest.fixture
|
||||
def get_secondary_login(sim_exec):
|
||||
def doit():
|
||||
return sim_exec('from pincodes import pa; RV.write(repr(pa.is_secondary))') == 'True'
|
||||
return doit
|
||||
|
||||
@pytest.fixture
|
||||
def goto_pin_options(pick_menu_item, goto_home):
|
||||
@ -67,40 +53,65 @@ def goto_pin_options(pick_menu_item, goto_home):
|
||||
return doit
|
||||
|
||||
@pytest.fixture
|
||||
def my_enter_pin(cap_screen, need_keypress):
|
||||
def my_enter_pin(cap_screen, need_keypress, is_q1):
|
||||
def doit(pin):
|
||||
time.sleep(.01) # required?
|
||||
time.sleep(.01) # required?
|
||||
scr = cap_screen().split('\n')
|
||||
title = scr[1]
|
||||
assert scr[2] == 'Enter PIN Prefix'
|
||||
for ch in pin:
|
||||
if ch != '-':
|
||||
time.sleep(.05) # required?
|
||||
need_keypress(ch)
|
||||
time.sleep(.05) # required?
|
||||
continue
|
||||
|
||||
if ch == '-':
|
||||
need_keypress('y')
|
||||
time.sleep(.1) # required
|
||||
if is_q1:
|
||||
assert scr[2] == 'Enter first part of PIN'
|
||||
prefix, suffix = pin.split("-")
|
||||
for n in prefix:
|
||||
need_keypress(n)
|
||||
time.sleep(.1)
|
||||
|
||||
scr = cap_screen().split('\n')
|
||||
assert ('Recognize these?' in scr) or ('Write these down:' in scr)
|
||||
words = scr[2:4]
|
||||
need_keypress('y')
|
||||
# move second part
|
||||
need_keypress(KEY_RIGHT)
|
||||
time.sleep(.1)
|
||||
scr = cap_screen().split('\n')
|
||||
|
||||
time.sleep(.1) # required
|
||||
scr = cap_screen().split('\n')
|
||||
assert scr[-1] == 'Enter rest of PIN'
|
||||
assert scr[2] == 'Enter second part of PIN'
|
||||
words = scr[-3].split(" ") # split on 2 spaces
|
||||
assert len(words) == 2
|
||||
|
||||
for n in suffix:
|
||||
need_keypress(n)
|
||||
time.sleep(.1)
|
||||
|
||||
need_keypress(KEY_ENTER)
|
||||
|
||||
else:
|
||||
assert scr[2] == 'Enter PIN Prefix'
|
||||
for ch in pin:
|
||||
if ch != '-':
|
||||
time.sleep(.05) # required?
|
||||
need_keypress(ch)
|
||||
time.sleep(.05) # required?
|
||||
continue
|
||||
|
||||
if ch == '-':
|
||||
need_keypress('y')
|
||||
time.sleep(.1) # required
|
||||
|
||||
scr = cap_screen().split('\n')
|
||||
|
||||
assert ('Recognize these?' in scr) or ('Write these down:' in scr)
|
||||
words = scr[2:4]
|
||||
need_keypress('y')
|
||||
|
||||
time.sleep(.1) # required
|
||||
scr = cap_screen().split('\n')
|
||||
assert scr[-1] == 'Enter rest of PIN'
|
||||
|
||||
need_keypress('y')
|
||||
|
||||
need_keypress('y')
|
||||
time.sleep(0.1)
|
||||
|
||||
return title, words
|
||||
|
||||
|
||||
return doit
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def change_pin(cap_screen, cap_story, cap_menu, need_keypress, my_enter_pin):
|
||||
def doit(old_pin, new_pin, hdr_text, expect_fail=None):
|
||||
@ -157,16 +168,10 @@ def change_pin(cap_screen, cap_story, cap_menu, need_keypress, my_enter_pin):
|
||||
return doit
|
||||
|
||||
@pytest.mark.parametrize('new_pin', ['77-77', '123456-654321', '79-654321', '123456-12'])
|
||||
def test_main_pin(goto_pin_options, pick_menu_item, cap_story, cap_screen, need_keypress, change_pin, new_pin, verify_pin_set, get_secondary_login, under_duress):
|
||||
def test_main_pin(goto_pin_options, pick_menu_item, cap_story, cap_screen, need_keypress,
|
||||
change_pin, new_pin, verify_pin_set, under_duress):
|
||||
goto_pin_options()
|
||||
|
||||
try:
|
||||
pick_menu_item('Change Main PIN')
|
||||
except KeyError:
|
||||
# secondary login, for example
|
||||
assert get_secondary_login()
|
||||
raise pytest.skip('cant change main from secondary')
|
||||
|
||||
pick_menu_item("Change Main PIN")
|
||||
DEF_PIN = '12-12' if not under_duress else '33-33'
|
||||
|
||||
change_pin(DEF_PIN, new_pin, 'Main PIN')
|
||||
@ -176,109 +181,4 @@ def test_main_pin(goto_pin_options, pick_menu_item, cap_story, cap_screen, need_
|
||||
change_pin(new_pin, DEF_PIN, 'Main PIN')
|
||||
verify_pin_set(DEF_PIN)
|
||||
|
||||
@pytest.mark.parametrize('new_pin', ['77-77', '123456-654321', '79-654321', '123456-12'])
|
||||
def test_duress_pin(goto_pin_options, pick_menu_item, cap_story, cap_screen, need_keypress, change_pin, new_pin, get_duress_secret, under_duress, only_mk3):
|
||||
goto_pin_options()
|
||||
|
||||
|
||||
pick_menu_item('Duress PIN')
|
||||
try:
|
||||
change_pin(None, new_pin, 'Duress PIN')
|
||||
except ValueError:
|
||||
if under_duress:
|
||||
raise pytest.xfail("cant change duress while under duress")
|
||||
else:
|
||||
raise
|
||||
|
||||
# duress secret should be complex
|
||||
d_secret = get_duress_secret(new_pin)
|
||||
assert len(set(d_secret)) > 20
|
||||
assert d_secret[0] == 0x01, "not xprv?"
|
||||
|
||||
# changing PIN shouldn't change secret
|
||||
pick_menu_item('Duress PIN')
|
||||
change_pin(new_pin, '123-123', 'Duress PIN')
|
||||
rb = get_duress_secret('123-123')
|
||||
assert rb == d_secret
|
||||
|
||||
pick_menu_item('Duress PIN')
|
||||
change_pin('123-123', CLR_PIN, 'Duress PIN')
|
||||
|
||||
# clearing PIN should clear secret
|
||||
zz = get_duress_secret('')
|
||||
assert zz == b'\0'*72
|
||||
|
||||
@pytest.mark.parametrize('new_pin', ['77-77', '123456-654321', '79-654321', '123456-12'])
|
||||
def test_secondary_pin(is_mark3, goto_pin_options, pick_menu_item, cap_story, cap_screen, need_keypress, change_pin, new_pin, verify_pin_set, get_secondary_login, only_mk3):
|
||||
|
||||
if get_secondary_login():
|
||||
raise pytest.skip('not intended for use under secondary login')
|
||||
|
||||
goto_pin_options()
|
||||
|
||||
if is_mark3:
|
||||
raise pytest.skip('mark3 doesnt support secondary wallet')
|
||||
|
||||
pick_menu_item('Second Wallet')
|
||||
try:
|
||||
change_pin(None, new_pin, 'Second PIN')
|
||||
except ValueError:
|
||||
if under_duress:
|
||||
raise pytest.xfail("cant change secondary while under duress")
|
||||
else:
|
||||
raise
|
||||
verify_pin_set(new_pin, secondary=1)
|
||||
|
||||
pick_menu_item('Second Wallet')
|
||||
change_pin(new_pin, CLR_PIN, 'Second PIN')
|
||||
verify_pin_set('', secondary=1)
|
||||
|
||||
@pytest.mark.parametrize('new_pin', ['77-77', '123456-654321', '79-654321', '123456-12'])
|
||||
def test_secondary_from_secondary_pin(is_mark3, goto_pin_options, pick_menu_item, cap_story, cap_screen, need_keypress, change_pin, new_pin, verify_pin_set, get_secondary_login, only_mk3):
|
||||
# XXX Obsolete now?
|
||||
|
||||
# when logged into secondary wallet, you can't clear PIN, and we use a 23-23 as value
|
||||
if not get_secondary_login():
|
||||
raise pytest.skip('intended for use under secondary login')
|
||||
if is_mark3:
|
||||
raise pytest.skip('mark3 doesnt support secondary wallet')
|
||||
|
||||
goto_pin_options()
|
||||
|
||||
ASSUME_PIN = '23-23'
|
||||
|
||||
pick_menu_item('Second Wallet')
|
||||
change_pin(ASSUME_PIN, new_pin, 'Second PIN')
|
||||
verify_pin_set(new_pin)
|
||||
|
||||
pick_menu_item('Second Wallet')
|
||||
change_pin(new_pin, ASSUME_PIN, 'Second PIN')
|
||||
verify_pin_set(ASSUME_PIN)
|
||||
|
||||
@pytest.mark.parametrize('new_pin', ['77-77', '123456-654321', '79-654321', '123456-12'])
|
||||
def test_brickme_pin(goto_pin_options, pick_menu_item, cap_story, cap_screen, need_keypress, change_pin, new_pin, verify_pin_set, get_secondary_login, under_duress, only_mk3):
|
||||
|
||||
goto_pin_options()
|
||||
|
||||
try:
|
||||
pick_menu_item('Brick Me PIN')
|
||||
except KeyError:
|
||||
# secondary login, for example
|
||||
assert get_secondary_login()
|
||||
raise pytest.skip('cant do brickme in this mode')
|
||||
|
||||
try:
|
||||
change_pin(None, new_pin, 'Brickme PIN')
|
||||
except ValueError:
|
||||
if under_duress:
|
||||
raise pytest.xfail("cant change brickme while under duress")
|
||||
else:
|
||||
raise
|
||||
|
||||
verify_pin_set(new_pin, brickme=1)
|
||||
|
||||
pick_menu_item('Brick Me PIN')
|
||||
change_pin(new_pin, CLR_PIN, 'Brickme PIN')
|
||||
verify_pin_set('', brickme=1)
|
||||
|
||||
# EOF
|
||||
|
||||
Loading…
Reference in New Issue
Block a user