Files
orca/src/shared/remote-runtime/control/remote-runtime-shared-control-reconnect.test.ts
T

37 lines
1.2 KiB
TypeScript

import { afterEach, describe, expect, it, vi } from 'vitest'
import { SharedControlReconnectScheduler } from './remote-runtime-shared-control-reconnect'
afterEach(() => {
vi.useRealTimers()
})
describe('SharedControlReconnectScheduler', () => {
it('advances one pending backoff without leaving its timer armed', async () => {
vi.useFakeTimers()
const scheduler = new SharedControlReconnectScheduler()
const open = vi.fn()
scheduler.schedule({ intentionallyClosed: false, delaysMs: [30_000], open })
expect(scheduler.retryNow()).toBe(true)
expect(scheduler.retryNow()).toBe(false)
expect(open).toHaveBeenCalledTimes(1)
await vi.advanceTimersByTimeAsync(30_000)
expect(open).toHaveBeenCalledTimes(1)
})
it('does not advance cleared or intentionally closed work', () => {
vi.useFakeTimers()
const scheduler = new SharedControlReconnectScheduler()
const open = vi.fn()
scheduler.schedule({ intentionallyClosed: false, delaysMs: [30_000], open })
scheduler.clear()
expect(scheduler.retryNow()).toBe(false)
scheduler.schedule({ intentionallyClosed: true, delaysMs: [30_000], open })
expect(scheduler.retryNow()).toBe(false)
expect(open).not.toHaveBeenCalled()
})
})