fix tests

This commit is contained in:
Bilal Godil 2026-02-02 13:57:57 -08:00
parent e5cbc1af54
commit ba1df26792
3 changed files with 23 additions and 9 deletions

View File

@ -17,6 +17,8 @@ import {
waitForTable
} from './external-db-sync-utils';
const COMPLEX_SEQUENCE_TIMEOUT = TEST_TIMEOUT * 2 + 30_000;
describe.sequential('External DB Sync - Advanced Tests', () => {
let dbManager: TestDbManager;
@ -545,7 +547,7 @@ describe.sequential('External DB Sync - Advanced Tests', () => {
const user2Row = res.rows.find(r => r.primary_email === 'seq2@example.com');
expect(user2Row.display_name).toBe('User 2 Updated');
}, TEST_TIMEOUT);
}, COMPLEX_SEQUENCE_TIMEOUT);
/**
* What it does:

View File

@ -10,6 +10,7 @@ import {
TEST_TIMEOUT,
TestDbManager,
createProjectWithExternalDb,
forceExternalDbSync,
waitForCondition,
waitForSyncedDeletion,
waitForTable
@ -271,7 +272,7 @@ describe.sequential('External DB Sync - Race Condition Tests', () => {
* - Tests that sync captures all committed changes eventually
*/
describe('Race conditions with overlapping transactions', () => {
const LOCAL_TEST_TIMEOUT = 120_000; // Must be > 70s sleep + setup time
const LOCAL_TEST_TIMEOUT = TEST_TIMEOUT + 60_000; // Must cover baseline sync + fallback sleep on slow CI
async function setupExternalDbWithBaseline(dbName: string) {
const connectionString = await dbManager.createDatabase(dbName);
@ -365,7 +366,10 @@ describe.sequential('External DB Sync - Race Condition Tests', () => {
[user.userId],
);
await sleep(70000);
const forced = await forceExternalDbSync();
if (!forced) {
await sleep(70000);
}
const during = await externalClient.query<{
display_name: string | null,

View File

@ -161,18 +161,16 @@ export async function waitForCondition(
throw new Error(`Timeout waiting for ${description} after ${timeoutMs}ms`);
}
async function maybeForceExternalDbSync() {
if (!SHOULD_FORCE_EXTERNAL_DB_SYNC) return;
const now = performance.now();
if (now - lastForcedSyncAt < FORCE_SYNC_INTERVAL_MS) return;
lastForcedSyncAt = now;
export async function forceExternalDbSync(): Promise<boolean> {
if (!SHOULD_FORCE_EXTERNAL_DB_SYNC) return false;
const cronSecret = process.env.CRON_SECRET;
if (!cronSecret) {
throw new Error('CRON_SECRET is required when STACK_FORCE_EXTERNAL_DB_SYNC=true');
}
lastForcedSyncAt = performance.now();
await niceFetch(new URL('/api/latest/internal/external-db-sync/sequencer', STACK_BACKEND_BASE_URL), {
query: {
maxDurationMs: String(FORCE_SYNC_MAX_DURATION_MS),
@ -191,6 +189,16 @@ async function maybeForceExternalDbSync() {
Authorization: `Bearer ${cronSecret}`,
},
});
return true;
}
async function maybeForceExternalDbSync() {
if (!SHOULD_FORCE_EXTERNAL_DB_SYNC) return;
const now = performance.now();
if (now - lastForcedSyncAt < FORCE_SYNC_INTERVAL_MS) return;
await forceExternalDbSync();
}
/**