diff --git a/tests/test.py b/tests/test.py index 2ce87f98fb..86fe03cc2b 100755 --- a/tests/test.py +++ b/tests/test.py @@ -21,6 +21,8 @@ x SimpleSignTx FirmwareErase FirmwareUpload +protection levels + - zrejme v sucinnosti s inymi testami x ButtonRequest/ButtonAck workflow x PinMatrixRequest/PinMatrixAck workflow diff --git a/tests/test_bip32_speed.py b/tests/test_bip32_speed.py index 34bf0acb4d..9d38b6107b 100644 --- a/tests/test_bip32_speed.py +++ b/tests/test_bip32_speed.py @@ -3,7 +3,7 @@ import common import time from trezorlib import tools -class TestAddresses(common.TrezorTest): +class TestBip32Speed(common.TrezorTest): def test_public_ckd(self): self.setup_mnemonic_nopin_nopassphrase() @@ -13,7 +13,7 @@ class TestAddresses(common.TrezorTest): start = time.time() self.client.get_address('Bitcoin', range(depth)) delay = time.time() - start - expected = (depth + 1) * 0.25 + expected = (depth + 1) * 0.26 print "DEPTH", depth, "EXPECTED DELAY", expected, "REAL DELAY", delay self.assertLessEqual(delay, expected) @@ -26,7 +26,7 @@ class TestAddresses(common.TrezorTest): start = time.time() self.client.get_address('Bitcoin', range(-depth, 0)) delay = time.time() - start - expected = (depth + 1) * 0.25 + expected = (depth + 1) * 0.26 print "DEPTH", depth, "EXPECTED DELAY", expected, "REAL DELAY", delay self.assertLessEqual(delay, expected) diff --git a/tests/test_msg_getaddress.py b/tests/test_msg_getaddress.py index 2f3fce7bde..b6419e02d4 100644 --- a/tests/test_msg_getaddress.py +++ b/tests/test_msg_getaddress.py @@ -3,7 +3,7 @@ import common import trezorlib.ckd_public as bip32 from trezorlib import tools -class TestAddresses(common.TrezorTest): +class TestMsgGetaddress(common.TrezorTest): def test_btc(self): self.setup_mnemonic_nopin_nopassphrase() diff --git a/tests/test_msg_getentropy.py b/tests/test_msg_getentropy.py index 831a70b233..5eae42d45d 100644 --- a/tests/test_msg_getentropy.py +++ b/tests/test_msg_getentropy.py @@ -18,14 +18,15 @@ def entropy(data): e -= p * math.log(p, 256) return e -class TestEntropy(common.TrezorTest): +class TestMsgGetentropy(common.TrezorTest): def test_entropy(self): for l in [0, 1, 2, 3, 4, 5, 8, 9, 16, 17, 32, 33, 64, 65, 128, 129, 256, 257, 512, 513, 1024]: - self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_Other), proto.Entropy()]) - ent = self.client.get_entropy(l) - self.assertTrue(len(ent) >= l) - print 'entropy = ', entropy(ent) + with self.client: + self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_Other), proto.Entropy()]) + ent = self.client.get_entropy(l) + self.assertTrue(len(ent) >= l) + print 'entropy = ', entropy(ent) if __name__ == '__main__': unittest.main() diff --git a/tests/test_msg_ping.py b/tests/test_msg_ping.py index 1fbe3123d4..8fc5326ada 100644 --- a/tests/test_msg_ping.py +++ b/tests/test_msg_ping.py @@ -10,33 +10,39 @@ class TestPing(common.TrezorTest): def test_ping(self): self.setup_mnemonic_pin_passphrase() - self.client.set_expected_responses([proto.Success()]) - res = self.client.ping('random data') - self.assertEqual(res, 'random data') + with self.client: + self.client.set_expected_responses([proto.Success()]) + res = self.client.ping('random data') + self.assertEqual(res, 'random data') - self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_Other),proto.Success()]) - res = self.client.ping('random data', button_protection=True) - self.assertEqual(res, 'random data') + with self.client: + self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_Other), proto.Success()]) + res = self.client.ping('random data', button_protection=True) + self.assertEqual(res, 'random data') - self.client.set_expected_responses([proto.PinMatrixRequest(),proto.Success()]) - res = self.client.ping('random data', pin_protection=True) - self.assertEqual(res, 'random data') + with self.client: + self.client.set_expected_responses([proto.PinMatrixRequest(), proto.Success()]) + res = self.client.ping('random data', pin_protection=True) + self.assertEqual(res, 'random data') - self.client.set_expected_responses([proto.PassphraseRequest(),proto.Success()]) - res = self.client.ping('random data', passphrase_protection=True) - self.assertEqual(res, 'random data') + with self.client: + self.client.set_expected_responses([proto.PassphraseRequest(), proto.Success()]) + res = self.client.ping('random data', passphrase_protection=True) + self.assertEqual(res, 'random data') def test_ping_caching(self): self.setup_mnemonic_pin_passphrase() - self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_Other),proto.PinMatrixRequest(),proto.PassphraseRequest(),proto.Success()]) - res = self.client.ping('random data', button_protection=True, pin_protection=True, passphrase_protection=True) - self.assertEqual(res, 'random data') + with self.client: + self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_Other), proto.PinMatrixRequest(), proto.PassphraseRequest(), proto.Success()]) + res = self.client.ping('random data', button_protection=True, pin_protection=True, passphrase_protection=True) + self.assertEqual(res, 'random data') - # pin and passphrase are cached - self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_Other),proto.Success()]) - res = self.client.ping('random data', button_protection=True, pin_protection=True, passphrase_protection=True) - self.assertEqual(res, 'random data') + with self.client: + # pin and passphrase are cached + self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_Other), proto.Success()]) + res = self.client.ping('random data', button_protection=True, pin_protection=True, passphrase_protection=True) + self.assertEqual(res, 'random data') if __name__ == '__main__': unittest.main() diff --git a/tests/test_msg_simplesigntx.py b/tests/test_msg_simplesigntx.py index 4dbd2c47da..f2e2f37fdf 100644 --- a/tests/test_msg_simplesigntx.py +++ b/tests/test_msg_simplesigntx.py @@ -55,10 +55,11 @@ class TestSignTx(common.TrezorTest): script_type=proto_types.PAYTOADDRESS, ) - msg = self.client._prepare_simple_sign_tx('Bitcoin', [inp1, ], [out1, ]) - self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), - proto.TxRequest(request_index=-1)]) - tx = self.client.call(msg) + with self.client: + msg = self.client._prepare_simple_sign_tx('Bitcoin', [inp1, ], [out1, ]) + self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), + proto.TxRequest(request_index=-1)]) + tx = self.client.call(msg) # Accepted by network: tx fd79435246dee76b2f159d2db08032d666c95adc544de64c8c49f474df4a7fee self.assertEqual(binascii.hexlify(tx.serialized_tx), '010000000182488650ef25a58fef6788bd71b8212038d7f2bbe4750bc7bcb44701e85ef6d5000000006b4830450221009a0b7be0d4ed3146ee262b42202841834698bb3ee39c24e7437df208b8b7077102202b79ab1e7736219387dffe8d615bbdba87e11477104b867ef47afed1a5ede7810121023230848585885f63803a0a8aecdd6538792d5c539215c91698e315bf0253b43dffffffff0160cc0500000000001976a914de9b2a8da088824e8fe51debea566617d851537888ac00000000') @@ -84,12 +85,13 @@ class TestSignTx(common.TrezorTest): script_type=proto_types.PAYTOADDRESS, ) - self.client.set_tx_func(FakeTestnetBlockchain().get_tx) - msg = self.client._prepare_simple_sign_tx('Testnet', [inp1, ], [out1, out2]) - self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), - proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), - proto.TxRequest()]) - tx = self.client.call(msg) + with self.client: + self.client.set_tx_func(FakeTestnetBlockchain().get_tx) + msg = self.client._prepare_simple_sign_tx('Testnet', [inp1, ], [out1, out2]) + self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), + proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), + proto.TxRequest()]) + tx = self.client.call(msg) self.assertEqual(binascii.hexlify(tx.serialized_tx), '0100000001549d2977998f899a63c0a9da30dedb2841e33fef561097b05822eccbc7f3906f010000006b4830450221009c2d30385519fdb13dce13d5ac038be07d7b2dad0b0f7b2c1c339d7255bcf553022056a2f5bceab3cd0ffed4d388387e631f419d67ff9ce7798e3d7dfe6a6d6ec4bd0121023230848585885f63803a0a8aecdd6538792d5c539215c91698e315bf0253b43dffffffff0280ce341d000000001976a9140223b1a09138753c9cb0baf95a0a62c82711567a88ac0065cd1d000000001976a9142db345c36563122e2fd0f5485fb7ea9bbf7cb5a288ac00000000') @@ -114,13 +116,14 @@ class TestSignTx(common.TrezorTest): script_type=proto_types.PAYTOADDRESS, ) - self.client.set_tx_func(FakeTestnetBlockchain().get_tx) - msg = self.client._prepare_simple_sign_tx('Testnet', [inp1, ], [out1, out2]) - self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), - proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), - proto.ButtonRequest(code=proto_types.ButtonRequest_FeeOverThreshold), - proto.TxRequest()]) - tx = self.client.call(msg) + with self.client: + self.client.set_tx_func(FakeTestnetBlockchain().get_tx) + msg = self.client._prepare_simple_sign_tx('Testnet', [inp1, ], [out1, out2]) + self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), + proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), + proto.ButtonRequest(code=proto_types.ButtonRequest_FeeOverThreshold), + proto.TxRequest()]) + tx = self.client.call(msg) self.assertEqual(binascii.hexlify(tx.serialized_tx), '0100000001549d2977998f899a63c0a9da30dedb2841e33fef561097b05822eccbc7f3906f010000006b483045022100d74e9fa5c7ff5966d52bce8d1d772c1e3ef1376395fb85a0bbf910e723bd606d02204cb8df6debd7c4c076632011bb1e180495bcf3630d2471c354bed56c2e45a2180121023230848585885f63803a0a8aecdd6538792d5c539215c91698e315bf0253b43dffffffff0200389c1c000000001976a9140223b1a09138753c9cb0baf95a0a62c82711567a88ac0065cd1d000000001976a9142db345c36563122e2fd0f5485fb7ea9bbf7cb5a288ac00000000') @@ -146,11 +149,12 @@ class TestSignTx(common.TrezorTest): script_type=proto_types.PAYTOADDRESS, ) - msg = self.client._prepare_simple_sign_tx('Bitcoin', [inp1, ], [out1, out2]) - self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), - proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), - proto.TxRequest()]) - tx = self.client.call(msg) + with self.client: + msg = self.client._prepare_simple_sign_tx('Bitcoin', [inp1, ], [out1, out2]) + self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), + proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), + proto.TxRequest()]) + tx = self.client.call(msg) self.assertEqual(binascii.hexlify(tx.serialized_tx), '010000000182488650ef25a58fef6788bd71b8212038d7f2bbe4750bc7bcb44701e85ef6d5000000006b483045022100c1400d8485d3bdcae7413e123148f35ece84806fc387ab88c66b469df89aef1702201d481d04216b319dc549ffe2333143629ba18828a4e2d1783ab719a6aa263eb70121023230848585885f63803a0a8aecdd6538792d5c539215c91698e315bf0253b43dffffffff02e0930400000000001976a914de9b2a8da088824e8fe51debea566617d851537888ac80380100000000001976a9140223b1a09138753c9cb0baf95a0a62c82711567a88ac00000000') @@ -181,12 +185,13 @@ class TestSignTx(common.TrezorTest): script_type=proto_types.PAYTOADDRESS, ) - msg = self.client._prepare_simple_sign_tx('Bitcoin', [inp1, ], [out1, out2, out3]) - self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), - proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), - proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), - proto.TxRequest()]) - tx = self.client.call(msg) + with self.client: + msg = self.client._prepare_simple_sign_tx('Bitcoin', [inp1, ], [out1, out2, out3]) + self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), + proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), + proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), + proto.TxRequest()]) + tx = self.client.call(msg) self.assertEqual(binascii.hexlify(tx.serialized_tx), '010000000182488650ef25a58fef6788bd71b8212038d7f2bbe4750bc7bcb44701e85ef6d5000000006b483045022100e695e2c530c7c0fc32e6b79b7cff56a7f70a8c9da787534f46b4204070f914fc02207b0879a81408a11e23b11d4c7965c62b5fc6d5c2d92340f5ee2da7b40e99314a0121023230848585885f63803a0a8aecdd6538792d5c539215c91698e315bf0253b43dffffffff0300650400000000001976a914de9b2a8da088824e8fe51debea566617d851537888ace02e0000000000001976a9141fe1d337fb81afca42818051e12fd18245d1b17288ac80380100000000001976a9140223b1a09138753c9cb0baf95a0a62c82711567a88ac00000000') @@ -220,11 +225,12 @@ class TestSignTx(common.TrezorTest): script_type=proto_types.PAYTOADDRESS, ) - msg = self.client._prepare_simple_sign_tx('Bitcoin', [inp1, inp2], [out1, out2]) - self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), - proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), - proto.TxRequest()]) - tx = self.client.call(msg) + with self.client: + msg = self.client._prepare_simple_sign_tx('Bitcoin', [inp1, inp2], [out1, out2]) + self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), + proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), + proto.TxRequest()]) + tx = self.client.call(msg) # Accepted by network: tx c63e24ed820c5851b60c54613fbc4bcb37df6cd49b4c96143e99580a472f79fb self.assertEqual(binascii.hexlify(tx.serialized_tx), '01000000021c032e5715d1da8115a2fe4f57699e15742fe113b0d2d1ca3b594649d322bec6010000006b483045022100f773c403b2f85a5c1d6c9c4ad69c43de66930fff4b1bc818eb257af98305546a0220443bde4be439f276a6ce793664b463580e210ec6c9255d68354449ac0443c76501210338d78612e990f2eea0c426b5e48a8db70b9d7ed66282b3b26511e0b1c75515a6ffffffff6ea42cd8d9c8e5441c4c5f85bfe50311078730d2881494f11f4d2257777a4958010000006b48304502210090cff1c1911e771605358a8cddd5ae94c7b60cc96e50275908d9bf9d6367c79f02202bfa72e10260a146abd59d0526e1335bacfbb2b4401780e9e3a7441b0480c8da0121038caebd6f753bbbd2bb1f3346a43cd32140648583673a31d62f2dfb56ad0ab9e3ffffffff02a0860100000000001976a9142f4490d5263906e4887ca2996b9e207af3e7824088aca0860100000000001976a914812c13d97f9159e54e326b481b8f88a73df8507a88ac00000000') @@ -260,10 +266,11 @@ class TestSignTx(common.TrezorTest): ) outputs.append(out) - msg = self.client._prepare_simple_sign_tx('Bitcoin', [inp1, inp2], outputs) - self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), ] * 255 + \ - [proto.TxRequest(), ]) - tx = self.client.call(msg) + with self.client: + msg = self.client._prepare_simple_sign_tx('Bitcoin', [inp1, inp2], outputs) + self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), ] * 255 + \ + [proto.TxRequest(), ]) + tx = self.client.call(msg) self.assertEqual(binascii.hexlify(tx.serialized_tx), '0100000002fb792f470a58993e14964c9bd46cdf37cb4bbc3f61540cb651580c82ed243ec6010000006b483045022100969da46f94a81f34f3717b014e0c3e1826eda1b0022ec2f9ce39f3d750ab9235022026da269770993211a1503413566a339bbb4389a482fffcf8e1f76713fc3b94f5012103477b9f0f34ae85434ce795f0c5e1e90c9420e5b5fad084d7cce9a487b94a7902ffffffffe56582d2119100cb1d3da8232291e053f71e25fb669c87b32a667749959ea239010000006a473044022052e1419bb237b9db400ab5e3df16db6355619d545fde9030924a360763ae9ad40220704beab04d72ecaeb42eca7d98faca7a0941e65f2e1341f183be2b83e6b09e1c012103477b9f0f34ae85434ce795f0c5e1e90c9420e5b5fad084d7cce9a487b94a7902fffffffffdff00d8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088acd8270000000000001976a914f0a2b64e56ee2ff57126232f84af6e3a41d4055088ac00000000') ''' @@ -285,11 +292,12 @@ class TestSignTx(common.TrezorTest): script_type=proto_types.PAYTOADDRESS, ) - msg = self.client._prepare_simple_sign_tx('Bitcoin', [inp1, ], [out1, ]) - self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), - proto.ButtonRequest(code=proto_types.ButtonRequest_FeeOverThreshold), - proto.TxRequest()]) - tx = self.client.call(msg) + with self.client: + msg = self.client._prepare_simple_sign_tx('Bitcoin', [inp1, ], [out1, ]) + self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), + proto.ButtonRequest(code=proto_types.ButtonRequest_FeeOverThreshold), + proto.TxRequest()]) + tx = self.client.call(msg) self.assertEqual(binascii.hexlify(tx.serialized_tx), '010000000182488650ef25a58fef6788bd71b8212038d7f2bbe4750bc7bcb44701e85ef6d5000000006a4730440220361b8268718533055682f4532d30c553ce778f70b217457a9aa1956e457c5aac0220538ae285bb340484bb09a67635d29192a14e61d8a8385b8b090a92e3e97e1c010121023230848585885f63803a0a8aecdd6538792d5c539215c91698e315bf0253b43dffffffff0120300500000000001976a914de9b2a8da088824e8fe51debea566617d851537888ac00000000') @@ -310,16 +318,17 @@ class TestSignTx(common.TrezorTest): script_type=proto_types.PAYTOADDRESS, ) - msg = self.client._prepare_simple_sign_tx('Bitcoin', [inp1, ], [out1, ]) - self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), - proto.Failure(code=proto_types.Failure_NotEnoughFunds)]) + with self.client: + msg = self.client._prepare_simple_sign_tx('Bitcoin', [inp1, ], [out1, ]) + self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ConfirmOutput), + proto.Failure(code=proto_types.Failure_NotEnoughFunds)]) - try: - self.client.call(msg) - except CallException as e: - self.assertEqual(e.args[0], proto_types.Failure_NotEnoughFunds) - else: - self.assert_(False, "types.Failure_NotEnoughFunds expected") + try: + self.client.call(msg) + except CallException as e: + self.assertEqual(e.args[0], proto_types.Failure_NotEnoughFunds) + else: + self.assert_(False, "types.Failure_NotEnoughFunds expected") def test_estimate_size(self): self.setup_mnemonic_nopin_nopassphrase() diff --git a/tests/test_protect_call.py b/tests/test_protect_call.py index 0a946f7220..3ce98c68b0 100644 --- a/tests/test_protect_call.py +++ b/tests/test_protect_call.py @@ -23,49 +23,59 @@ class TestProtectCall(common.TrezorTest): # This is low-level test of set_expected_responses() # feature of debugging client - # Scenario 1 - Received unexpected message - self.client.set_expected_responses([]) - self.assertRaises(CallException, self._some_protected_call, True, True, True) + with self.client: + # Scenario 1 - Received unexpected message + self.client.set_expected_responses([]) + self.assertRaises(CallException, self._some_protected_call, True, True, True) - # Scenario 2 - Received other than expected message - self.client.set_expected_responses([proto.Success()]) - self.assertRaises(CallException, self._some_protected_call, True, True, True) + with self.client: + # Scenario 2 - Received other than expected message + self.client.set_expected_responses([proto.Success()]) + self.assertRaises(CallException, self._some_protected_call, True, True, True) - # Scenario 3 - Not received expected message - self.client.set_expected_responses([proto.ButtonRequest(), - proto.Success(), - proto.Success()]) # This is expected, but not received - self.assertRaises(Exception, self._some_protected_call, True, False, False) + def scenario3(): + with self.client: + # Scenario 3 - Not received expected message + self.client.set_expected_responses([proto.ButtonRequest(), + proto.Success(), + proto.Success()]) # This is expected, but not received + self._some_protected_call(True, False, False) + self.assertRaises(Exception, scenario3) - # Scenario 4 - Received what expected - self.client.set_expected_responses([proto.ButtonRequest(), - proto.PinMatrixRequest(), - proto.PassphraseRequest(), - proto.Success(message='random data')]) - self._some_protected_call(True, True, True) + with self.client: + # Scenario 4 - Received what expected + self.client.set_expected_responses([proto.ButtonRequest(), + proto.PinMatrixRequest(), + proto.PassphraseRequest(), + proto.Success(message='random data')]) + self._some_protected_call(True, True, True) - # Scenario 5 - Failed message by field filter - self.client.set_expected_responses([proto.ButtonRequest(), - proto.PinMatrixRequest(), - proto.Success(message='wrong data')]) - self.assertRaises(CallException, self._some_protected_call, True, True, True) + def scenario5(): + with self.client: + # Scenario 5 - Failed message by field filter + self.client.set_expected_responses([proto.ButtonRequest(), + proto.Success(message='wrong data')]) + self._some_protected_call(True, True, True) + self.assertRaises(CallException, scenario5) def test_no_protection(self): self.setup_mnemonic_nopin_nopassphrase() - self.assertEqual(self.client.debug.read_pin()[0], '') - self.client.set_expected_responses([proto.Success()]) - self._some_protected_call(False, True, True) + with self.client: + self.assertEqual(self.client.debug.read_pin()[0], '') + self.client.set_expected_responses([proto.Success()]) + self._some_protected_call(False, True, True) def test_pin(self): self.setup_mnemonic_pin_passphrase() - self.assertEqual(self.client.debug.read_pin()[0], self.pin4) - self.client.setup_debuglink(button=True, pin_correct=True) - self.client.set_expected_responses([proto.ButtonRequest(), - proto.PinMatrixRequest(), - proto.Success()]) - self._some_protected_call(True, True, False) + with self.client: + self.assertEqual(self.client.debug.read_pin()[0], self.pin4) + self.client.setup_debuglink(button=True, pin_correct=True) + self.client.set_expected_responses([proto.ButtonRequest(), + proto.PinMatrixRequest(), + proto.Success()]) + self._some_protected_call(True, True, False) def test_incorrect_pin(self): self.setup_mnemonic_pin_passphrase() @@ -94,6 +104,7 @@ class TestProtectCall(common.TrezorTest): start = time.time() self.assertRaises(PinException, self._some_protected_call, False, True, False) test_backoff(attempt, start) + ''' # Unplug Trezor now self.client.debuglink.stop()