fix: robust equip-state detection and review follow-ups (v3.5.4)
Code-review follow-ups for v3.5.2/v3.5.1, plus a test flake found while re-running the suites: - F1: a half-initialized equip is no longer reported as success. cmd2 swallows exceptions raised inside the equip command (and prints no traceback by default), while PysimApp.equip() assigns card/rs before it registers the command sets - so app.card alone once let the "CommandSet ... is already installed" abort pass as done while /api/tree stayed broken. The auto-equip attempt now captures the output with cmd2 debug on (a swallowed error prints a traceback), requires the new profile's command-set instances to be installed (_app_equip_complete), and the manual /api/command equip branch applies the post-equip refresh only when that check passes (and reports it in the output when it does not). - F3: SCARD_E_SHARING_VIOLATION is recoverable (a rebuild cannot free another process's claim) instead of transport-fatal. - F4: SPI1 b2b1 = 11 (Digital Signature) is refused instead of building an unsigned packet; help notes RC is CRC-32 only (KID CRC-16 not offered). - F5: _clear_app_card_state removes the muted stdout again when the app object had no stdout attribute. - F7: the watchdog re-arm keeps its rate-limit window when the trigger is busy/disabled instead of consuming it. - F2: stale docstring in _auto_equip_attempt. - tests: equip-state units, half-equip and captured-traceback failures, unequip-on-failure, busy trigger, sharing violation, DS refusal. - bonus: the MCC/MNC random-pick test could fail because a dict keyed by (mcc, mnc) keeps one of two entries (the bundled list carries both a real and an MVNO entry for 234/18 and 234/28); the picker was correct - the assertion now checks the pair against the non-MVNO pairs. 549 frontend / 421 Python green; version 3.5.4; sw cache simple-v256.
This commit is contained in:
@@ -90,10 +90,14 @@ class MccMncFilterTests(unittest.TestCase):
|
||||
|
||||
def test_random_real_list_never_picks_mvno(self):
|
||||
data = server._mcc_mnc_load(__main__._default_mcc_mnc_list())
|
||||
by_pair = {(e['mcc'], e['mnc']): e for e in data}
|
||||
# A few (mcc, mnc) pairs exist both as a real network and as an MVNO
|
||||
# entry (e.g. 234/18, 234/28), so a dict keyed by the pair can keep the
|
||||
# wrong entry: assert the picked pair has a non-MVNO entry behind it.
|
||||
real_pairs = {(e['mcc'], e['mnc']) for e in data
|
||||
if not server._mcc_mnc_is_mvno(e)}
|
||||
for _ in range(100):
|
||||
r = server._mcc_mnc_random(data)
|
||||
self.assertFalse(server._mcc_mnc_is_mvno(by_pair[(r['mcc'], r['mnc'])]))
|
||||
self.assertIn((r['mcc'], r['mnc']), real_pairs)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
Reference in New Issue
Block a user