2828)
2929
3030from hwilib ._cli import process_commands
31- from hwilib .devices .trezor import TrezorClient
31+ from hwilib .devices .trezor import TrezorClient , _use_external_script_type
3232
3333from types import MethodType
3434
@@ -63,6 +63,7 @@ def __init__(self, path, model):
6363 self .strict_bip48 = True
6464 self .include_xpubs = False
6565 self .supports_device_multiple_multisig = True
66+ self .client = None
6667
6768 def start (self ):
6869 super ().start ()
@@ -85,12 +86,12 @@ def start(self):
8586
8687 # Setup the emulator
8788 wirelink = UdpTransport .enumerate ()[0 ]
88- client = TrezorClientDebugLink (wirelink )
89- client .init_device ()
90- device .wipe (client )
91- load_device_by_mnemonic (client = client , mnemonic = 'alcohol woman abuse must during monitor noble actual mixed trade anger aisle' , pin = '' , passphrase_protection = False , label = 'test' ) # From Trezor device tests
89+ self . client = TrezorClientDebugLink (wirelink )
90+ self . client .init_device ()
91+ device .wipe (self . client )
92+ load_device_by_mnemonic (client = self . client , mnemonic = 'alcohol woman abuse must during monitor noble actual mixed trade anger aisle' , pin = '' , passphrase_protection = False , label = 'test' ) # From Trezor device tests
9293 atexit .register (self .stop )
93- return client
94+ return self . client
9495
9596 def stop (self ):
9697 super ().stop ()
@@ -407,6 +408,16 @@ def test_passphrase(self):
407408 else :
408409 self .fail ("Did not enumerate device" )
409410
411+ class TestSignTxTrezorExternal (TestSignTx ):
412+ def setUp (self ):
413+ super ().setUp ()
414+ if _use_external_script_type (self .emulator .client ):
415+ device .apply_settings (self .emulator .client , safety_checks = messages .SafetyCheckLevel .PromptTemporarily )
416+
417+ def tearDown (self ):
418+ device .apply_settings (self .emulator .client , safety_checks = messages .SafetyCheckLevel .Strict )
419+ return super ().tearDown ()
420+
410421def trezor_test_suite (emulator , bitcoind , interface , model ):
411422 assert model in TREZOR_MODELS
412423 # Redirect stderr to /dev/null as it's super spammy
@@ -421,13 +432,15 @@ def trezor_test_suite(emulator, bitcoind, interface, model):
421432 (["legacy" , "segwit" ], ["legacy" , "segwit" ], False , True ),
422433 (["legacy" , "segwit" , "tap" ], ["legacy" , "segwit" ], False , True ),
423434 ]
435+ signtx_cases_external = [(_addr , _multi , True , _opret ) for _addr , _multi , _ext , _opret in signtx_cases ]
424436
425437 # Generic Device tests
426438 suite = unittest .TestSuite ()
427439 suite .addTest (DeviceTestCase .parameterize (TestDeviceConnect , bitcoind , emulator = dev_emulator , interface = interface , detect_type = "trezor" ))
428440 suite .addTest (DeviceTestCase .parameterize (TestGetDescriptors , bitcoind , emulator = dev_emulator , interface = interface ))
429441 suite .addTest (DeviceTestCase .parameterize (TestGetKeypool , bitcoind , emulator = dev_emulator , interface = interface ))
430442 suite .addTest (DeviceTestCase .parameterize (TestSignTx , bitcoind , emulator = dev_emulator , interface = interface , signtx_cases = signtx_cases ))
443+ suite .addTest (DeviceTestCase .parameterize (TestSignTxTrezorExternal , bitcoind , emulator = dev_emulator , interface = interface , signtx_cases = signtx_cases_external ))
431444 suite .addTest (DeviceTestCase .parameterize (TestDisplayAddress , bitcoind , emulator = dev_emulator , interface = interface ))
432445 suite .addTest (DeviceTestCase .parameterize (TestSignMessage , bitcoind , emulator = dev_emulator , interface = interface ))
433446 if model != 't' :
0 commit comments