test(fba): verify signed delivery ACK loss and original event recovery

This commit is contained in:
2026-10-03 08:13:04 +08:00
parent ef1eef3278
commit 51bf4e5558
11 changed files with 499 additions and 57 deletions
+8 -2
View File
@@ -32,11 +32,12 @@ def encoded(value):
class State:
def __init__(self, event_type, event_id, loading_plan_id, log_path=None, container_booking_id=None):
def __init__(self, event_type, event_id, loading_plan_id, log_path=None, container_booking_id=None, delivery_id=None):
self.event_type = event_type
self.selector_id = event_id
self.plan_id = loading_plan_id
self.booking_id = container_booking_id
self.delivery_id = delivery_id
self.log_path = log_path
self.lock = threading.Lock()
self.mode = "PASS"
@@ -70,6 +71,8 @@ class State:
selected = event_id == self.selector_id
elif self.booking_id:
selected = isinstance(payload, dict) and str(payload.get("sourceContainerBookingId")) == self.booking_id
elif self.delivery_id:
selected = isinstance(payload, dict) and str(payload.get("deliveryOrderId")) == self.delivery_id
else:
selected = isinstance(payload, dict) and str(payload.get("loadingPlanId")) == self.plan_id
qualifies = event.get("eventType") == self.event_type and selected
@@ -260,6 +263,7 @@ def main():
selector.add_argument("--event-id")
selector.add_argument("--loading-plan-id")
selector.add_argument("--container-booking-id")
selector.add_argument("--delivery-id")
parser.add_argument("--bind", default="127.0.0.1")
parser.add_argument("--port", type=int, default=0)
parser.add_argument("--control-port", type=int, default=0)
@@ -278,9 +282,11 @@ def main():
parser.error("loading-plan-id must be a positive decimal identifier")
if args.container_booking_id and not re.fullmatch(r"[1-9][0-9]{0,19}", args.container_booking_id):
parser.error("container-booking-id must be a positive decimal identifier")
if args.delivery_id and not re.fullmatch(r"[1-9][0-9]{0,19}", args.delivery_id):
parser.error("delivery-id must be a positive decimal identifier")
if not re.fullmatch(r"[A-Za-z][A-Za-z0-9]{0,79}", args.event_type) or not 0 < args.timeout <= 120:
parser.error("invalid event type or timeout")
state = State(args.event_type, args.event_id, args.loading_plan_id, args.log, args.container_booking_id)
state = State(args.event_type, args.event_id, args.loading_plan_id, args.log, args.container_booking_id, args.delivery_id)
data = ThreadingHTTPServer((args.bind, args.port), data_handler(state, args.upstream, args.timeout))
control = ThreadingHTTPServer(("127.0.0.1", args.control_port), control_handler(state, token))
for server in (data, control):