@@ -85,9 +85,7 @@ fn sign_message(#[case] seed: Seed) {
8585 let pk_destination = Destination :: PublicKey ( pk) ;
8686
8787 for destination in [ pkh_destination, pk_destination] {
88- let mut devices = find_devices ( false ) ;
89- assert ! ( !devices. is_empty( ) ) ;
90- let client = devices. pop ( ) . unwrap ( ) . connect ( ) . unwrap ( ) ;
88+ let client = find_test_device ( ) ;
9189
9290 let mut signer = TrezorSigner :: new ( chain_config. clone ( ) , Arc :: new ( Mutex :: new ( client) ) ) ;
9391 let message = vec ! [ rng. gen :: <u8 >( ) , rng. gen :: <u8 >( ) , rng. gen :: <u8 >( ) ] ;
@@ -127,9 +125,7 @@ fn sign_transaction_intent(#[case] seed: Seed) {
127125 . unwrap ( ) ;
128126 let mut account = Account :: new ( config. clone ( ) , & mut db_tx, key_chain, None ) . unwrap ( ) ;
129127
130- let mut devices = find_devices ( false ) ;
131- assert ! ( !devices. is_empty( ) ) ;
132- let client = devices. pop ( ) . unwrap ( ) . connect ( ) . unwrap ( ) ;
128+ let client = find_test_device ( ) ;
133129
134130 let mut signer = TrezorSigner :: new ( config. clone ( ) , Arc :: new ( Mutex :: new ( client) ) ) ;
135131
@@ -493,9 +489,7 @@ fn sign_transaction(#[case] seed: Seed) {
493489 ) ) ;
494490 let ptx = req. into_partially_signed_tx ( additional_info) . unwrap ( ) ;
495491
496- let mut devices = find_devices ( false ) ;
497- assert ! ( !devices. is_empty( ) ) ;
498- let client = devices. pop ( ) . unwrap ( ) . connect ( ) . unwrap ( ) ;
492+ let client = find_test_device ( ) ;
499493
500494 let mut signer = TrezorSigner :: new ( chain_config. clone ( ) , Arc :: new ( Mutex :: new ( client) ) ) ;
501495 let ( ptx, _, _) = signer. sign_tx ( ptx, account. key_chain ( ) , & db_tx) . unwrap ( ) ;
@@ -521,3 +515,26 @@ fn sign_transaction(#[case] seed: Seed) {
521515 . unwrap ( ) ;
522516 }
523517}
518+
519+ fn find_test_device ( ) -> Trezor {
520+ let use_real_device = std:: env:: var_os ( "TEST_REAL_DEVICE" ) . is_some ( ) ;
521+
522+ let mut devices = find_devices ( false )
523+ . into_iter ( )
524+ . filter ( |device| device. model == Model :: Trezor || device. model == Model :: TrezorEmulator )
525+ . collect_vec ( ) ;
526+
527+ if use_real_device {
528+ // Try to find the first real device
529+ if let Some ( idx) = devices. iter ( ) . position ( |d| d. model == Model :: Trezor ) {
530+ return devices. swap_remove ( idx) . connect ( ) . unwrap ( ) ;
531+ }
532+ }
533+
534+ devices
535+ . into_iter ( )
536+ . find ( |d| d. model == Model :: TrezorEmulator )
537+ . unwrap ( )
538+ . connect ( )
539+ . unwrap ( )
540+ }
0 commit comments