/**
* Integration Test Suite
* Auto-migrated from test-business-logic.mjs
*/
import { promises as fs } from "node:fs";
import { basename, join } from "node:path";
import { CodeIndexer } from "../../../build/code/indexer.js";
import { getIndexerConfig, TEST_DIR } from "../config.mjs";
import { assert, createTestFile, hashContent, log, randomUUID, resources, section, skip, sleep } from "../helpers.mjs";
export async function testConcurrentSafety(qdrant, embeddings) {
section("12. Concurrent Operations");
const concTestDir = join(TEST_DIR, "conc_test");
await fs.mkdir(concTestDir, { recursive: true });
for (let i = 0; i < 5; i++) {
await createTestFile(concTestDir, `file${i}.ts`, `export const FILE_${i} = ${i};`);
}
const indexer = new CodeIndexer(qdrant, embeddings, getIndexerConfig());
// Index first
resources.trackIndexedPath(concTestDir);
await indexer.indexCodebase(concTestDir, { forceReindex: true });
// Concurrent searches should not interfere
const searches = await Promise.all([
indexer.searchCode(concTestDir, "FILE_0"),
indexer.searchCode(concTestDir, "FILE_1"),
indexer.searchCode(concTestDir, "FILE_2"),
indexer.searchCode(concTestDir, "FILE_3"),
indexer.searchCode(concTestDir, "FILE_4"),
]);
assert(
searches.every((s) => s.length > 0),
`All concurrent searches returned results`,
);
// Concurrent status checks
const statuses = await Promise.all([
indexer.getIndexStatus(concTestDir),
indexer.getIndexStatus(concTestDir),
indexer.getIndexStatus(concTestDir),
]);
assert(
statuses.every((s) => s.status === "indexed" || s.isIndexed),
"Concurrent status checks consistent",
);
}