diff --git a/__tests__/integration/dynalite.ts b/__tests__/integration/dynalite.ts index bc63b17..5709c73 100644 --- a/__tests__/integration/dynalite.ts +++ b/__tests__/integration/dynalite.ts @@ -1,5 +1,7 @@ import { createServer } from "node:net"; import type { AddressInfo } from "node:net"; +import { DescribeTableCommand } from "@aws-sdk/client-dynamodb"; +import type { DynamoDBDocument } from "@aws-sdk/lib-dynamodb"; import dynalite from "dynalite"; export interface DynaliteOptions { @@ -57,6 +59,22 @@ export async function startDynalite(options: DynaliteOptions = {}): Promise { + const deadline = Date.now() + timeoutMs; + while (Date.now() < deadline) { + const result = await doc.send(new DescribeTableCommand({ TableName: tableName })); + if (result.Table?.TableStatus === "ACTIVE") { + return; + } + await new Promise(resolve => setTimeout(resolve, 50)); + } + throw new Error(`Table ${tableName} did not become ACTIVE within ${timeoutMs}ms`); +} + async function pickFreePort(): Promise { return new Promise((resolve, reject) => { const probe = createServer(); diff --git a/__tests__/integration/pipeline.bulkAndRetry.test.ts b/__tests__/integration/pipeline.bulkAndRetry.test.ts index 34b65a9..7353618 100644 --- a/__tests__/integration/pipeline.bulkAndRetry.test.ts +++ b/__tests__/integration/pipeline.bulkAndRetry.test.ts @@ -8,7 +8,7 @@ import { DdbScanner } from "~/features/DdbScanner/index.js"; import { DdbProcessor } from "~/features/DdbProcessor/index.js"; import { TargetDynamoDbClient } from "~/services/DynamoDbClient/abstractions/DynamoDbClient.js"; import type { BaseRecord } from "~/domain/transform/types/records.js"; -import { startDynalite, type DynaliteInstance } from "./dynalite.ts"; +import { startDynalite, waitForTableActive, type DynaliteInstance } from "./dynalite.ts"; import { createDdbIntegrationContainer } from "./integrationContainer.ts"; const FAKE_CREDS = { accessKeyId: "test", secretAccessKey: "test" }; @@ -154,6 +154,8 @@ describe("pipeline — bulk + retry against dynalite", () => { }; await createDdbTable(doc, pair.source); await createDdbTable(doc, pair.target); + await waitForTableActive(doc, pair.source); + await waitForTableActive(doc, pair.target); return pair; }