summaryrefslogtreecommitdiffstats
path: root/security/manager/ssl/tests/unit/test_data_storage.js
diff options
context:
space:
mode:
Diffstat (limited to 'security/manager/ssl/tests/unit/test_data_storage.js')
-rw-r--r--security/manager/ssl/tests/unit/test_data_storage.js119
1 files changed, 119 insertions, 0 deletions
diff --git a/security/manager/ssl/tests/unit/test_data_storage.js b/security/manager/ssl/tests/unit/test_data_storage.js
new file mode 100644
index 0000000000..89d6c2f965
--- /dev/null
+++ b/security/manager/ssl/tests/unit/test_data_storage.js
@@ -0,0 +1,119 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+do_get_profile(); // must be done before instantiating nsIDataStorageManager
+
+let dataStorageManager = Cc[
+ "@mozilla.org/security/datastoragemanager;1"
+].getService(Ci.nsIDataStorageManager);
+let dataStorage = dataStorageManager.get(
+ Ci.nsIDataStorageManager.ClientAuthRememberList
+);
+
+add_task(function test_data_storage() {
+ // Test putting a simple key/value pair.
+ dataStorage.put("test", "value", Ci.nsIDataStorage.Persistent);
+ Assert.equal(dataStorage.get("test", Ci.nsIDataStorage.Persistent), "value");
+
+ // Test that getting a value with the same key but of a different type throws.
+ Assert.throws(
+ () => dataStorage.get("test", Ci.nsIDataStorage.Private),
+ /NS_ERROR_NOT_AVAILABLE/,
+ "getting a value of a type that hasn't been set yet should throw"
+ );
+
+ // Put with Private data shouldn't affect Persistent data
+ dataStorage.put("test", "private", Ci.nsIDataStorage.Private);
+ Assert.equal(dataStorage.get("test", Ci.nsIDataStorage.Private), "private");
+ Assert.equal(dataStorage.get("test", Ci.nsIDataStorage.Persistent), "value");
+
+ // Put of a previously-present key overwrites it (if of the same type)
+ dataStorage.put("test", "new", Ci.nsIDataStorage.Persistent);
+ Assert.equal(dataStorage.get("test", Ci.nsIDataStorage.Persistent), "new");
+
+ // Removal should work
+ dataStorage.remove("test", Ci.nsIDataStorage.Persistent);
+ Assert.throws(
+ () => dataStorage.get("test", Ci.nsIDataStorage.Persistent),
+ /NS_ERROR_NOT_AVAILABLE/,
+ "getting a removed value should throw"
+ );
+ // But removing one type shouldn't affect the other
+ Assert.equal(dataStorage.get("test", Ci.nsIDataStorage.Private), "private");
+ // Test removing the other type as well
+ dataStorage.remove("test", Ci.nsIDataStorage.Private);
+ Assert.throws(
+ () => dataStorage.get("test", Ci.nsIDataStorage.Private),
+ /NS_ERROR_NOT_AVAILABLE/,
+ "getting a removed value should throw"
+ );
+
+ // Saturate the storage tables (there is a maximum of 2048 entries for each
+ // type of data).
+ for (let i = 0; i < 2048; i++) {
+ let padded = i.toString().padStart(4, "0");
+ dataStorage.put(
+ `key${padded}`,
+ `value${padded}`,
+ Ci.nsIDataStorage.Persistent
+ );
+ dataStorage.put(
+ `key${padded}`,
+ `value${padded}`,
+ Ci.nsIDataStorage.Private
+ );
+ }
+ // Ensure the data can be read back.
+ for (let i = 0; i < 2048; i++) {
+ let padded = i.toString().padStart(4, "0");
+ let val = dataStorage.get(`key${padded}`, Ci.nsIDataStorage.Persistent);
+ Assert.equal(val, `value${padded}`);
+ val = dataStorage.get(`key${padded}`, Ci.nsIDataStorage.Private);
+ Assert.equal(val, `value${padded}`);
+ }
+ // Remove each entry.
+ for (let i = 0; i < 2048; i++) {
+ let padded = i.toString().padStart(4, "0");
+ dataStorage.remove(`key${padded}`, Ci.nsIDataStorage.Persistent);
+ dataStorage.remove(`key${padded}`, Ci.nsIDataStorage.Private);
+ }
+ // Ensure the entries are not present.
+ for (let i = 0; i < 2048; i++) {
+ let padded = i.toString().padStart(4, "0");
+ Assert.throws(
+ () => dataStorage.get(`key${padded}`, Ci.nsIDataStorage.Persistent),
+ /NS_ERROR_NOT_AVAILABLE/,
+ "getting a removed value should throw"
+ );
+ Assert.throws(
+ () => dataStorage.get(`key${padded}`, Ci.nsIDataStorage.Private),
+ /NS_ERROR_NOT_AVAILABLE/,
+ "getting a removed value should throw"
+ );
+ }
+ // Add new entries.
+ for (let i = 0; i < 2048; i++) {
+ let padded = i.toString().padStart(5, "1");
+ dataStorage.put(
+ `key${padded}`,
+ `value${padded}`,
+ Ci.nsIDataStorage.Persistent
+ );
+ dataStorage.put(
+ `key${padded}`,
+ `value${padded}`,
+ Ci.nsIDataStorage.Private
+ );
+ }
+ // Ensure each new entry was added.
+ for (let i = 0; i < 2048; i++) {
+ let padded = i.toString().padStart(5, "1");
+ let val = dataStorage.get(`key${padded}`, Ci.nsIDataStorage.Persistent);
+ Assert.equal(val, `value${padded}`);
+ val = dataStorage.get(`key${padded}`, Ci.nsIDataStorage.Private);
+ Assert.equal(val, `value${padded}`);
+ }
+});