fix: 完善既有会话刷新证据合同
This commit is contained in:
@@ -66,6 +66,98 @@ test("observe status renderer exposes the exact command phase and failed report
|
||||
assert.match(text, /terminal event arrived before subscriber disconnect/u);
|
||||
});
|
||||
|
||||
test("observe status renderer exposes existing-session refresh handoff and typed failure evidence", () => {
|
||||
const base = {
|
||||
ok: true,
|
||||
status: "running",
|
||||
command: "web-probe observe status",
|
||||
id: "webobs-fixture",
|
||||
node: "NC01",
|
||||
lane: "v03",
|
||||
next: {},
|
||||
};
|
||||
const rendered = withWebObserveStatusRendered({
|
||||
...base,
|
||||
observer: {
|
||||
processAlive: true,
|
||||
manifest: {},
|
||||
heartbeat: {},
|
||||
diagnostics: {},
|
||||
commands: {},
|
||||
exactCommand: {
|
||||
commandId: "cmd-existing-refresh",
|
||||
type: "validateExistingSessionRefresh",
|
||||
phase: "done",
|
||||
ok: true,
|
||||
result: {
|
||||
status: "passed",
|
||||
sessionId: "ses_existing",
|
||||
traceIds: ["trc_existing"],
|
||||
phase: "live",
|
||||
code: "refresh_live_handoff_validated",
|
||||
before: { messageCount: 2 },
|
||||
after: { messageCount: 2 },
|
||||
refreshReplay: {
|
||||
phase: "live",
|
||||
topic: "hwlab.event.v1",
|
||||
topicPartitions: [0],
|
||||
barrier: [{ partition: 0, endOffset: "18" }],
|
||||
counts: { matched: 8, replayed: 8, buffered: 1, bufferedDelivered: 1, liveDelivered: 0, deduplicated: 0 },
|
||||
},
|
||||
productSse: { browserSourceCount: 1, openCount: 1, connectedEventCount: 1, businessEventCount: 9, typedFailureCount: 0, livePhase: true },
|
||||
forbiddenRequestCount: 0,
|
||||
reportSha256: "sha256:existing-refresh-report",
|
||||
screenshot: { sha256: "sha256:existing-refresh-image" },
|
||||
},
|
||||
},
|
||||
tails: { samples: [], control: [], network: [] },
|
||||
},
|
||||
});
|
||||
const text = String(rendered.renderedText);
|
||||
assert.match(text, /Workbench 既有 Session 刷新:/u);
|
||||
assert.match(text, /ses_existing.*trc_existing.*live.*refresh_live_handoff_validated.*2.*2.*1.*1.*1.*9.*0.*0/u);
|
||||
assert.match(text, /hwlab\.event\.v1.*0.*0:18.*8.*8.*1.*1.*0.*0.*true/u);
|
||||
assert.match(text, /sha256:existing-refresh-report.*sha256:existing-refresh-image/u);
|
||||
|
||||
const failed = withWebObserveStatusRendered({
|
||||
...base,
|
||||
observer: {
|
||||
processAlive: true,
|
||||
manifest: {},
|
||||
heartbeat: {},
|
||||
diagnostics: {},
|
||||
commands: {},
|
||||
exactCommand: {
|
||||
commandId: "cmd-existing-refresh-failed",
|
||||
type: "validateExistingSessionRefresh",
|
||||
phase: "failed",
|
||||
ok: false,
|
||||
error: {
|
||||
message: "Kafka retention barrier gap",
|
||||
details: {
|
||||
sessionId: "ses_existing",
|
||||
traceIds: ["trc_existing"],
|
||||
phase: "retention-barrier",
|
||||
code: "retention_barrier_failed",
|
||||
failure: {
|
||||
phase: "retention-barrier",
|
||||
code: "retention_barrier_failed",
|
||||
streamPhase: "flushing",
|
||||
streamCode: "workbench_kafka_refresh_barrier_gap",
|
||||
message: "Kafka retention barrier gap",
|
||||
},
|
||||
reportSha256: "sha256:failed-existing-refresh-report",
|
||||
},
|
||||
},
|
||||
},
|
||||
tails: { samples: [], control: [], network: [] },
|
||||
},
|
||||
});
|
||||
const failedText = String(failed.renderedText);
|
||||
assert.match(failedText, /Typed failure:/u);
|
||||
assert.match(failedText, /retention-barrier.*retention_barrier_failed.*flushing.*workbench_kafka_refresh_barrier_gap.*Kafka retention barrier gap/u);
|
||||
});
|
||||
|
||||
test("observe status renderer exposes bounded Workbench Kafka debug replay evidence", () => {
|
||||
const rendered = withWebObserveStatusRendered({
|
||||
ok: true,
|
||||
|
||||
Reference in New Issue
Block a user