fix: cached GETs bypass the card lock; compact install step lines (v3.6.47)
The install modal's progress bar froze around 70% and jumped to 100% at
the end: not a math bug - the UI's other polls (/api/stk-status,
/api/poll-status, /api/proactive-log, /api/menu, ...) were card-locked in
do_GET even though they only read cached state, queued behind the install
and exhausted the browser's 6-connections-per-host budget, starving
/api/status. _CARD_FREE_GET lists every card-free GET (status, version,
stk-status, poll-status, proactive-log, menu, events, terminal-profile,
pli-*, commands, net-state, mcc-mnc, scp81/bip status|script|log);
/api/cardinfo and /api/esim/* stay locked (they touch the card).
tests/test_fetch_routes.py holds _CARD_LOCK and asserts the cached
endpoints still answer - verified to time out on the pre-fix list.
The install modal is wider (max-w-3xl) and successful step lines are
compact: '✅ Step 3: LOAD (1/240) - 6101 · 274 B / 3 SMS' (no verbose SW
name, B instead of bytes, the SMS count only when >1); failed steps keep
the full detail and the hint.
sw cache simple-v320; tests: 533 Python / 684 Node.
This commit is contained in:
@@ -374,12 +374,14 @@ test('ramGetStatusApdu builds the compact chain, never the expanded form', () =>
|
||||
test('ramStepLine shows the PoR verdict and the remote status word', () => {
|
||||
globalThis.t = s => s;
|
||||
globalThis.lookupSw = (a, b) => (a + b === '6700' ? 'Wrong length in Lc' : '');
|
||||
// successful steps are compact: verdict symbol, remote SW (no name),
|
||||
// size; the SMS count only for concatenated packets
|
||||
const okLine = ramStepLine({ name: 'INSTALL [for load]', por_status: 'por_ok',
|
||||
por_sw: '9000', sw: '9000', bytes: 50, segments: 1 }, 0);
|
||||
assert.ok(okLine.startsWith('\u2705'), okLine);
|
||||
assert.ok(okLine.includes('PoR ok'), okLine);
|
||||
assert.ok(okLine.includes('remote SW 9000'), okLine);
|
||||
assert.ok(okLine.includes('50 bytes / 1 SMS'), okLine);
|
||||
assert.strictEqual(okLine, '\u2705 Step 1: INSTALL [for load] \u2014 9000 \u00b7 50 B');
|
||||
const multi = ramStepLine({ name: 'LOAD (1/64)', por_status: 'por_ok',
|
||||
por_sw: '6101', bytes: 274, segments: 3 }, 1);
|
||||
assert.strictEqual(multi, '\u2705 Step 2: LOAD (1/64) \u2014 6101 \u00b7 274 B / 3 SMS');
|
||||
const badLine = ramStepLine({ name: 'LOAD (1/9)', por_status: 'por_ok', por_sw: '6700',
|
||||
por_error: 'remote SW 6700', sw: '9000', bytes: 274, segments: 3 }, 1);
|
||||
assert.ok(badLine.startsWith('\u274c'), badLine);
|
||||
|
||||
Reference in New Issue
Block a user