From 0c1877a82a7472229ce61bc8d68ea3ee88761981 Mon Sep 17 00:00:00 2001 From: jakecastelli Date: Sat, 20 Jul 2024 11:18:43 +0700 Subject: [PATCH] test: add coverage for webstorage quota PR-URL: https://github.com/nodejs/node/pull/53964 Refs: https://github.com/nodejs/node/issues/53871 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Minwoo Jung Reviewed-By: Marco Ippolito --- test/parallel/test-webstorage.js | 38 +++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/test/parallel/test-webstorage.js b/test/parallel/test-webstorage.js index effeb53f4f154a..4da6b67bd2932b 100644 --- a/test/parallel/test-webstorage.js +++ b/test/parallel/test-webstorage.js @@ -4,7 +4,7 @@ const tmpdir = require('../common/tmpdir'); const assert = require('node:assert'); const { join } = require('node:path'); const { readdir } = require('node:fs/promises'); -const { test } = require('node:test'); +const { test, describe } = require('node:test'); const { spawnPromisified } = common; let cnt = 0; @@ -109,3 +109,39 @@ test('localStorage is persisted if it is used', async () => { assert.strictEqual(cp.code, 0); assert.match(cp.stdout, /barbaz/); }); + + +describe('webstorage quota for localStorage and sessionStorage', () => { + const MAX_STORAGE_SIZE = 10 * 1024 * 1024; + + test('localStorage can store and retrieve a max of 10 MB quota', async () => { + const localStorageFile = nextLocalStorage(); + const cp = await spawnPromisified(process.execPath, [ + '--experimental-webstorage', + '--localstorage-file', localStorageFile, + // Each character is 2 bytes + '-pe', ` + localStorage['a'.repeat(${MAX_STORAGE_SIZE} / 2)] = ''; + console.error('filled'); + localStorage.anything = 'should fail'; + `, + ]); + + assert.match(cp.stderr, /filled/); + assert.match(cp.stderr, /QuotaExceededError: Setting the value exceeded the quota/); + }); + + test('sessionStorage can store a max of 10 MB quota', async () => { + const cp = await spawnPromisified(process.execPath, [ + '--experimental-webstorage', + // Each character is 2 bytes + '-pe', `sessionStorage['a'.repeat(${MAX_STORAGE_SIZE} / 2)] = ''; + console.error('filled'); + sessionStorage.anything = 'should fail'; + `, + ]); + + assert.match(cp.stderr, /filled/); + assert.match(cp.stderr, /QuotaExceededError/); + }); +});