michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: // This file tests that dbs of various page sizes are using the right cache michael@0: // size (bug 703113). michael@0: michael@0: /** michael@0: * In order to change the cache size, we must open a DB, change the page michael@0: * size, create a table, close the DB, then re-open the DB. We then check michael@0: * the cache size after reopening. michael@0: * michael@0: * @param dbOpener michael@0: * function that opens the DB specified in file michael@0: * @param file michael@0: * file holding the database michael@0: * @param pageSize michael@0: * the DB's page size michael@0: * @param expectedCacheSize michael@0: * the expected cache size for the given page size michael@0: */ michael@0: function check_size(dbOpener, file, pageSize, expectedCacheSize) michael@0: { michael@0: // Open the DB, immediately change its page size. michael@0: let db = dbOpener(file); michael@0: db.executeSimpleSQL("PRAGMA page_size = " + pageSize); michael@0: michael@0: // Check the page size change worked. michael@0: let stmt = db.createStatement("PRAGMA page_size"); michael@0: do_check_true(stmt.executeStep()); michael@0: do_check_eq(stmt.row.page_size, pageSize); michael@0: stmt.finalize(); michael@0: michael@0: // Create a simple table. michael@0: db.executeSimpleSQL("CREATE TABLE test ( id INTEGER PRIMARY KEY )"); michael@0: michael@0: // Close and re-open the DB. michael@0: db.close(); michael@0: db = dbOpener(file); michael@0: michael@0: // Check cache size is as expected. michael@0: let stmt = db.createStatement("PRAGMA cache_size"); michael@0: do_check_true(stmt.executeStep()); michael@0: do_check_eq(stmt.row.cache_size, expectedCacheSize); michael@0: stmt.finalize(); michael@0: } michael@0: michael@0: function new_file(name) michael@0: { michael@0: let file = dirSvc.get("ProfD", Ci.nsIFile); michael@0: file.append(name + ".sqlite"); michael@0: do_check_false(file.exists()); michael@0: return file; michael@0: } michael@0: michael@0: function run_test() michael@0: { michael@0: const kExpectedCacheSize = -2048; // 2MiB michael@0: michael@0: let pageSizes = [ michael@0: 1024, michael@0: 4096, michael@0: 32768, michael@0: ]; michael@0: michael@0: for (let i = 0; i < pageSizes.length; i++) { michael@0: let pageSize = pageSizes[i]; michael@0: check_size(getDatabase, michael@0: new_file("shared" + pageSize), pageSize, kExpectedCacheSize); michael@0: check_size(getService().openUnsharedDatabase, michael@0: new_file("unshared" + pageSize), pageSize, kExpectedCacheSize); michael@0: } michael@0: }