diff options
Diffstat (limited to 'dom/indexedDB/test/unit/test_wasm_recompile.js')
-rw-r--r-- | dom/indexedDB/test/unit/test_wasm_recompile.js | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/dom/indexedDB/test/unit/test_wasm_recompile.js b/dom/indexedDB/test/unit/test_wasm_recompile.js new file mode 100644 index 000000000..512dc3eff --- /dev/null +++ b/dom/indexedDB/test/unit/test_wasm_recompile.js @@ -0,0 +1,124 @@ +/** + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +var testGenerator = testSteps(); + +function testSteps() +{ + const name = "test_wasm_recompile.js"; + + const objectStoreName = "Wasm"; + + const wasmData = { key: 1, wasm: null }; + + // The goal of this test is to prove that wasm is recompiled and the on-disk + // copy updated. + + if (!isWasmSupported()) { + finishTest(); + yield undefined; + } + + getWasmBinary('(module (func (nop)))'); + let binary = yield undefined; + + wasmData.wasm = getWasmModule(binary); + + info("Installing profile"); + + clearAllDatabases(continueToNextStepSync); + yield undefined; + + // The profile was created by an older build (buildId: 20161116145318, + // cpuId: X64=0x2). It contains one stored wasm module (file id 1 - bytecode + // and file id 2 - compiled/machine code). The file create_db.js in the + // package was run locally (specifically it was temporarily added to + // xpcshell-parent-process.ini and then executed: + // mach xpcshell-test dom/indexedDB/test/unit/create_db.js + installPackagedProfile("wasm_recompile_profile"); + + let filesDir = getChromeFilesDir(); + + let file = filesDir.clone(); + file.append("2"); + + info("Reading out contents of compiled blob"); + + let fileReader = new FileReader(); + fileReader.onload = continueToNextStepSync; + fileReader.readAsArrayBuffer(File.createFromNsIFile(file)); + + yield undefined; + + let compiledBuffer = fileReader.result; + + info("Opening database"); + + let request = indexedDB.open(name); + request.onerror = errorHandler; + request.onupgradeneeded = unexpectedSuccessHandler; + request.onsuccess = continueToNextStepSync; + yield undefined; + + // success + let db = request.result; + db.onerror = errorHandler; + + info("Getting wasm"); + + request = db.transaction([objectStoreName]) + .objectStore(objectStoreName).get(wasmData.key); + request.onsuccess = continueToNextStepSync; + yield undefined; + + info("Verifying wasm module"); + + verifyWasmModule(request.result, wasmData.wasm); + yield undefined; + + info("Reading out contents of new compiled blob"); + + fileReader = new FileReader(); + fileReader.onload = continueToNextStepSync; + fileReader.readAsArrayBuffer(File.createFromNsIFile(file)); + + yield undefined; + + let newCompiledBuffer = fileReader.result; + + info("Verifying blobs differ"); + + ok(!compareBuffers(newCompiledBuffer, compiledBuffer), "Blobs differ"); + + info("Getting wasm again"); + + request = db.transaction([objectStoreName]) + .objectStore(objectStoreName).get(wasmData.key); + request.onsuccess = continueToNextStepSync; + yield undefined; + + info("Verifying wasm module"); + + verifyWasmModule(request.result, wasmData.wasm); + yield undefined; + + info("Reading contents of new compiled blob again"); + + fileReader = new FileReader(); + fileReader.onload = continueToNextStepSync; + fileReader.readAsArrayBuffer(File.createFromNsIFile(file)); + + yield undefined; + + let newCompiledBuffer2 = fileReader.result; + + info("Verifying blob didn't change"); + + ok(compareBuffers(newCompiledBuffer2, newCompiledBuffer), + "Blob didn't change"); + + finishTest(); + yield undefined; +} |