diff --git a/tests/test_protect_call.py b/tests/test_protect_call.py index 03c662bdc..db32a2f42 100644 --- a/tests/test_protect_call.py +++ b/tests/test_protect_call.py @@ -26,6 +26,10 @@ class TestProtectCall(common.TrezorTest): def test_incorrect_pin(self): self.client.setup_debuglink(button=True, pin_correct=False) self.assertRaises(PinException, self._some_protected_call) + + def test_cancelled_pin(self): + self.client.setup_debuglink(button=True, pin_correct=-1) # PIN cancel + self.assertRaises(PinException, self._some_protected_call) if __name__ == '__main__': unittest.main() diff --git a/trezorlib/client.py b/trezorlib/client.py index f24b7a0aa..ccb058c53 100644 --- a/trezorlib/client.py +++ b/trezorlib/client.py @@ -102,11 +102,14 @@ class TrezorClient(object): if isinstance(resp, proto.PinMatrixRequest): if self.debuglink: - if self.debug_pin: + if self.debug_pin == 1: pin = self.debuglink.read_pin_encoded() msg2 = proto.PinMatrixAck(pin=pin) + elif self.debug_pin == -1: + msg2 = proto.PinMatrixCancel() else: msg2 = proto.PinMatrixAck(pin='444444222222') + else: pin = self.pin_func("PIN required: ", resp.message) msg2 = proto.PinMatrixAck(pin=pin) @@ -118,7 +121,7 @@ class TrezorClient(object): if isinstance(resp, proto.Failure): self.message_func(resp.message) - + if resp.code == 4: raise CallException("Action cancelled by user")