Files
orca/config/scripts/lag-probe-failures.test.mjs

83 lines
2.4 KiB
JavaScript

import assert from 'node:assert/strict'
import { test } from 'vitest'
import { runInNewContext } from 'node:vm'
import { installRendererIpcProbe } from './main-blocking-probe.mjs'
import { connectOrcaMainInspector } from './orca-main-inspector-connection.mjs'
test('IPC polling records a rejection and permits the next poll', async () => {
let poll
let calls = 0
const window = {
api: {
app: {
getIdentity: async () => {
if (++calls === 1) {
throw new Error('IPC disconnected')
}
}
}
}
}
runInNewContext(`(${String(installRendererIpcProbe)})()`, {
window,
performance,
Date,
document: { addEventListener() {}, removeEventListener() {} },
setInterval(callback) {
poll = callback
return 1
},
clearInterval() {}
})
await poll()
await poll()
const { requests } = window.__orcaIpcTimingProbe.stop()
assert.equal(requests.length, 2)
assert.match(requests[0].failed, /IPC disconnected/)
assert.equal(requests[1].failed, undefined)
})
test('socket closure rejects outstanding and subsequent requests without timeout timers', async () => {
let socket
const timers = new Set()
class FakeSocket {
static OPEN = 1
readyState = 1
constructor() {
socket = this
queueMicrotask(() => this.onopen())
}
send(payload) {
const { id, params } = JSON.parse(payload)
if (params.expression === 'process.pid') {
queueMicrotask(() =>
this.onmessage({ data: JSON.stringify({ id, result: { result: { value: 42 } } }) })
)
}
}
close() {
this.readyState = 3
this.onclose()
}
}
const connect = runInNewContext(`(${String(connectOrcaMainInspector)})`, {
fetch: async () => ({ json: async () => [{ webSocketDebuggerUrl: 'ws://fixture' }] }),
WebSocket: FakeSocket,
setTimeout(callback) {
timers.add(callback)
return callback
},
clearTimeout(timer) {
timers.delete(timer)
}
})
const connection = await connect(42)
const first = connection.send('Profiler.start')
const second = connection.send('Profiler.stop')
socket.close()
await assert.rejects(first, /Inspector socket closed/)
await assert.rejects(second, /Inspector socket closed/)
await assert.rejects(connection.send('Profiler.enable'), /not open/)
assert.equal(timers.size, 0)
})