fix(test): убрать keyPrefix и добавить FLUSHDB — ioredis keyPrefix не применялся к XGROUP CREATE что вызывало NOGROUP между Parser (писатель) и ParserClient (читатель)

This commit is contained in:
coopops
2026-04-22 05:44:37 +00:00
parent aac54b4e5e
commit 4b6fc95eca
@@ -38,18 +38,18 @@ let parser: Parser
let client: ParserClient
let chain: ChainHelper
let chainId: string
// Общий keyPrefix для Parser и ParserClient — иначе читают/пишут разные Redis-ключи.
// Уникальный timestamp за тест даёт чистый namespace при повторных запусках.
const REDIS_PREFIX = `test-${Date.now()}:`
/** Запускает parser.start() в фоне, возвращает chainId. */
async function startParser(): Promise<string> {
let resolveChainId!: (id: string) => void
const chainIdPromise = new Promise<string>(resolve => { resolveChainId = resolve })
// NB: keyPrefix НЕ используется — в CI Redis свежий, коллизий быть не может.
// ioredis некорректно применяет keyPrefix к XGROUP CREATE, поэтому Parser и
// ParserClient видели разные ключи и получали NOGROUP ошибку.
parser = new Parser({
ship: { url: SHIP_URL, timeoutMs: 15_000 },
redis: { url: REDIS_URL, keyPrefix: REDIS_PREFIX },
redis: { url: REDIS_URL },
noSignalHandlers: true,
xtrim: { enabled: false },
reconnect: { maxAttempts: 3, backoffSeconds: [1, 2, 5] },
@@ -73,6 +73,12 @@ async function startParser(): Promise<string> {
}
beforeAll(async () => {
// === Шаг 0: FLUSHDB — чистая Redis-среда (на случай перезапуска тестов) ===
const cleanRedis = new (await import('ioredis')).Redis(REDIS_URL, { lazyConnect: true })
await cleanRedis.connect()
await cleanRedis.flushdb()
await cleanRedis.quit()
// === Шаг 1: Ждём готовности Chain API ===
await waitForChain(CHAIN_URL, 30_000)
@@ -124,7 +130,7 @@ beforeAll(async () => {
subscriptionId: 'integration-issue-test',
filters: [{ kind: 'action', account: 'eosio.token', name: 'issue' }],
startFrom: 'last_known',
redis: { url: REDIS_URL, keyPrefix: REDIS_PREFIX },
redis: { url: REDIS_URL },
chain: { id: chainId },
acquireLockTimeoutMs: 10_000,
noSignalHandlers: true,