62 lines
1.7 KiB
TypeScript
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();
|