Skip to content

Commit

Permalink
Merge #536: test: Fix label tests
Browse files Browse the repository at this point in the history
0735b09 tests: Make sure device is found when enumerating (Andrew Chow)
6b043d3 test: Fix label tests (Andrew Chow)

Pull request description:

  These tests weren't working. Also fixed another keepkey test bug.

Top commit has no ACKs.

Tree-SHA512: 2baab00110428672f5b726707a7c996363d2cd884dcb6c9e94c9d099094330021ee6fb1a386e4415c340306a55c08e26575964d5af73dbc0897c4ac012f15267
  • Loading branch information
achow101 committed Oct 25, 2021
2 parents 618158a + 0735b09 commit 8c6763b
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 6 deletions.
50 changes: 45 additions & 5 deletions test/test_keepkey.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,10 +197,22 @@ def test_setup_wipe(self):
self.assertEquals(result['error'], 'Device is already initialized. Use wipe first and try again')

def test_label(self):
result = self.do_command(self.dev_args + ['wipe'])
self.assertTrue(result['success'])

t_client = KeepkeyClient('udp:127.0.0.1:11044', 'test')
t_client.client.ui.get_pin = MethodType(get_pin, t_client.client.ui)
t_client.client.ui.pin = '1234'
result = t_client.setup_device(label='HWI Keepkey')
self.assertTrue(result)

result = self.do_command(self.dev_args + ['enumerate'])
for dev in result:
if dev['type'] == 'trezor' and dev['path'] == 'udp:127.0.0.1:11044':
self.assertEqual(result['label'], 'HWI Keepkey')
if dev['type'] == 'keepkey' and dev['path'] == 'udp:127.0.0.1:11044':
self.assertEqual(dev['label'], 'HWI Keepkey')
break
else:
self.fail("Did not enumerate device")

def test_backup(self):
result = self.do_command(self.dev_args + ['backup'])
Expand All @@ -219,17 +231,23 @@ def test_pins(self):
self.assertEqual(result['code'], -11)
result = self.do_command(self.dev_args + ['enumerate'])
for dev in result:
if dev['type'] == 'trezor' and dev['path'] == 'udp:127.0.0.1:11044':
if dev['type'] == 'keepkey' and dev['path'] == 'udp:127.0.0.1:11044':
self.assertFalse(dev['needs_pin_sent'])
break
else:
self.fail("Did not enumerate device")

# Set a PIN
device.wipe(self.client)
load_device_by_mnemonic(client=self.client, mnemonic='alcohol woman abuse must during monitor noble actual mixed trade anger aisle', pin='1234', passphrase_protection=False, label='test')
self.client.call(messages.LockDevice())
result = self.do_command(self.dev_args + ['enumerate'])
for dev in result:
if dev['type'] == 'trezor' and dev['path'] == 'udp:127.0.0.1:11044':
if dev['type'] == 'keepkey' and dev['path'] == 'udp:127.0.0.1:11044':
self.assertTrue(dev['needs_pin_sent'])
break
else:
self.fail("Did not enumerate device")
result = self.do_command(self.dev_args + ['promptpin'])
self.assertTrue(result['success'])

Expand Down Expand Up @@ -259,8 +277,11 @@ def test_pins(self):

result = self.do_command(self.dev_args + ['enumerate'])
for dev in result:
if dev['type'] == 'trezor' and dev['path'] == 'udp:127.0.0.1:11044':
if dev['type'] == 'keepkey' and dev['path'] == 'udp:127.0.0.1:11044':
self.assertFalse(dev['needs_pin_sent'])
break
else:
self.fail("Did not enumerate device")

# Sending PIN after unlock
result = self.do_command(self.dev_args + ['promptpin'])
Expand All @@ -276,20 +297,30 @@ def test_passphrase(self):

# A passphrase will need to be sent
result = self.do_command(self.dev_args + ['enumerate'])
print(result)
for dev in result:
if dev['type'] == 'keepkey' and dev['path'] == 'udp:127.0.0.1:11044':
self.assertTrue(dev['needs_passphrase_sent'])
break
else:
self.fail("Did not enumerate device")
result = self.do_command(self.dev_args + ['-p', 'pass', 'enumerate'])
for dev in result:
if dev['type'] == 'keepkey' and dev['path'] == 'udp:127.0.0.1:11044':
self.assertFalse(dev['needs_passphrase_sent'])
fpr = dev['fingerprint']
break
else:
self.fail("Did not enumerate device")
# A different passphrase will change the fingerprint
result = self.do_command(self.dev_args + ['-p', 'pass2', 'enumerate'])
for dev in result:
if dev['type'] == 'keepkey' and dev['path'] == 'udp:127.0.0.1:11044':
self.assertFalse(dev['needs_passphrase_sent'])
self.assertNotEqual(dev['fingerprint'], fpr)
break
else:
self.fail("Did not enumerate device")

# Clearing the session and starting a new one with a new passphrase should change the passphrase
self.client.call(messages.LockDevice())
Expand All @@ -298,6 +329,9 @@ def test_passphrase(self):
if dev['type'] == 'keepkey' and dev['path'] == 'udp:127.0.0.1:11044':
self.assertFalse(dev['needs_passphrase_sent'])
self.assertNotEqual(dev['fingerprint'], fpr)
break
else:
self.fail("Did not enumerate device")

# Disable passphrase
self.do_command(self.dev_args + ['togglepassphrase'])
Expand All @@ -308,12 +342,18 @@ def test_passphrase(self):
if dev['type'] == 'keepkey' and dev['path'] == 'udp:127.0.0.1:11044':
self.assertFalse(dev['needs_passphrase_sent'])
self.assertEquals(dev['fingerprint'], '95d8f670')
break
else:
self.fail("Did not enumerate device")
# Setting a passphrase won't change the fingerprint
result = self.do_command(self.dev_args + ['-p', 'pass', 'enumerate'])
for dev in result:
if dev['type'] == 'keepkey' and dev['path'] == 'udp:127.0.0.1:11044':
self.assertFalse(dev['needs_passphrase_sent'])
self.assertEquals(dev['fingerprint'], '95d8f670')
break
else:
self.fail("Did not enumerate device")

def keepkey_test_suite(emulator, rpc, userpass, interface):
# Redirect stderr to /dev/null as it's super spammy
Expand Down
59 changes: 58 additions & 1 deletion test/test_trezor.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,20 @@ def test_expert_getxpub(self):
self.assertEqual(result['chaincode'], '95a7fb33c4f0896f66045cd7f45ed49a9e72372d2aed204ad0149c39b7b17905')
self.assertEqual(result['pubkey'], '022e6d9c18e5a837e802fb09abe00f787c8ccb0fc489c6ec5dc2613d930efd7eae')

class TestTrezorLabel(TrezorTestCase):
def setUp(self):
self.client = self.emulator.start()
self.dev_args = ['-t', 'trezor', '-d', 'udp:127.0.0.1:21324']

def test_label(self):
result = self.do_command(self.dev_args + ['enumerate'])
for dev in result:
if dev['type'] == 'trezor' and dev['path'] == 'udp:127.0.0.1:21324':
self.assertEqual(dev['label'], 'test')
break
else:
self.fail("Did not enumerate device")

# Trezor specific management (setup, wipe, restore, backup, promptpin, sendpin) command tests
class TestTrezorManCommands(TrezorTestCase):
def setUp(self):
Expand Down Expand Up @@ -199,10 +213,22 @@ def test_setup_wipe(self):
self.assertEquals(result['error'], 'Device is already initialized. Use wipe first and try again')

def test_label(self):
result = self.do_command(self.dev_args + ['wipe'])
self.assertTrue(result['success'])

t_client = TrezorClient('udp:127.0.0.1:21324', 'test')
t_client.client.ui.get_pin = MethodType(get_pin, t_client.client.ui)
t_client.client.ui.pin = '1234'
result = t_client.setup_device(label='HWI Trezor')
self.assertTrue(result)

result = self.do_command(self.dev_args + ['enumerate'])
for dev in result:
if dev['type'] == 'trezor' and dev['path'] == 'udp:127.0.0.1:21324':
self.assertEqual(result['label'], 'HWI Trezor')
self.assertEqual(dev['label'], 'HWI Trezor')
break
else:
self.fail("Did not enumerate device")

def test_backup(self):
result = self.do_command(self.dev_args + ['backup'])
Expand All @@ -223,6 +249,9 @@ def test_pins(self):
for dev in result:
if dev['type'] == 'trezor' and dev['path'] == 'udp:127.0.0.1:21324':
self.assertFalse(dev['needs_pin_sent'])
break
else:
self.fail("Did not enumerate device")

# Set a PIN
device.wipe(self.client)
Expand All @@ -233,6 +262,9 @@ def test_pins(self):
for dev in result:
if dev['type'] == 'trezor' and dev['path'] == 'udp:127.0.0.1:21324':
self.assertTrue(dev['needs_pin_sent'])
break
else:
self.fail("Did not enumerate device")
result = self.do_command(self.dev_args + ['promptpin'])
self.assertTrue(result['success'])

Expand Down Expand Up @@ -264,6 +296,9 @@ def test_pins(self):
for dev in result:
if dev['type'] == 'trezor' and dev['path'] == 'udp:127.0.0.1:21324':
self.assertFalse(dev['needs_pin_sent'])
break
else:
self.fail("Did not enumerate device")

# Sending PIN after unlock
result = self.do_command(self.dev_args + ['promptpin'])
Expand All @@ -282,11 +317,17 @@ def test_passphrase(self):
for dev in result:
if dev['type'] == 'trezor' and dev['path'] == 'udp:127.0.0.1:21324':
self.assertTrue(dev['needs_passphrase_sent'])
break
else:
self.fail("Did not enumerate device")
result = self.do_command(self.dev_args + ['-p', 'pass', 'enumerate'])
for dev in result:
if dev['type'] == 'trezor' and dev['path'] == 'udp:127.0.0.1:21324':
self.assertFalse(dev['needs_passphrase_sent'])
fpr = dev['fingerprint']
break
else:
self.fail("Did not enumerate device")

if self.emulator.model == 't':
# Trezor T: A different passphrase would not change the fingerprint
Expand All @@ -295,13 +336,19 @@ def test_passphrase(self):
if dev['type'] == 'trezor' and dev['path'] == 'udp:127.0.0.1:21324':
self.assertFalse(dev['needs_passphrase_sent'])
self.assertEqual(dev['fingerprint'], fpr)
break
else:
self.fail("Did not enumerate device")
else:
# Trezor 1: A different passphrase will change the fingerprint
result = self.do_command(self.dev_args + ['-p', 'pass2', 'enumerate'])
for dev in result:
if dev['type'] == 'trezor' and dev['path'] == 'udp:127.0.0.1:21324':
self.assertFalse(dev['needs_passphrase_sent'])
self.assertNotEqual(dev['fingerprint'], fpr)
break
else:
self.fail("Did not enumerate device")

# Clearing the session and starting a new one with a new passphrase should change the passphrase
self.client.call(messages.Initialize())
Expand All @@ -310,6 +357,9 @@ def test_passphrase(self):
if dev['type'] == 'trezor' and dev['path'] == 'udp:127.0.0.1:21324':
self.assertFalse(dev['needs_passphrase_sent'])
self.assertNotEqual(dev['fingerprint'], fpr)
break
else:
self.fail("Did not enumerate device")

# Disable passphrase
self.do_command(self.dev_args + ['togglepassphrase'])
Expand All @@ -320,12 +370,18 @@ def test_passphrase(self):
if dev['type'] == 'trezor' and dev['path'] == 'udp:127.0.0.1:21324':
self.assertFalse(dev['needs_passphrase_sent'])
self.assertEquals(dev['fingerprint'], '95d8f670')
break
else:
self.fail("Did not enumerate device")
# Setting a passphrase won't change the fingerprint
result = self.do_command(self.dev_args + ['-p', 'pass', 'enumerate'])
for dev in result:
if dev['type'] == 'trezor' and dev['path'] == 'udp:127.0.0.1:21324':
self.assertFalse(dev['needs_passphrase_sent'])
self.assertEquals(dev['fingerprint'], '95d8f670')
break
else:
self.fail("Did not enumerate device")

def trezor_test_suite(emulator, rpc, userpass, interface, model):
assert model in TREZOR_MODELS
Expand All @@ -350,6 +406,7 @@ def trezor_test_suite(emulator, rpc, userpass, interface, model):
suite.addTest(DeviceTestCase.parameterize(TestSignMessage, rpc, userpass, type, full_type, path, fingerprint, master_xpub, emulator=dev_emulator, interface=interface))
if model != 't':
suite.addTest(TrezorTestCase.parameterize(TestTrezorManCommands, emulator=dev_emulator, interface=interface))
suite.addTest(TrezorTestCase.parameterize(TestTrezorLabel, emulator=dev_emulator, interface=interface))
suite.addTest(DeviceTestCase.parameterize(TestDeviceConnect, rpc, userpass, 'trezor_{}_simulator'.format(model), full_type, path, fingerprint, master_xpub, emulator=dev_emulator, interface=interface))
suite.addTest(TrezorTestCase.parameterize(TestTrezorGetxpub, emulator=dev_emulator, interface=interface))

Expand Down

0 comments on commit 8c6763b

Please sign in to comment.