mirror of
https://github.com/koala73/worldmonitor.git
synced 2026-04-26 01:24:59 +02:00
* fix(seeds): skip transient redis lock timeouts * docs(seeds): clarify transient redis error matching * test: expand transient redis error coverage Add tests for ECONNRESET, DNS failure (EAI_AGAIN), ETIMEDOUT, and negative cases (HTTP 403, payload size) to confirm isTransientRedisError only matches network-level failures, not app-level Redis errors.
51 lines
1.7 KiB
JavaScript
51 lines
1.7 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import { describe, it } from 'node:test';
|
|
|
|
import { isTransientRedisError } from '../scripts/_seed-utils.mjs';
|
|
|
|
describe('seed utils redis error handling', () => {
|
|
it('treats undici connect timeout as transient', () => {
|
|
const err = new TypeError('fetch failed');
|
|
err.cause = new Error('Connect Timeout Error');
|
|
err.cause.code = 'UND_ERR_CONNECT_TIMEOUT';
|
|
|
|
assert.equal(isTransientRedisError(err), true);
|
|
});
|
|
|
|
it('treats ECONNRESET as transient', () => {
|
|
const err = new Error('fetch failed');
|
|
err.cause = new Error('read ECONNRESET');
|
|
err.cause.code = 'ECONNRESET';
|
|
assert.equal(isTransientRedisError(err), true);
|
|
});
|
|
|
|
it('treats DNS lookup failure as transient', () => {
|
|
const err = new Error('fetch failed');
|
|
err.cause = new Error('getaddrinfo EAI_AGAIN redis-host');
|
|
err.cause.code = 'EAI_AGAIN';
|
|
assert.equal(isTransientRedisError(err), true);
|
|
});
|
|
|
|
it('treats ETIMEDOUT as transient', () => {
|
|
const err = new Error('fetch failed');
|
|
err.cause = new Error('connect ETIMEDOUT');
|
|
err.cause.code = 'ETIMEDOUT';
|
|
assert.equal(isTransientRedisError(err), true);
|
|
});
|
|
|
|
it('does not treat Redis HTTP 403 as transient', () => {
|
|
const err = new Error('Redis command failed: HTTP 403');
|
|
assert.equal(isTransientRedisError(err), false);
|
|
});
|
|
|
|
it('does not treat generic validation errors as transient', () => {
|
|
const err = new Error('validation failed');
|
|
assert.equal(isTransientRedisError(err), false);
|
|
});
|
|
|
|
it('does not treat payload size errors as transient', () => {
|
|
const err = new Error('Payload too large: 6.2MB > 5MB limit');
|
|
assert.equal(isTransientRedisError(err), false);
|
|
});
|
|
});
|