mirror of
https://github.com/stack-auth/stack.git
synced 2026-06-13 21:01:21 +08:00
fix tests
This commit is contained in:
parent
e5cbc1af54
commit
ba1df26792
@ -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:
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Loading…
Reference in New Issue
Block a user