// fake `getJSON` function let getJSON = async (url) => url // /*/ // ⚡ export const tests = [] const t = (f) => tests.push(f) t(async ({ eq, ctx }) => { // queryServers with main server be fastest ctx.setTimings({ pouet_backup: 2 }) return eq(await queryServers('pouet', ctx.r), `/pouet?q=${ctx.r}`) }) t(async ({ eq, ctx }) => { // queryServers with backup server be fastest ctx.setTimings({ pouet: 2 }) return eq(await queryServers('pouet', ctx.r), `/pouet_backup?q=${ctx.r}`) }) t(async ({ eq, ctx }) => { // gougleSearch fast enough ctx.setTimings({ web_backup: 3, image: 2, video_backup: 4 }) return eq(await gougleSearch(ctx.r), { web: `/web?q=${ctx.r}`, image: `/image_backup?q=${ctx.r}`, video: `/video?q=${ctx.r}`, }) }) t(async ({ eq, ctx }) => { // gougleSearch fast enough, alternate timings ctx.setTimings({ web: 3, image_backup: 1, video: 4 }) return eq(await gougleSearch(ctx.r), { web: `/web_backup?q=${ctx.r}`, image: `/image?q=${ctx.r}`, video: `/video_backup?q=${ctx.r}`, }) }) t(async ({ eq, ctx }) => { // gougleSearch too slow ! ctx.setTimings({ web: 85, web_backup: 99 }) return eq( await gougleSearch(ctx.r).then( () => Promise.reject(Error('Should fail')), (err) => err.message ), 'timeout' ) }) Object.freeze(tests) export const setup = () => ({ r: Math.random().toString(36).slice(2), setTimings: (timings) => (getJSON = (url) => new Promise((s) => setTimeout(s, timings[url.split(/\/([^?]+)?/)[1]] || 0, url) )), })