fix: harden identity, live access, drafts and setup (review only)
Source-reviewed hardening changes and regression tests. UNBUILT / UNTESTED: not a deployable release. Go formatting, compilation, automated regression tests, full frontend validation and staging acceptance remain required. See docs/hardening/VALIDATION.md. Main remains the original clean snapshot; no upstream Git history imported.
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
// Modified in the independent hardening fork; see docs/hardening/README.md.
|
||||
import assert from "node:assert/strict"
|
||||
import test from "node:test"
|
||||
|
||||
@@ -97,3 +98,41 @@ test("beforeConnect failure triggers onConnectError and disconnect status", asyn
|
||||
assert.ok(statusList.includes("disconnected"), "status should include disconnected")
|
||||
manager.disconnect()
|
||||
})
|
||||
|
||||
test("disconnect invalidates a pending beforeConnect even across reconnect", async () => {
|
||||
let resolveOld
|
||||
let attempts = 0, created = 0
|
||||
const old = new Promise((resolve) => { resolveOld = resolve })
|
||||
const manager = createRealtimeConnectionManager({
|
||||
beforeConnect: () => ++attempts === 1 ? old : Promise.resolve(),
|
||||
createSocket: () => { created++; return new MockWebSocket() },
|
||||
})
|
||||
const first = manager.connect()
|
||||
manager.disconnect()
|
||||
await manager.connect()
|
||||
resolveOld()
|
||||
await first
|
||||
assert.equal(created, 1)
|
||||
manager.disconnect()
|
||||
})
|
||||
|
||||
test("late old socket close cannot clear current connection or notify current owner", async () => {
|
||||
let closed = 0
|
||||
const sockets = []
|
||||
const manager = createRealtimeConnectionManager({
|
||||
createSocket: () => {
|
||||
const socket = new MockWebSocket()
|
||||
// Simulate an asynchronously arriving close event after replacement.
|
||||
socket.close = () => { socket.readyState = MockWebSocket.CLOSED }
|
||||
sockets.push(socket)
|
||||
return socket
|
||||
},
|
||||
onClose: () => { closed++ },
|
||||
})
|
||||
await manager.connect()
|
||||
await manager.connect()
|
||||
sockets[0].emit("close", {})
|
||||
assert.equal(manager.getSocket(), sockets[1])
|
||||
assert.equal(closed, 0)
|
||||
manager.disconnect()
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user