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/); + }); +});