diff --git a/integration-tests/js-compute/fixtures/app/src/cache-simple.js b/integration-tests/js-compute/fixtures/app/src/cache-simple.js index caa21af10a..c59f7d876f 100644 --- a/integration-tests/js-compute/fixtures/app/src/cache-simple.js +++ b/integration-tests/js-compute/fixtures/app/src/cache-simple.js @@ -2210,4 +2210,56 @@ async function simpleCacheEntryInterfaceTests() { } }, ); + routes.set( + '/simple-cache/getOrSet/transaction-race', + async () => { + const key = String(Math.random()); + let resolve1; + const signal1 = new Promise((resolve) => { + resolve1 = resolve; + }); + let resolve2; + const signal2 = new Promise((resolve) => { + resolve2 = resolve; + }); + let resolve3; + const signal3 = new Promise((resolve) => { + resolve3 = resolve; + }); + let resolve4; + const signal4 = new Promise((resolve) => { + resolve4 = resolve; + }); + + + const set1 = (async () => { + try { + await SimpleCache.getOrSet(key, async () => { + resolve1(true); + await signal2; + throw "uh oh"; + }); + } catch { + resolve3(true); + await signal4; + } + })(); + await signal1; + const set2 = SimpleCache.getOrSet(key, async () => { + return { + value: key, + ttl: 10, + }; + }); + await new Promise((resolve) => { + setTimeout(resolve, 10000); + }); + resolve2(true); + await signal3; + await set2; + resolve4(true); + await signal4; + await set1; + } + ); } diff --git a/integration-tests/js-compute/fixtures/app/tests.json b/integration-tests/js-compute/fixtures/app/tests.json index 6a0c8117fb..4fb8e10fbd 100644 --- a/integration-tests/js-compute/fixtures/app/tests.json +++ b/integration-tests/js-compute/fixtures/app/tests.json @@ -452,6 +452,9 @@ "flake": true, "environments": ["compute"] }, + "GET /simple-cache/getOrSet/transaction-race": { + "flake": true + }, "GET /client/requestId": {}, "GET /client/tlsJA3MD5": {}, "GET /client/tlsClientHello": {},