diff options
Diffstat (limited to 'toolkit/identity/tests/unit/test_provisioning.js')
-rw-r--r-- | toolkit/identity/tests/unit/test_provisioning.js | 242 |
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(); +} |