tenfourfox/toolkit/identity/tests/unit/test_provisioning.js
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

243 lines
5.9 KiB
JavaScript

/* 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();
}