mirror of
https://github.com/stablyai/orca.git
synced 2026-09-28 00:02:41 +00:00
83 lines
2.4 KiB
JavaScript
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)
|
|
})
|