blob: 935a085e72fc07b54ddbacb391597ed84ac17abe [file] [log] [blame]
if (this.importScripts) {
importScripts('../../../resources/js-test.js');
importScripts('shared.js');
}
if (window.testRunner)
testRunner.setAllowStorageQuotaIncrease(false);
description('This test verifies that estimated size of IDB database task is not smaller than or close to actual space increase (maybe subject to our implementation of backing store.)');
const quota = 400 * 1024; // Current default quota for test.
const indexCount = 20;
const indexValueSize = 1024;
const keySize = 1024;
indexedDBTest(prepareDatabase, onOpenSuccess);
function randomKey(length) {
var str = "";
for (var i = 0; i < length; i++)
str += (Math.floor(Math.random() * 10))
return str;
}
function randomPropertyValue(length) {
var value = [];
for (var i = 0; i < length; i++)
value.push(Math.floor(Math.random() * 10))
return value;
}
function createObject() {
var obj = { };
for (var i = 0; i < indexCount; i++)
obj["index" + i] = randomPropertyValue(indexValueSize);
return obj;
}
function prepareDatabase(event)
{
preamble(event);
db = event.target.result;
store = db.createObjectStore('store');
var indexes = [];
debug("Create " + indexCount + " indexes");
// This is an extreme case where each of indexes is composed of all properties of the object.
for (var i = 0; i < indexCount; i ++)
indexes.push("index" + i);
for (var i = 0; i < indexCount; i ++)
store.createIndex("allIndexes" + i, indexes);
}
function onOpenSuccess(event)
{
preamble(event);
evalAndLog("db = event.target.result");
evalAndLog("store = db.transaction('store', 'readwrite').objectStore('store')");
request = evalAndLog("request = store.add(createObject(), randomKey(keySize))");
request.onerror = () => {
shouldBeTrue("'error' in request");
shouldBe("request.error.code", "DOMException.QUOTA_EXCEEDED_ERR");
shouldBeEqualToString("request.error.name", "QuotaExceededError");
finishJSTest();
}
request.onsuccess = () => {
testFailed("Add operation should fail because task size is bigger than space available");
finishJSTest();
}
}