fix: more work

This commit is contained in:
Nolan Lawson 2024-03-10 15:16:16 -07:00
parent 5748c97586
commit 49ce9f739e
3 changed files with 48 additions and 30 deletions

View File

@ -11,8 +11,11 @@ export async function checkForUpdates (db, dataSource, signal) {
}
if (!eTag) { // work around lack of ETag/Access-Control-Expose-Headers
console.info('A get etag, aborted=', signal.aborted)
const eTagAndData = await getETagAndData(dataSource)
console.info('A got etag, aborted=', signal.aborted)
if (signal.aborted) {
console.info('A returning early')
return
}
@ -35,8 +38,11 @@ export async function checkForUpdates (db, dataSource, signal) {
} else {
console.log('Database update available')
if (!emojiData) {
console.info('B get etag, aborted=', signal.aborted)
const eTagAndData = await getETagAndData(dataSource)
console.info('B got etag, aborted=', signal.aborted)
if (signal.aborted) {
console.info('B returning early')
return
}

View File

@ -4,7 +4,7 @@ import {
ALL_EMOJI_NO_ETAG,
basicAfterEach,
basicBeforeEach,
tick
tick, truncatedFrEmoji
} from '../shared.js'
import Database from '../../../src/database/Database.js'
@ -12,35 +12,47 @@ describe('database timing tests', () => {
beforeEach(basicBeforeEach)
afterEach(basicAfterEach)
const scenarios = [
{
testName: 'basic',
dataSource: ALL_EMOJI
},
{
testName: 'misconfigured etag server',
dataSource: ALL_EMOJI_MISCONFIGURED_ETAG
},
{
testName: 'missing etag server',
dataSource: ALL_EMOJI_NO_ETAG
}
]
scenarios.forEach(({ testName, dataSource }) => {
describe(testName, () => {
new Array(5).fill().forEach((_, count) => {
test(`throws no errors when DB is canceled after ${count} ticks`, async () => {
// first load
const db = new Database({ dataSource })
await tick(count)
await db.close()
await tick(40)
const dataChanges = [false, true]
dataChanges.forEach(dataChanged => {
describe(`dataChanged=${dataChanged}`, () => {
const scenarios = [
{
testName: 'basic',
dataSource: ALL_EMOJI
},
{
testName: 'misconfigured etag server',
dataSource: ALL_EMOJI_MISCONFIGURED_ETAG
},
{
testName: 'missing etag server',
dataSource: ALL_EMOJI_NO_ETAG
}
]
scenarios.forEach(({ testName, dataSource }) => {
describe(testName, () => {
new Array(10).fill().forEach((_, count) => {
test(`throws no errors when DB is canceled after ${count} ticks`, async () => {
// first load
const db = new Database({ dataSource })
await tick(count)
await db.close()
await tick(40)
// second load
const db2 = new Database({ dataSource })
await tick(count)
await db2.close()
await tick(40)
if (dataChanged) {
// second time - update, data is v2
fetch.reset()
fetch.get(dataSource, () => new Response(JSON.stringify(truncatedFrEmoji), { headers: { ETag: 'W/yyy' } }), { delay: 1 })
fetch.head(dataSource, () => new Response(null, { headers: { ETag: 'W/yyy' } }), { delay: 1 })
}
// second load
const db2 = new Database({ dataSource })
await tick(count)
await db2.close()
await tick(40)
})
})
})
})
})

View File

@ -24,7 +24,7 @@ export function truncateEmoji (allEmoji) {
}
export const truncatedEmoji = truncateEmoji(allEmoji)
const truncatedFrEmoji = truncateEmoji(frEmoji)
export const truncatedFrEmoji = truncateEmoji(frEmoji)
const emojibaseV5Emoji = truncateEmoji(allEmojibaseV5Emoji)
export const ALL_EMOJI = 'http://localhost/emoji.json'