michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: Components.utils.import("resource://gre/modules/Services.jsm"); michael@0: Components.utils.import("resource://gre/modules/CertUtils.jsm"); michael@0: michael@0: const PREF_PREFIX = "certutils.certs."; michael@0: michael@0: function run_test() { michael@0: run_next_test(); michael@0: } michael@0: michael@0: function resetPrefs() { michael@0: var prefs = Services.prefs.getChildList(PREF_PREFIX); michael@0: prefs.forEach(Services.prefs.clearUserPref); michael@0: } michael@0: michael@0: function attributes_match(aCert, aExpected) { michael@0: if (Object.keys(aCert).length != Object.keys(aExpected).length) michael@0: return false; michael@0: michael@0: for (var attribute in aCert) { michael@0: if (!(attribute in aExpected)) michael@0: return false; michael@0: if (aCert[attribute] != aExpected[attribute]) michael@0: return false; michael@0: } michael@0: michael@0: return true; michael@0: } michael@0: michael@0: function test_results(aCerts, aExpected) { michael@0: do_check_eq(aCerts.length, aExpected.length); michael@0: michael@0: for (var i = 0; i < aCerts.length; i++) { michael@0: if (!attributes_match(aCerts[i], aExpected[i])) { michael@0: dump("Attributes for certificate " + (i + 1) + " did not match expected attributes\n"); michael@0: dump("Saw: " + aCerts[i].toSource() + "\n"); michael@0: dump("Expected: " + aExpected[i].toSource() + "\n"); michael@0: do_check_true(false); michael@0: } michael@0: } michael@0: } michael@0: michael@0: add_test(function test_singleCert() { michael@0: Services.prefs.setCharPref(PREF_PREFIX + "1.attribute1", "foo"); michael@0: Services.prefs.setCharPref(PREF_PREFIX + "1.attribute2", "bar"); michael@0: michael@0: var certs = readCertPrefs(PREF_PREFIX); michael@0: test_results(certs, [{ michael@0: attribute1: "foo", michael@0: attribute2: "bar" michael@0: }]); michael@0: michael@0: resetPrefs(); michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_multipleCert() { michael@0: Services.prefs.setCharPref(PREF_PREFIX + "1.md5Fingerprint", "cf84a9a2a804e021f27cb5128fe151f4"); michael@0: Services.prefs.setCharPref(PREF_PREFIX + "1.nickname", "1st cert"); michael@0: Services.prefs.setCharPref(PREF_PREFIX + "2.md5Fingerprint", "9441051b7eb50e5ca2226095af710c1a"); michael@0: Services.prefs.setCharPref(PREF_PREFIX + "2.nickname", "2nd cert"); michael@0: michael@0: var certs = readCertPrefs(PREF_PREFIX); michael@0: test_results(certs, [{ michael@0: md5Fingerprint: "cf84a9a2a804e021f27cb5128fe151f4", michael@0: nickname: "1st cert" michael@0: }, { michael@0: md5Fingerprint: "9441051b7eb50e5ca2226095af710c1a", michael@0: nickname: "2nd cert" michael@0: }]); michael@0: michael@0: resetPrefs(); michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_skippedCert() { michael@0: Services.prefs.setCharPref(PREF_PREFIX + "1.issuerName", "Mozilla"); michael@0: Services.prefs.setCharPref(PREF_PREFIX + "1.nickname", "1st cert"); michael@0: Services.prefs.setCharPref(PREF_PREFIX + "2.issuerName", "Top CA"); michael@0: Services.prefs.setCharPref(PREF_PREFIX + "2.nickname", "2nd cert"); michael@0: Services.prefs.setCharPref(PREF_PREFIX + "4.issuerName", "Unknown CA"); michael@0: Services.prefs.setCharPref(PREF_PREFIX + "4.nickname", "Ignored cert"); michael@0: michael@0: var certs = readCertPrefs(PREF_PREFIX); michael@0: test_results(certs, [{ michael@0: issuerName: "Mozilla", michael@0: nickname: "1st cert" michael@0: }, { michael@0: issuerName: "Top CA", michael@0: nickname: "2nd cert" michael@0: }]); michael@0: michael@0: resetPrefs(); michael@0: run_next_test(); michael@0: });