diff options
Diffstat (limited to 'toolkit/modules/tests/xpcshell/test_readCertPrefs.js')
-rw-r--r-- | toolkit/modules/tests/xpcshell/test_readCertPrefs.js | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/toolkit/modules/tests/xpcshell/test_readCertPrefs.js b/toolkit/modules/tests/xpcshell/test_readCertPrefs.js new file mode 100644 index 000000000..837a9912a --- /dev/null +++ b/toolkit/modules/tests/xpcshell/test_readCertPrefs.js @@ -0,0 +1,97 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +Components.utils.import("resource://gre/modules/Services.jsm"); +Components.utils.import("resource://gre/modules/CertUtils.jsm"); + +const PREF_PREFIX = "certutils.certs."; + +function run_test() { + run_next_test(); +} + +function resetPrefs() { + var prefs = Services.prefs.getChildList(PREF_PREFIX); + prefs.forEach(Services.prefs.clearUserPref); +} + +function attributes_match(aCert, aExpected) { + if (Object.keys(aCert).length != Object.keys(aExpected).length) + return false; + + for (var attribute in aCert) { + if (!(attribute in aExpected)) + return false; + if (aCert[attribute] != aExpected[attribute]) + return false; + } + + return true; +} + +function test_results(aCerts, aExpected) { + do_check_eq(aCerts.length, aExpected.length); + + for (var i = 0; i < aCerts.length; i++) { + if (!attributes_match(aCerts[i], aExpected[i])) { + dump("Attributes for certificate " + (i + 1) + " did not match expected attributes\n"); + dump("Saw: " + aCerts[i].toSource() + "\n"); + dump("Expected: " + aExpected[i].toSource() + "\n"); + do_check_true(false); + } + } +} + +add_test(function test_singleCert() { + Services.prefs.setCharPref(PREF_PREFIX + "1.attribute1", "foo"); + Services.prefs.setCharPref(PREF_PREFIX + "1.attribute2", "bar"); + + var certs = readCertPrefs(PREF_PREFIX); + test_results(certs, [{ + attribute1: "foo", + attribute2: "bar" + }]); + + resetPrefs(); + run_next_test(); +}); + +add_test(function test_multipleCert() { + Services.prefs.setCharPref(PREF_PREFIX + "1.md5Fingerprint", "cf84a9a2a804e021f27cb5128fe151f4"); + Services.prefs.setCharPref(PREF_PREFIX + "1.nickname", "1st cert"); + Services.prefs.setCharPref(PREF_PREFIX + "2.md5Fingerprint", "9441051b7eb50e5ca2226095af710c1a"); + Services.prefs.setCharPref(PREF_PREFIX + "2.nickname", "2nd cert"); + + var certs = readCertPrefs(PREF_PREFIX); + test_results(certs, [{ + md5Fingerprint: "cf84a9a2a804e021f27cb5128fe151f4", + nickname: "1st cert" + }, { + md5Fingerprint: "9441051b7eb50e5ca2226095af710c1a", + nickname: "2nd cert" + }]); + + resetPrefs(); + run_next_test(); +}); + +add_test(function test_skippedCert() { + Services.prefs.setCharPref(PREF_PREFIX + "1.issuerName", "Mozilla"); + Services.prefs.setCharPref(PREF_PREFIX + "1.nickname", "1st cert"); + Services.prefs.setCharPref(PREF_PREFIX + "2.issuerName", "Top CA"); + Services.prefs.setCharPref(PREF_PREFIX + "2.nickname", "2nd cert"); + Services.prefs.setCharPref(PREF_PREFIX + "4.issuerName", "Unknown CA"); + Services.prefs.setCharPref(PREF_PREFIX + "4.nickname", "Ignored cert"); + + var certs = readCertPrefs(PREF_PREFIX); + test_results(certs, [{ + issuerName: "Mozilla", + nickname: "1st cert" + }, { + issuerName: "Top CA", + nickname: "2nd cert" + }]); + + resetPrefs(); + run_next_test(); +}); |