Skip to content

Commit 2d54f6d

Browse files
committed
test: gate authentication order by firmware version
1 parent e678d8a commit 2d54f6d

2 files changed

Lines changed: 29 additions & 8 deletions

File tree

tests/common.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,19 @@ def assertEqual(self, lhs, rhs):
125125
def assertEndsWith(self, s, suffix):
126126
self.assertTrue(s.endswith(suffix), "'{}'.endswith('{}')".format(s, suffix))
127127

128-
def requires_firmware(self, ver_required):
128+
def firmware_version(self):
129129
self.client.init_device()
130130
features = self.client.features
131131
version = "%s.%s.%s" % (features.major_version, features.minor_version, features.patch_version)
132-
if semver.VersionInfo.parse(version) < semver.VersionInfo.parse(ver_required):
132+
return semver.VersionInfo.parse(version)
133+
134+
def firmware_at_least(self, ver_required):
135+
"""Return whether the connected firmware includes a versioned feature."""
136+
return self.firmware_version() >= semver.VersionInfo.parse(ver_required)
137+
138+
def requires_firmware(self, ver_required):
139+
version = self.firmware_version()
140+
if version < semver.VersionInfo.parse(ver_required):
133141
self.skipTest("Firmware version " + ver_required + " or higher is required to run this test")
134142

135143
def requires_taproot(self):

tests/test_protection_levels.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -127,15 +127,28 @@ def test_reset_device(self):
127127
self.assertRaises(Exception, self.client.reset_device, False, 128, True, False, 'label', 'english')
128128

129129
def test_sign_message(self):
130+
authentication_first = self.firmware_at_least("7.14.2")
130131
with self.client:
131132
self.setup_mnemonic_pin_passphrase()
132133
self.client.clear_session()
133-
self.client.set_expected_responses([proto.PinMatrixRequest(),
134-
proto.PassphraseRequest(),
135-
proto.ButtonRequest(),
136-
proto.ButtonRequest(
137-
code=proto_types.ButtonRequest_SignMessage),
138-
proto.MessageSignature()])
134+
if authentication_first:
135+
expected_responses = [
136+
proto.PinMatrixRequest(),
137+
proto.PassphraseRequest(),
138+
proto.ButtonRequest(),
139+
proto.ButtonRequest(
140+
code=proto_types.ButtonRequest_SignMessage),
141+
proto.MessageSignature(),
142+
]
143+
else:
144+
expected_responses = [
145+
proto.ButtonRequest(),
146+
proto.PinMatrixRequest(),
147+
proto.PassphraseRequest(),
148+
proto.ButtonRequest(),
149+
proto.MessageSignature(),
150+
]
151+
self.client.set_expected_responses(expected_responses)
139152
self.client.sign_message('Bitcoin', [], 'testing message')
140153

141154
def test_verify_message(self):

0 commit comments

Comments
 (0)