diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /dom/cache/test/mochitest/test_cache_tons_of_fd.html | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/cache/test/mochitest/test_cache_tons_of_fd.html')
-rw-r--r-- | dom/cache/test/mochitest/test_cache_tons_of_fd.html | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/dom/cache/test/mochitest/test_cache_tons_of_fd.html b/dom/cache/test/mochitest/test_cache_tons_of_fd.html new file mode 100644 index 0000000000..c370201e50 --- /dev/null +++ b/dom/cache/test/mochitest/test_cache_tons_of_fd.html @@ -0,0 +1,111 @@ +<!-- Any copyright is dedicated to the Public Domain. + - http://creativecommons.org/publicdomain/zero/1.0/ --> +<!DOCTYPE HTML> +<html> +<head> + <title>Test cache to create tons of fds</title> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> + <script type="text/javascript" src="driver.js"></script> +</head> +<body> +<script class="testbody" type="text/javascript"> + function setupTestIframe() { + return new Promise(function(resolve) { + var iframe = document.createElement("iframe"); + iframe.src = "empty.html"; + iframe.onload = function() { + window.caches = iframe.contentWindow.caches; + resolve(); + }; + document.body.appendChild(iframe); + }); +} + +function clearStorage() { + return new Promise(function(resolve, reject) { + var qms = SpecialPowers.Services.qms; + var principal = SpecialPowers.wrap(document).nodePrincipal; + var request = qms.clearStoragesForPrincipal(principal); + var cb = SpecialPowers.wrapCallback(resolve); + request.callback = cb; + }); +} + +async function testCreateTonsOfFD() { + const number_of_fd = 5120; + const name = "cacheTonsOfFD"; + const url = "foo.com"; + const body = "This is a body"; + + info("Stage A: Cached a Request/Response pairs"); + let cache = await caches.open(name); + let request = new Request(url); + let response = new Response(body); + await cache.put(request, response); + + info("Stage B: Read the cached response mutliple times"); + let promise_array = []; + for (let i = 0; i < number_of_fd; ++i) { + let promise = cache.match(request); + promise_array.push(promise); + } + let cached_response_array = []; + try { + cached_response_array = await Promise.all(promise_array); + } catch (e) { + throw new Error("Fail to open tons of files with error: " + e); + } + + if (cached_response_array.length != number_of_fd) { + throw new Error("Fail to cache.match the cached responses"); + } + + info("Stage C: Consume the cached body"); + for (let i = 0; i < number_of_fd; ++i) { + if (!cached_response_array[i]) { + // Reduce the checking message. + throw new Error("The cached response doesn't exist"); + } + + let bodyText = ""; + try { + bodyText = await cached_response_array[i].text(); + } catch (e) { + throw new Error("Fail to consume the cached response's body with error: " + e); + } + + if (bodyText != body) { + // Reduce the checking message. + throw new Error("The cached body doeen't be the same as original one"); + } + } + + ok(true, "Doesn't crash or timeout"); + return Promise.resolve(); +} + +SimpleTest.waitForExplicitFinish(); +SpecialPowers.pushPrefEnv({ + "set": [["dom.caches.enabled", true], + ["dom.caches.testing.enabled", true], + ["dom.quotaManager.testing", true]], +}, async function() { + await setupTestIframe(); + + info("Stage 1: Clean storage."); + await clearStorage(); + + info("Stage 2: Verify open lots of files at the same time doesn't crash " + + "the browser"); + try { + await testCreateTonsOfFD(); + } catch (e) { + ok(false, e); + } + + await SimpleTest.finish(); +}); +</script> +</body> +</html> |