add ClearSession message with unit test
This commit is contained in:
parent
a3d22dc56e
commit
260a4322a6
4
cmdtr.py
4
cmdtr.py
@ -108,6 +108,9 @@ class Commands(object):
|
|||||||
def set_label(self, args):
|
def set_label(self, args):
|
||||||
return self.client.apply_settings(label=args.label)
|
return self.client.apply_settings(label=args.label)
|
||||||
|
|
||||||
|
def clear_session(self, args):
|
||||||
|
return self.client.clear_session()
|
||||||
|
|
||||||
def change_pin(self, args):
|
def change_pin(self, args):
|
||||||
return self.client.change_pin(args.remove)
|
return self.client.change_pin(args.remove)
|
||||||
|
|
||||||
@ -187,6 +190,7 @@ class Commands(object):
|
|||||||
get_features.help = 'Retrieve device features and settings'
|
get_features.help = 'Retrieve device features and settings'
|
||||||
get_public_node.help = 'Get public node of given path'
|
get_public_node.help = 'Get public node of given path'
|
||||||
set_label.help = 'Set new wallet label'
|
set_label.help = 'Set new wallet label'
|
||||||
|
clear_session.help = 'Clear session (remove cached PIN, passphrase, etc.)'
|
||||||
change_pin.help = 'Change new PIN or remove existing'
|
change_pin.help = 'Change new PIN or remove existing'
|
||||||
list_coins.help = 'List all supported coin types by the device'
|
list_coins.help = 'List all supported coin types by the device'
|
||||||
wipe_device.help = 'Reset device to factory defaults and remove all private data.'
|
wipe_device.help = 'Reset device to factory defaults and remove all private data.'
|
||||||
|
39
tests/test_msg_clearsession.py
Normal file
39
tests/test_msg_clearsession.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
import time
|
||||||
|
import unittest
|
||||||
|
import common
|
||||||
|
|
||||||
|
from trezorlib import messages_pb2 as proto
|
||||||
|
from trezorlib import types_pb2 as proto_types
|
||||||
|
|
||||||
|
class TestMsgClearsession(common.TrezorTest):
|
||||||
|
|
||||||
|
def test_clearsession(self):
|
||||||
|
self.setup_mnemonic_pin_passphrase()
|
||||||
|
|
||||||
|
with self.client:
|
||||||
|
self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ProtectCall), 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:
|
||||||
|
# pin and passphrase are cached
|
||||||
|
self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ProtectCall), proto.Success()])
|
||||||
|
res = self.client.ping('random data', button_protection=True, pin_protection=True, passphrase_protection=True)
|
||||||
|
self.assertEqual(res, 'random data')
|
||||||
|
|
||||||
|
self.client.clear_session()
|
||||||
|
|
||||||
|
# session cache is cleared
|
||||||
|
with self.client:
|
||||||
|
self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ProtectCall), 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:
|
||||||
|
# pin and passphrase are cached
|
||||||
|
self.client.set_expected_responses([proto.ButtonRequest(code=proto_types.ButtonRequest_ProtectCall), 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()
|
@ -378,6 +378,11 @@ class ProtocolMixin(object):
|
|||||||
self.init_device() # Reload Features
|
self.init_device() # Reload Features
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
@field('message')
|
||||||
|
@expect(proto.Success)
|
||||||
|
def clear_session(self):
|
||||||
|
return self.call(proto.ClearSession())
|
||||||
|
|
||||||
@field('message')
|
@field('message')
|
||||||
@expect(proto.Success)
|
@expect(proto.Success)
|
||||||
def change_pin(self, remove=False):
|
def change_pin(self, remove=False):
|
||||||
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user