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) })