Skip to content

v3.37.0

Choose a tag to compare

@github-actions github-actions released this 23 Oct 23:04
· 38 commits to main since this release

Added

  • Load testing for test scripts and suites. POST /api/test/run takes an optional
    iterations count (the PWA's Iterations field next to Start / Run suite): the
    run repeats N times, successful iterations are discarded (only the iteration counter and
    the timing are kept; the per-step log is not rendered or retained), and the first
    iteration that ends in an error stops the loop and keeps that iteration's full
    report. A manual stop ends it after the current iteration, and a card session change
    between iterations is an error (a swapped card is never run against another card's
    script). The SCP80 counter state is shared across iterations, so packets continue from
    what the previous run consumed. The run status gains a load block (iteration,
    done, failed_iteration, elapsed_ms, avg_ms); the count is a run parameter, not
    part of the stored script or suite.

  • The stuck-card watchdog for test runs. A card that stops answering (no status
    word, no driver error) used to leave the runner inside a blocking SCardTransmit
    holding the card lock — Stop could not take effect, the presence monitor waited for
    the lock and a load test hung in that iteration without explanation. After 30 s
    without runner progress (a bounded STATUS/drain loop beats once per attempt) the
    watchdog marks the run stuck, records the card stopped responding (step N, no answer for N s), sets the stop flag and tries to cancel the blocked transmit by
    disconnecting the PC/SC link on a background thread. Where PC/SC can cancel it, the
    step fails through the ordinary on_fail path and the run finalises as an error
    (never stopped); where it cannot (pcsc-lite serializes the disconnect behind the
    pending transmit), the status already names the step until the driver's own card
    timeout returns. The transport is marked stale once the disconnect returns, so the
    next Equip rebuilds it. The status gains stuck; the help EN/RU,
    docs/test-scripts.md and docs/api.md describe the behaviour and the
    background-disconnect caveat.

Fixed

  • The PLI location answer now uses the 7-byte PLI form (TS 31.111 8.19.1):
    PLMN 001/01, LAC 0001, Cell ID 0001. The former default was the 5-byte
    Network Rejection event form (no Cell ID) with LAC 0000; a card applet
    that re-reads its location after a *LOCI status change (the Alfa MultiIMSI
    applet) treated it as empty and re-requested PLI on every STATUS tick — the
    PLI storm that slowed RAM Explore. The TR data is now
    13 07 00F110 0001 0001.
  • The proactive chain is bounded on every call site: _handle_proactive_chain's
    max_rounds defaults to _POLL_CHAIN_MAX (the background poll always passed it;
    the manual STATUS poll and the ENVELOPE/menu/TP chains did not). A card that
    re-queues a command (the PLI storm) could keep the manual poll looping forever
    while it held the card lock — /api/status-poll never returned and every card
    request waited. The manual poll also passes the bound explicitly.
  • The load-test loop closes properly on a raised runner error (it used to leave the run
    running forever - the PWA polled a dead run and Clear report stayed refused), on a
    card session change inside a suite iteration, and on a member that was stopped; a
    warning in any iteration is reflected in the final status, avg_ms covers the attempted
    iterations (the failing one included), and each suite iteration's counters_before is
    read fresh from the preset store.