Bug 1082346 - 02. Test case. r=keeler r=Cykesiopka draft
authorChuck Lee <chuckli0706@gmail.com>
Tue, 10 May 2016 23:08:04 +0800
changeset 365352 5c4b2e94c380a491530bd88fc803d2b4399544cd
parent 365341 696d76f9676327ab336f826f2e86034015205ec4
child 520535 f83a70bd6dfcfb03f80a0b35e341540739f06ae0
push id17719
push userchuckli0706@gmail.com
push dateTue, 10 May 2016 15:08:48 +0000
reviewerskeeler, Cykesiopka
bugs1082346
milestone49.0a1
Bug 1082346 - 02. Test case. r=keeler r=Cykesiopka MozReview-Commit-ID: 3O8gBQ06Q96
security/manager/ssl/tests/unit/test_certDB_import/cert_from_windows.pfx
security/manager/ssl/tests/unit/test_certDB_import_pkcs12.js
security/manager/ssl/tests/unit/xpcshell.ini
new file mode 100644
index 0000000000000000000000000000000000000000..e969d672d7357f1131c5e0f486d263aa07066825
GIT binary patch
literal 2041
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
Jq=oMv=|A)tZcP9H
new file mode 100644
--- /dev/null
+++ b/security/manager/ssl/tests/unit/test_certDB_import_pkcs12.js
@@ -0,0 +1,92 @@
+// -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/publicdomain/zero/1.0/
+"use strict";
+
+// Tests import PKCS12 file by nsIX509CertDB.
+
+do_get_profile();
+
+const gCertDB = Cc["@mozilla.org/security/x509certdb;1"]
+                  .getService(Ci.nsIX509CertDB);
+
+const CERT_COMMON_NAME = "test_cert_from_windows";
+const TEST_CERT_PASSWORD = "黒い";
+
+let gGetPKCS12Password = false;
+
+// Mock implementation of nsICertificateDialogs.
+const gCertificateDialogs = {
+  QueryInterface: XPCOMUtils.generateQI([Ci.nsICertificateDialogs]),
+
+  getPKCS12FilePassword: (ctx, password) => {
+    ok(!gGetPKCS12Password,
+       "getPKCS12FilePassword should be called only once.");
+
+    password.value = TEST_CERT_PASSWORD;
+    do_print("getPKCS12FilePassword() is called");
+    gGetPKCS12Password = true;
+    return true;
+  },
+};
+
+const gPrompt = {
+  QueryInterface: XPCOMUtils.generateQI([Ci.nsIPrompt]),
+  alert: (title, text) => {
+    do_print("alert('" + text + "')");
+  },
+};
+
+const gPromptFactory = {
+  QueryInterface: XPCOMUtils.generateQI([Ci.nsIPromptFactory]),
+  getPrompt: (aWindow, aIID) => gPrompt,
+};
+
+function doesCertExist(commonName) {
+  let allCerts = gCertDB.getCerts();
+  let enumerator = allCerts.getEnumerator();
+  while (enumerator.hasMoreElements()) {
+    let cert = enumerator.getNext().QueryInterface(Ci.nsIX509Cert);
+    if (cert.isBuiltInRoot) {
+      continue;
+    }
+    if (cert.commonName == commonName) {
+      return true;
+    }
+  }
+
+  return false;
+}
+
+function testImportPKCS12Cert() {
+  ok(!doesCertExist(CERT_COMMON_NAME),
+     "Cert should not be in the database before import");
+
+  // Import and check for success.
+  let certFile = do_get_file("test_certDB_import/cert_from_windows.pfx");
+  gCertDB.importPKCS12File(null, certFile);
+
+  ok(gGetPKCS12Password, "PKCS12 password should be asked");
+
+  ok(doesCertExist(CERT_COMMON_NAME),
+     "Cert should now be found in the database");
+}
+
+function run_test() {
+  // We have to set a password and login before we attempt to import anything.
+  loginToDBWithDefaultPassword();
+
+  let certificateDialogsCID =
+    MockRegistrar.register("@mozilla.org/nsCertificateDialogs;1",
+                           gCertificateDialogs);
+  let promptFactoryCID =
+    MockRegistrar.register("@mozilla.org/prompter;1", gPromptFactory);
+
+  do_register_cleanup(() => {
+    MockRegistrar.unregister(certificateDialogsCID);
+    MockRegistrar.unregister(promptFactoryCID);
+  });
+
+  // Import PKCS12 file with utf-8 password
+  testImportPKCS12Cert();
+}
--- a/security/manager/ssl/tests/unit/xpcshell.ini
+++ b/security/manager/ssl/tests/unit/xpcshell.ini
@@ -46,16 +46,17 @@ run-sequentially = hardcoded ports
 run-sequentially = hardcoded ports
 [test_cert_override_bits_mismatches.js]
 run-sequentially = hardcoded ports
 [test_cert_sha1.js]
 [test_cert_signatures.js]
 [test_cert_trust.js]
 [test_cert_version.js]
 [test_certDB_import.js]
+[test_certDB_import_pkcs12.js]
 [test_certviewer_invalid_oids.js]
 skip-if = toolkit == 'android' || buildapp == 'b2g'
 [test_constructX509FromBase64.js]
 [test_content_signing.js]
 [test_datasignatureverifier.js]
 [test_ev_certs.js]
 run-sequentially = hardcoded ports
 [test_getchain.js]