[verified] test(desktop): guard nonblocking runtime probes
(cherry picked from commit ee61bbfa311a0a99a1f8c14c18e3cdc97e51f3d1)
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
|
||||
import assert from 'node:assert/strict'
|
||||
import fs from 'node:fs'
|
||||
import net from 'node:net'
|
||||
import os from 'node:os'
|
||||
import path from 'node:path'
|
||||
|
||||
@@ -15,6 +16,7 @@ import { test } from 'vitest'
|
||||
import {
|
||||
canImportHermesCli,
|
||||
DEFAULT_PROBE_TIMEOUT_MS,
|
||||
execProbe,
|
||||
hermesRuntimeImportProbe,
|
||||
PROBE_TIMEOUT_MS,
|
||||
resolveProbeTimeoutMs,
|
||||
@@ -29,6 +31,40 @@ import {
|
||||
// (a tiny script we write to disk that exits 0 on --version).
|
||||
const NODE_BIN = process.execPath
|
||||
|
||||
test('execProbe keeps the parent event loop available to the child', async () => {
|
||||
const server = net.createServer((socket) => socket.end('pong'))
|
||||
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
server.once('error', reject)
|
||||
server.listen(0, '127.0.0.1', resolve)
|
||||
})
|
||||
|
||||
const address = server.address()
|
||||
assert.ok(address && typeof address === 'object')
|
||||
|
||||
const childScript = `
|
||||
const net = require('node:net')
|
||||
let reply = ''
|
||||
const socket = net.createConnection(${address.port}, '127.0.0.1')
|
||||
socket.setEncoding('utf8')
|
||||
socket.on('data', (chunk) => { reply += chunk })
|
||||
socket.on('end', () => process.exit(reply === 'pong' ? 0 : 1))
|
||||
socket.on('error', () => process.exit(1))
|
||||
`
|
||||
|
||||
try {
|
||||
await execProbe(NODE_BIN, ['-e', childScript], {
|
||||
stdio: 'ignore',
|
||||
timeout: 1_000,
|
||||
windowsHide: true
|
||||
})
|
||||
} finally {
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
server.close((error) => (error ? reject(error) : resolve()))
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
test('canImportHermesCli returns false when path is falsy', async () => {
|
||||
assert.equal(await canImportHermesCli(''), false)
|
||||
assert.equal(await canImportHermesCli(null), false)
|
||||
|
||||
Reference in New Issue
Block a user