summaryrefslogtreecommitdiffstats
path: root/storage/test/unit/test_cache_size.js
diff options
context:
space:
mode:
Diffstat (limited to 'storage/test/unit/test_cache_size.js')
-rw-r--r--storage/test/unit/test_cache_size.js73
1 files changed, 73 insertions, 0 deletions
diff --git a/storage/test/unit/test_cache_size.js b/storage/test/unit/test_cache_size.js
new file mode 100644
index 0000000000..bd56de64cd
--- /dev/null
+++ b/storage/test/unit/test_cache_size.js
@@ -0,0 +1,73 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// This file tests that dbs of various page sizes are using the right cache
+// size (bug 703113).
+
+/**
+ * In order to change the cache size, we must open a DB, change the page
+ * size, create a table, close the DB, then re-open the DB. We then check
+ * the cache size after reopening.
+ *
+ * @param dbOpener
+ * function that opens the DB specified in file
+ * @param file
+ * file holding the database
+ * @param pageSize
+ * the DB's page size
+ * @param expectedCacheSize
+ * the expected cache size for the given page size
+ */
+function check_size(dbOpener, file, pageSize, expectedCacheSize) {
+ // Open the DB, immediately change its page size.
+ let db = dbOpener(file);
+ db.executeSimpleSQL("PRAGMA page_size = " + pageSize);
+
+ // Check the page size change worked.
+ let stmt = db.createStatement("PRAGMA page_size");
+ Assert.ok(stmt.executeStep());
+ Assert.equal(stmt.row.page_size, pageSize);
+ stmt.finalize();
+
+ // Create a simple table.
+ db.executeSimpleSQL("CREATE TABLE test ( id INTEGER PRIMARY KEY )");
+
+ // Close and re-open the DB.
+ db.close();
+ db = dbOpener(file);
+
+ // Check cache size is as expected.
+ stmt = db.createStatement("PRAGMA cache_size");
+ Assert.ok(stmt.executeStep());
+ Assert.equal(stmt.row.cache_size, expectedCacheSize);
+ stmt.finalize();
+}
+
+function new_file(name) {
+ let file = Services.dirsvc.get("ProfD", Ci.nsIFile);
+ file.append(name + ".sqlite");
+ Assert.ok(!file.exists());
+ return file;
+}
+
+function run_test() {
+ const kExpectedCacheSize = -2048; // 2MiB
+
+ let pageSizes = [1024, 4096, 32768];
+
+ for (let i = 0; i < pageSizes.length; i++) {
+ let pageSize = pageSizes[i];
+ check_size(
+ getDatabase,
+ new_file("shared" + pageSize),
+ pageSize,
+ kExpectedCacheSize
+ );
+ check_size(
+ Services.storage.openUnsharedDatabase,
+ new_file("unshared" + pageSize),
+ pageSize,
+ kExpectedCacheSize
+ );
+ }
+}