v3.22.0 (review fixes): the ownership reconciliation and the import guards
The suite/script ownership invariant could break silently: a suites import with mode "replace" wiped the suites while their scripts stayed behind (suite_id pointing at gone suites - invisible in the UI), a scripts import with mode "replace" left every suite's member list dangling, and a script whose suite_id disagreed with its listing suite stayed inconsistent. - server: reconcile_scripts_to_suites() repairs the invariant - a script a suite lists adopts that suite (the member list is authoritative), a script no suite lists joins "Imported scripts"; migrate_scripts_to_suites() delegates to it (the startup migration is the same pass) and the suites import runs it after loading, so a "replace" adopts the wiped suites' scripts instead of losing them. - the scripts import refuses mode "replace" while any suite still lists scripts (400 naming the dangling references; merge is the normal path). - nits from the review: a legacy numeric `event` is no longer parsed as hex in the step summary/error check (0x0A displayed as 0x10), and an integral float memory quota (a JSON client's 200.0) is accepted. - tests: the reconciliation (missing suite, listed-but-mismatched, idempotent), the scripts-replace guard (refused/allowed), the suites-replace adoption, the float quota, the numeric-event summary. Tests: 838 frontend + 800 Python; sw cache simple-v402.
This commit is contained in:
@@ -1586,6 +1586,9 @@ class CapApduSequenceTest(unittest.TestCase):
|
||||
# a 4-byte quota above 32767 (GP Card Spec 9.7)
|
||||
self.assertEqual(_compose_install_params('', '', volatile_quota=32768),
|
||||
'C900EF06C70400008000')
|
||||
# an integral float (a JSON client may send 200.0) is accepted
|
||||
self.assertEqual(_compose_install_params('', '', nv_quota=200.0),
|
||||
'C900EF04C80200C8')
|
||||
# an EA-form STK part is a sibling of EF (the reference TCA form)
|
||||
self.assertEqual(_compose_install_params('', 'EA0480000000',
|
||||
volatile_quota=100),
|
||||
|
||||
Reference in New Issue
Block a user