37eabcbb2e
task-progress-config.ts 新增 getTaskPollBackoffMaxMs()(默认 10000, 由 5000 提升)与 getTaskPollBackoffFactor()(默认 2,<1 钳制为 1); configureTaskPolling 支持 backoffFactor;getTaskPollBackoffMs 改用 base × factor^attempt 计算。 既有 task-086 边界测试中封顶 5000 的快照随新默认更新为 10000。 新增 8 个测试:max/factor 默认、可覆盖、非正钳制、factor 下限、 配置隔离、默认值快照。
73 lines
2.5 KiB
TypeScript
73 lines
2.5 KiB
TypeScript
import { test } from 'node:test'
|
|
import assert from 'node:assert/strict'
|
|
import {
|
|
TASK_POLL_BACKOFF_MAX_MS,
|
|
TASK_POLL_BACKOFF_FACTOR,
|
|
getTaskPollBackoffMaxMs,
|
|
getTaskPollBackoffFactor,
|
|
configureTaskPolling,
|
|
resetTaskPollingConfig,
|
|
} from '../src/shared/task-progress-config.ts'
|
|
|
|
test('test_backoff_max_default', () => {
|
|
resetTaskPollingConfig()
|
|
assert.equal(getTaskPollBackoffMaxMs(), 10000)
|
|
assert.equal(getTaskPollBackoffMaxMs(), TASK_POLL_BACKOFF_MAX_MS)
|
|
})
|
|
|
|
test('test_backoff_factor_default', () => {
|
|
resetTaskPollingConfig()
|
|
assert.equal(getTaskPollBackoffFactor(), 2)
|
|
assert.equal(getTaskPollBackoffFactor(), TASK_POLL_BACKOFF_FACTOR)
|
|
})
|
|
|
|
test('test_backoff_max_override', () => {
|
|
resetTaskPollingConfig()
|
|
configureTaskPolling({ backoffMaxMs: 8000 })
|
|
assert.equal(getTaskPollBackoffMaxMs(), 8000)
|
|
resetTaskPollingConfig()
|
|
assert.equal(getTaskPollBackoffMaxMs(), 10000, 'reset 后恢复默认')
|
|
})
|
|
|
|
test('test_backoff_max_positive', () => {
|
|
resetTaskPollingConfig()
|
|
assert.throws(() => configureTaskPolling({ backoffMaxMs: 0 }), /退避上限必须为正数/)
|
|
assert.throws(() => configureTaskPolling({ backoffMaxMs: -100 }), /退避上限必须为正数/)
|
|
// 拒绝后 getter 仍返回正值,非正配置不可观察
|
|
assert.ok(getTaskPollBackoffMaxMs() > 0)
|
|
assert.equal(getTaskPollBackoffMaxMs(), TASK_POLL_BACKOFF_MAX_MS)
|
|
})
|
|
|
|
test('test_backoff_factor_min_one', () => {
|
|
resetTaskPollingConfig()
|
|
// factor <1 钳制为 1(不抛错)
|
|
configureTaskPolling({ backoffFactor: 0.5 })
|
|
assert.equal(getTaskPollBackoffFactor(), 1)
|
|
configureTaskPolling({ backoffFactor: 0 })
|
|
assert.equal(getTaskPollBackoffFactor(), 1)
|
|
resetTaskPollingConfig()
|
|
assert.equal(getTaskPollBackoffFactor(), 2)
|
|
})
|
|
|
|
test('test_backoff_config_isolated', () => {
|
|
resetTaskPollingConfig()
|
|
configureTaskPolling({ backoffMaxMs: 7000, backoffFactor: 3 })
|
|
assert.equal(getTaskPollBackoffMaxMs(), 7000)
|
|
assert.equal(getTaskPollBackoffFactor(), 3)
|
|
resetTaskPollingConfig()
|
|
assert.equal(getTaskPollBackoffMaxMs(), 10000, '不串到其他用例')
|
|
assert.equal(getTaskPollBackoffFactor(), 2)
|
|
})
|
|
|
|
test('test_backoff_max_freeze', () => {
|
|
resetTaskPollingConfig()
|
|
assert.equal(TASK_POLL_BACKOFF_MAX_MS, 10000, '默认值快照')
|
|
assert.equal(getTaskPollBackoffMaxMs(), TASK_POLL_BACKOFF_MAX_MS)
|
|
})
|
|
|
|
test('test_backoff_factor_freeze', () => {
|
|
resetTaskPollingConfig()
|
|
assert.equal(TASK_POLL_BACKOFF_FACTOR, 2, 'factor 快照')
|
|
assert.equal(getTaskPollBackoffFactor(), TASK_POLL_BACKOFF_FACTOR)
|
|
})
|