1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/services/common/tests/unit/test_tokenauthenticatedrequest.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,52 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +Cu.import("resource://services-crypto/utils.js"); 1.8 +Cu.import("resource://services-common/async.js"); 1.9 +Cu.import("resource://services-common/rest.js"); 1.10 +Cu.import("resource://services-common/utils.js"); 1.11 + 1.12 +function run_test() { 1.13 + initTestLogging("Trace"); 1.14 + run_next_test(); 1.15 +} 1.16 + 1.17 +add_test(function test_authenticated_request() { 1.18 + _("Ensure that sending a MAC authenticated GET request works as expected."); 1.19 + 1.20 + let message = "Great Success!"; 1.21 + 1.22 + // TODO: We use a preset key here, but use getTokenFromBrowserIDAssertion() 1.23 + // from TokenServerClient to get a real one when possible. (Bug 745800) 1.24 + let id = "eyJleHBpcmVzIjogMTM2NTAxMDg5OC4x"; 1.25 + let key = "qTZf4ZFpAMpMoeSsX3zVRjiqmNs="; 1.26 + let method = "GET"; 1.27 + 1.28 + let nonce = btoa(CryptoUtils.generateRandomBytes(16)); 1.29 + let ts = Math.floor(Date.now() / 1000); 1.30 + let extra = {ts: ts, nonce: nonce}; 1.31 + 1.32 + let auth; 1.33 + 1.34 + let server = httpd_setup({"/foo": function(request, response) { 1.35 + do_check_true(request.hasHeader("Authorization")); 1.36 + do_check_eq(auth, request.getHeader("Authorization")); 1.37 + 1.38 + response.setStatusLine(request.httpVersion, 200, "OK"); 1.39 + response.bodyOutputStream.write(message, message.length); 1.40 + } 1.41 + }); 1.42 + let uri = CommonUtils.makeURI(server.baseURI + "/foo"); 1.43 + let sig = CryptoUtils.computeHTTPMACSHA1(id, key, method, uri, extra); 1.44 + auth = sig.getHeader(); 1.45 + 1.46 + let req = new TokenAuthenticatedRESTRequest(uri, {id: id, key: key}, extra); 1.47 + let cb = Async.makeSpinningCallback(); 1.48 + req.get(cb); 1.49 + let result = cb.wait(); 1.50 + 1.51 + do_check_eq(null, result); 1.52 + do_check_eq(message, req.response.body); 1.53 + 1.54 + server.stop(run_next_test); 1.55 +});