Files
orca/src/shared/remote-runtime-request-websocket.test.ts
T

43 lines
1.4 KiB
TypeScript

import type { EventEmitter } from 'node:events'
import { describe, expect, it, vi } from 'vitest'
import { generateKeyPair, publicKeyToBase64 } from './e2ee-crypto'
import { openRemoteRuntimeWebSocket } from './remote-runtime-request-websocket'
describe('openRemoteRuntimeWebSocket', () => {
it('detaches Orca callback listeners when cleaned up', () => {
const keyPair = generateKeyPair()
const opened = openRemoteRuntimeWebSocket(
{
v: 2,
endpoint: 'ws://127.0.0.1:1',
deviceToken: 'device-token',
publicKeyB64: publicKeyToBase64(keyPair.publicKey)
},
{
onClose: vi.fn(),
onError: vi.fn(),
onTextFrame: vi.fn()
}
)
if (!opened.ok) {
throw opened.error
}
const socketEvents = opened.socket.ws as unknown as EventEmitter
expect(socketEvents.listenerCount('open')).toBe(1)
expect(socketEvents.listenerCount('close')).toBe(1)
expect(socketEvents.listenerCount('message')).toBe(1)
expect(socketEvents.listenerCount('error')).toBe(1)
opened.socket.cleanup()
opened.socket.cleanup()
expect(socketEvents.listenerCount('open')).toBe(0)
expect(socketEvents.listenerCount('close')).toBe(0)
expect(socketEvents.listenerCount('message')).toBe(0)
expect(socketEvents.listenerCount('error')).toBe(1)
expect(() => socketEvents.emit('error', new Error('late socket error'))).not.toThrow()
opened.socket.ws.terminate()
})
})