|
4 | 4 |
|
5 | 5 | import { SQLiteCloudError, SQLiteCloudConnection } from '../src/index' |
6 | 6 | import { Database, ErrorCallback } from '../src/database' |
7 | | -import { CHINOOK_DATABASE_URL, TESTING_DATABASE_URL } from './protocol.test' |
| 7 | +import { CHINOOK_DATABASE_URL, TESTING_DATABASE_URL, LONG_TIMEOUT } from './protocol.test' |
| 8 | + |
8 | 9 | import * as dotenv from 'dotenv' |
9 | 10 | dotenv.config() |
10 | 11 |
|
11 | | -const LONG_TIMEOUT = 30 * 1000 |
12 | | - |
13 | 12 | /* eslint-disable @typescript-eslint/no-unsafe-member-access */ |
14 | 13 |
|
15 | 14 | import { join } from 'path' |
@@ -266,12 +265,27 @@ describe('Database', () => { |
266 | 265 | const results = await database.sql`SELECT * FROM people WHERE name = 'Eva' OR name = ${name} OR age < 30` |
267 | 266 | expect(results).toHaveLength(11) |
268 | 267 | }) |
| 268 | + }) |
269 | 269 |
|
270 | | - it('template string with multiple queries', async () => { |
271 | | - for (let i = 0; i < 2; i++) { |
272 | | - const results = await database.sql`SELECT * FROM people ORDER BY RANDOM() LIMIT 12` |
273 | | - expect(results).toHaveLength(12) |
274 | | - } |
275 | | - }) |
| 270 | + describe('stress testing', () => { |
| 271 | + it( |
| 272 | + '50x sql async with random selects', |
| 273 | + async () => { |
| 274 | + const numQueries = 50 |
| 275 | + const startTime = Date.now() |
| 276 | + |
| 277 | + const table = 'people' |
| 278 | + for (let i = 0; i < numQueries; i++) { |
| 279 | + const results = await database.sql`SELECT * FROM ${table} ORDER BY RANDOM() LIMIT 12` |
| 280 | + expect(results).toHaveLength(12) |
| 281 | + expect(Object.keys(results[0])).toEqual(['id', 'name', 'age', 'hobby']) |
| 282 | + } |
| 283 | + |
| 284 | + const queryMs = (Date.now() - startTime) / numQueries |
| 285 | + console.log(`${numQueries}x template selects, ${queryMs.toFixed(0)}ms per query`) |
| 286 | + expect(queryMs).toBeLessThan(500) |
| 287 | + }, |
| 288 | + LONG_TIMEOUT |
| 289 | + ) |
276 | 290 | }) |
277 | 291 | }) |
0 commit comments