Files
2026-07-13 12:10:05 +08:00

62 lines
1.7 KiB
TypeScript

import retry from 'async-retry';
import { drizzle } from 'drizzle-orm/singlestore';
import type { SingleStoreDriverDatabase } from 'drizzle-orm/singlestore';
import * as mysql2 from 'mysql2/promise';
import { afterAll, beforeAll, beforeEach } from 'vitest';
import { TestCache, TestGlobalCache, tests as cacheTests } from './singlestore-cache';
import { createDockerDB, tests } from './singlestore-common';
const ENABLE_LOGGING = false;
let db: SingleStoreDriverDatabase;
let dbGlobalCached: SingleStoreDriverDatabase;
let cachedDb: SingleStoreDriverDatabase;
let client: mysql2.Connection;
beforeAll(async () => {
let connectionString;
if (process.env['SINGLESTORE_CONNECTION_STRING']) {
connectionString = process.env['SINGLESTORE_CONNECTION_STRING'];
} else {
const { connectionString: conStr } = await createDockerDB();
connectionString = conStr;
}
client = await retry(async () => {
client = await mysql2.createConnection({ uri: connectionString, supportBigNumbers: true });
await client.connect();
return client;
}, {
retries: 20,
factor: 1,
minTimeout: 250,
maxTimeout: 250,
randomize: false,
onRetry() {
client?.end();
},
});
await client.query(`CREATE DATABASE IF NOT EXISTS drizzle;`);
await client.changeUser({ database: 'drizzle' });
db = drizzle(client, { logger: ENABLE_LOGGING });
cachedDb = drizzle(client, { logger: ENABLE_LOGGING, cache: new TestCache() });
dbGlobalCached = drizzle(client, { logger: ENABLE_LOGGING, cache: new TestGlobalCache() });
});
afterAll(async () => {
await client?.end();
});
beforeEach((ctx) => {
ctx.singlestore = {
db,
};
ctx.cachedSingleStore = {
db: cachedDb,
dbGlobalCached,
};
});
cacheTests();
tests();