fix(test): убрать keyPrefix и добавить FLUSHDB — ioredis keyPrefix не применялся к XGROUP CREATE что вызывало NOGROUP между Parser (писатель) и ParserClient (читатель)
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user