diff options
Diffstat (limited to 'security/manager/ssl/tests/unit/test_data_storage.js')
-rw-r--r-- | security/manager/ssl/tests/unit/test_data_storage.js | 119 |
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}`); + } +}); |