Files

54 lines
1.8 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
clampPoolLimits,
parsePoolLimits,
POOL_LIMITS_BOUNDS,
POOL_LIMITS_DEFAULTS,
POOL_LIMITS_MIN
} from './pool-limits'
describe('parsePoolLimits', () => {
it('falls back to defaults for null/empty/corrupt input', () => {
expect(parsePoolLimits(null)).toEqual(POOL_LIMITS_DEFAULTS)
expect(parsePoolLimits(undefined)).toEqual(POOL_LIMITS_DEFAULTS)
expect(parsePoolLimits('')).toEqual(POOL_LIMITS_DEFAULTS)
expect(parsePoolLimits('not json {')).toEqual(POOL_LIMITS_DEFAULTS)
})
it('parses a valid persisted blob', () => {
expect(parsePoolLimits(JSON.stringify({ maxBackends: 11, idleMs: 7_200_000 }))).toEqual({
maxBackends: 11,
idleMs: 7_200_000
})
})
it('fills missing keys from defaults', () => {
expect(parsePoolLimits(JSON.stringify({ maxBackends: 5 }))).toEqual({ ...POOL_LIMITS_DEFAULTS, maxBackends: 5 })
expect(parsePoolLimits('{}')).toEqual(POOL_LIMITS_DEFAULTS)
})
it('ignores non-numeric junk instead of NaN-poisoning the pool', () => {
expect(parsePoolLimits(JSON.stringify({ maxBackends: 'lots', idleMs: null }))).toEqual(POOL_LIMITS_DEFAULTS)
})
})
describe('clampPoolLimits', () => {
it('clamps below the floors', () => {
expect(clampPoolLimits({ maxBackends: 0 }).maxBackends).toBe(POOL_LIMITS_MIN.maxBackends)
expect(clampPoolLimits({ idleMs: 100 }).idleMs).toBe(POOL_LIMITS_MIN.idleMs)
})
it('clamps absurdly high backend counts', () => {
expect(clampPoolLimits({ maxBackends: 10_000 }).maxBackends).toBeLessThanOrEqual(64)
})
it('clamps idleMs to the shared ceiling (7 days)', () => {
expect(clampPoolLimits({ idleMs: 999_000_000 }).idleMs).toBe(POOL_LIMITS_BOUNDS.idleMsMax)
})
it('floors fractional values', () => {
expect(clampPoolLimits({ maxBackends: 2.9 }).maxBackends).toBe(2)
})
})