summaryrefslogtreecommitdiffstats
path: root/toolkit/modules/tests/xpcshell/test_osKeyStore.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/modules/tests/xpcshell/test_osKeyStore.js')
-rw-r--r--toolkit/modules/tests/xpcshell/test_osKeyStore.js102
1 files changed, 102 insertions, 0 deletions
diff --git a/toolkit/modules/tests/xpcshell/test_osKeyStore.js b/toolkit/modules/tests/xpcshell/test_osKeyStore.js
new file mode 100644
index 0000000000..eb66a817b6
--- /dev/null
+++ b/toolkit/modules/tests/xpcshell/test_osKeyStore.js
@@ -0,0 +1,102 @@
+/**
+ * Tests of OSKeyStore.sys.mjs
+ */
+
+"use strict";
+
+var { TestUtils } = ChromeUtils.importESModule(
+ "resource://testing-common/TestUtils.sys.mjs"
+);
+
+let OSKeyStoreTestUtils;
+add_task(async function os_key_store_setup() {
+ ({ OSKeyStoreTestUtils } = ChromeUtils.importESModule(
+ "resource://testing-common/OSKeyStoreTestUtils.sys.mjs"
+ ));
+ OSKeyStoreTestUtils.setup();
+ registerCleanupFunction(async function cleanup() {
+ await OSKeyStoreTestUtils.cleanup();
+ });
+});
+
+let OSKeyStore;
+add_task(async function setup() {
+ ({ OSKeyStore } = ChromeUtils.importESModule(
+ "resource://gre/modules/OSKeyStore.sys.mjs"
+ ));
+});
+
+// Ensure that the appropriate initialization has happened.
+do_get_profile();
+
+const testText = "test string";
+let cipherText;
+
+add_task(async function test_encrypt_decrypt() {
+ Assert.equal(
+ (await OSKeyStore.ensureLoggedIn()).authenticated,
+ true,
+ "Started logged in."
+ );
+
+ cipherText = await OSKeyStore.encrypt(testText);
+ Assert.notEqual(testText, cipherText);
+
+ let plainText = await OSKeyStore.decrypt(cipherText);
+ Assert.equal(testText, plainText);
+});
+
+add_task(async function test_reauth() {
+ let canTest = OSKeyStoreTestUtils.canTestOSKeyStoreLogin();
+ if (!canTest) {
+ todo_check_true(
+ canTest,
+ "test_reauth: Cannot test OS key store login on this build. See OSKeyStoreTestUtils.canTestOSKeyStoreLogin for details"
+ );
+ return;
+ }
+
+ let reauthObserved = OSKeyStoreTestUtils.waitForOSKeyStoreLogin(false);
+ await new Promise(resolve => TestUtils.executeSoon(resolve));
+ try {
+ await OSKeyStore.decrypt(cipherText, "prompt message text");
+ throw new Error("Not receiving canceled OS unlock error");
+ } catch (ex) {
+ Assert.equal(ex.message, "User canceled OS unlock entry");
+ Assert.equal(ex.result, Cr.NS_ERROR_ABORT);
+ }
+ await reauthObserved;
+
+ reauthObserved = OSKeyStoreTestUtils.waitForOSKeyStoreLogin(false);
+ await new Promise(resolve => TestUtils.executeSoon(resolve));
+ Assert.equal(
+ (await OSKeyStore.ensureLoggedIn("test message")).authenticated,
+ false,
+ "Reauth cancelled."
+ );
+ await reauthObserved;
+
+ reauthObserved = OSKeyStoreTestUtils.waitForOSKeyStoreLogin(true);
+ await new Promise(resolve => TestUtils.executeSoon(resolve));
+ let plainText2 = await OSKeyStore.decrypt(cipherText, "prompt message text");
+ await reauthObserved;
+ Assert.equal(testText, plainText2);
+
+ reauthObserved = OSKeyStoreTestUtils.waitForOSKeyStoreLogin(true);
+ await new Promise(resolve => TestUtils.executeSoon(resolve));
+ Assert.equal(
+ (await OSKeyStore.ensureLoggedIn("test message")).authenticated,
+ true,
+ "Reauth logged in."
+ );
+ await reauthObserved;
+});
+
+add_task(async function test_decryption_failure() {
+ try {
+ await OSKeyStore.decrypt("Malformed cipher text");
+ throw new Error("Not receiving decryption error");
+ } catch (ex) {
+ Assert.notEqual(ex.result, Cr.NS_ERROR_ABORT);
+ }
+});