summaryrefslogtreecommitdiffstats
path: root/toolkit/identity/tests/unit/test_provisioning.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/identity/tests/unit/test_provisioning.js')
-rw-r--r--toolkit/identity/tests/unit/test_provisioning.js242
1 files changed, 242 insertions, 0 deletions
diff --git a/toolkit/identity/tests/unit/test_provisioning.js b/toolkit/identity/tests/unit/test_provisioning.js
new file mode 100644
index 000000000..c05805bef
--- /dev/null
+++ b/toolkit/identity/tests/unit/test_provisioning.js
@@ -0,0 +1,242 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+Cu.import("resource://gre/modules/identity/IdentityProvider.jsm");
+
+function check_provision_flow_done(provId) {
+ do_check_null(IdentityProvider._provisionFlows[provId]);
+}
+
+function test_begin_provisioning() {
+ do_test_pending();
+
+ setup_provisioning(
+ TEST_USER,
+ function(caller) {
+ // call .beginProvisioning()
+ IdentityProvider.beginProvisioning(caller);
+ }, function() {},
+ {
+ beginProvisioningCallback: function(email, duration_s) {
+ do_check_eq(email, TEST_USER);
+ do_check_true(duration_s > 0);
+ do_check_true(duration_s <= (24 * 3600));
+
+ do_test_finished();
+ run_next_test();
+ }
+ });
+}
+
+function test_raise_provisioning_failure() {
+ do_test_pending();
+ let _callerId = null;
+
+ setup_provisioning(
+ TEST_USER,
+ function(caller) {
+ // call .beginProvisioning()
+ _callerId = caller.id;
+ IdentityProvider.beginProvisioning(caller);
+ }, function(err) {
+ // this should be invoked with a populated error
+ do_check_neq(err, null);
+ do_check_true(err.indexOf("can't authenticate this email") > -1);
+
+ do_test_finished();
+ run_next_test();
+ },
+ {
+ beginProvisioningCallback: function(email, duration_s) {
+ // raise the failure as if we can't provision this email
+ IdentityProvider.raiseProvisioningFailure(_callerId, "can't authenticate this email");
+ }
+ });
+}
+
+function test_genkeypair_before_begin_provisioning() {
+ do_test_pending();
+
+ setup_provisioning(
+ TEST_USER,
+ function(caller) {
+ // call genKeyPair without beginProvisioning
+ IdentityProvider.genKeyPair(caller.id);
+ },
+ // expect this to be called with an error
+ function(err) {
+ do_check_neq(err, null);
+
+ do_test_finished();
+ run_next_test();
+ },
+ {
+ // this should not be called at all!
+ genKeyPairCallback: function(pk) {
+ // a test that will surely fail because we shouldn't be here.
+ do_check_true(false);
+
+ do_test_finished();
+ run_next_test();
+ }
+ }
+ );
+}
+
+function test_genkeypair() {
+ do_test_pending();
+ let _callerId = null;
+
+ setup_provisioning(
+ TEST_USER,
+ function(caller) {
+ _callerId = caller.id;
+ IdentityProvider.beginProvisioning(caller);
+ },
+ function(err) {
+ // should not be called!
+ do_check_true(false);
+
+ do_test_finished();
+ run_next_test();
+ },
+ {
+ beginProvisioningCallback: function(email, time_s) {
+ IdentityProvider.genKeyPair(_callerId);
+ },
+ genKeyPairCallback: function(kp) {
+ do_check_neq(kp, null);
+
+ // yay!
+ do_test_finished();
+ run_next_test();
+ }
+ }
+ );
+}
+
+// we've already ensured that genkeypair can't be called
+// before beginProvisioning, so this test should be enough
+// to ensure full sequential call of the 3 APIs.
+function test_register_certificate_before_genkeypair() {
+ do_test_pending();
+ let _callerID = null;
+
+ setup_provisioning(
+ TEST_USER,
+ function(caller) {
+ // do the right thing for beginProvisioning
+ _callerID = caller.id;
+ IdentityProvider.beginProvisioning(caller);
+ },
+ // expect this to be called with an error
+ function(err) {
+ do_check_neq(err, null);
+
+ do_test_finished();
+ run_next_test();
+ },
+ {
+ beginProvisioningCallback: function(email, duration_s) {
+ // now we try to register cert but no keygen has been done
+ IdentityProvider.registerCertificate(_callerID, "fake-cert");
+ }
+ }
+ );
+}
+
+function test_register_certificate() {
+ do_test_pending();
+ let _callerId = null;
+
+ setup_provisioning(
+ TEST_USER,
+ function(caller) {
+ _callerId = caller.id;
+ IdentityProvider.beginProvisioning(caller);
+ },
+ function(err) {
+ // we should be cool!
+ do_check_null(err);
+
+ // check that the cert is there
+ let identity = get_idstore().fetchIdentity(TEST_USER);
+ do_check_neq(identity, null);
+ do_check_eq(identity.cert, "fake-cert-42");
+
+ do_execute_soon(function check_done() {
+ // cleanup will happen after the callback is called
+ check_provision_flow_done(_callerId);
+
+ do_test_finished();
+ run_next_test();
+ });
+ },
+ {
+ beginProvisioningCallback: function(email, duration_s) {
+ IdentityProvider.genKeyPair(_callerId);
+ },
+ genKeyPairCallback: function(pk) {
+ IdentityProvider.registerCertificate(_callerId, "fake-cert-42");
+ }
+ }
+ );
+}
+
+
+function test_get_assertion_after_provision() {
+ do_test_pending();
+ let _callerId = null;
+
+ setup_provisioning(
+ TEST_USER,
+ function(caller) {
+ _callerId = caller.id;
+ IdentityProvider.beginProvisioning(caller);
+ },
+ function(err) {
+ // we should be cool!
+ do_check_null(err);
+
+ // check that the cert is there
+ let identity = get_idstore().fetchIdentity(TEST_USER);
+ do_check_neq(identity, null);
+ do_check_eq(identity.cert, "fake-cert-42");
+
+ do_execute_soon(function check_done() {
+ // cleanup will happen after the callback is called
+ check_provision_flow_done(_callerId);
+
+ do_test_finished();
+ run_next_test();
+ });
+ },
+ {
+ beginProvisioningCallback: function(email, duration_s) {
+ IdentityProvider.genKeyPair(_callerId);
+ },
+ genKeyPairCallback: function(pk) {
+ IdentityProvider.registerCertificate(_callerId, "fake-cert-42");
+ }
+ }
+ );
+
+}
+
+var TESTS = [];
+
+TESTS.push(test_begin_provisioning);
+TESTS.push(test_raise_provisioning_failure);
+TESTS.push(test_genkeypair_before_begin_provisioning);
+TESTS.push(test_genkeypair);
+TESTS.push(test_register_certificate_before_genkeypair);
+TESTS.push(test_register_certificate);
+TESTS.push(test_get_assertion_after_provision);
+
+TESTS.forEach(add_test);
+
+function run_test() {
+ run_next_test();
+}