fix(ext/cache): cache.put overwrites previous call (#18649)

This commit is contained in:
Satya Rohith 2023-04-12 11:25:19 +05:30 committed by GitHub
parent 65b0d2316d
commit 18e0ee368c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 85 additions and 22 deletions

View file

@ -127,3 +127,57 @@ fn cache_matching_package_json_dep_should_not_install_all() {
"Initialize @types/node@18.8.2\n",
));
}
// Regression test for https://github.com/denoland/deno/issues/17299
#[test]
fn cache_put_overwrite() {
let test_context = TestContextBuilder::new().use_temp_cwd().build();
let temp_dir = test_context.temp_dir();
let part_one = r#"
const req = new Request('http://localhost/abc');
const res1 = new Response('res1');
const res2 = new Response('res2');
const cache = await caches.open('test');
await cache.put(req, res1);
await cache.put(req, res2);
const res = await cache.match(req).then((res) => res?.text());
console.log(res);
"#;
let part_two = r#"
const req = new Request("http://localhost/abc");
const res1 = new Response("res1");
const res2 = new Response("res2");
const cache = await caches.open("test");
// Swap the order of put() calls.
await cache.put(req, res2);
await cache.put(req, res1);
const res = await cache.match(req).then((res) => res?.text());
console.log(res);
"#;
temp_dir.write("cache_put.js", part_one);
let run_command =
test_context.new_command().args_vec(["run", "cache_put.js"]);
let output = run_command.run();
output.assert_matches_text("res2\n");
output.assert_exit_code(0);
// The wait will surface the bug as we check last written time
// when we overwrite a response.
std::thread::sleep(std::time::Duration::from_secs(1));
temp_dir.write("cache_put.js", part_two);
let output = run_command.run();
output.assert_matches_text("res1\n");
output.assert_exit_code(0);
}