|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 Cu.import("resource://gre/modules/XPCOMUtils.jsm"); |
|
5 Cu.import("resource://gre/modules/Services.jsm"); |
|
6 |
|
7 XPCOMUtils.defineLazyModuleGetter(this, "IDService", |
|
8 "resource://gre/modules/identity/Identity.jsm", |
|
9 "IdentityService"); |
|
10 |
|
11 const WELL_KNOWN_PATH = "/.well-known/browserid"; |
|
12 |
|
13 let SERVER_PORT = 8080; |
|
14 |
|
15 // valid IDP |
|
16 function test_well_known_1() { |
|
17 do_test_pending(); |
|
18 |
|
19 let server = new HttpServer(); |
|
20 server.registerFile(WELL_KNOWN_PATH, do_get_file("data/idp_1" + WELL_KNOWN_PATH)); |
|
21 server.start(SERVER_PORT); |
|
22 let hostPort = "localhost:" + SERVER_PORT; |
|
23 |
|
24 function check_well_known(aErr, aCallbackObj) { |
|
25 do_check_null(aErr); |
|
26 do_check_eq(aCallbackObj.domain, hostPort); |
|
27 let idpParams = aCallbackObj.idpParams; |
|
28 do_check_eq(idpParams['public-key'].algorithm, "RS"); |
|
29 do_check_eq(idpParams.authentication, "/browserid/sign_in.html"); |
|
30 do_check_eq(idpParams.provisioning, "/browserid/provision.html"); |
|
31 |
|
32 do_test_finished(); |
|
33 server.stop(run_next_test); |
|
34 } |
|
35 |
|
36 IDService._fetchWellKnownFile(hostPort, check_well_known, "http"); |
|
37 } |
|
38 |
|
39 // valid domain, non-exixtent browserid file |
|
40 function test_well_known_404() { |
|
41 do_test_pending(); |
|
42 |
|
43 let server = new HttpServer(); |
|
44 // Don't register the well-known file |
|
45 // Change ports to avoid HTTP caching |
|
46 SERVER_PORT++; |
|
47 server.start(SERVER_PORT); |
|
48 |
|
49 let hostPort = "localhost:" + SERVER_PORT; |
|
50 |
|
51 function check_well_known_404(aErr, aCallbackObj) { |
|
52 do_check_eq("Error", aErr); |
|
53 do_check_eq(undefined, aCallbackObj); |
|
54 do_test_finished(); |
|
55 server.stop(run_next_test); |
|
56 } |
|
57 |
|
58 IDService._fetchWellKnownFile(hostPort, check_well_known_404, "http"); |
|
59 } |
|
60 |
|
61 // valid domain, invalid browserid file (no "provisioning" member) |
|
62 function test_well_known_invalid_1() { |
|
63 do_test_pending(); |
|
64 |
|
65 let server = new HttpServer(); |
|
66 server.registerFile(WELL_KNOWN_PATH, do_get_file("data/idp_invalid_1" + WELL_KNOWN_PATH)); |
|
67 // Change ports to avoid HTTP caching |
|
68 SERVER_PORT++; |
|
69 server.start(SERVER_PORT); |
|
70 |
|
71 let hostPort = "localhost:" + SERVER_PORT; |
|
72 |
|
73 function check_well_known_invalid_1(aErr, aCallbackObj) { |
|
74 // check for an error message |
|
75 do_check_true(aErr && aErr.length > 0); |
|
76 do_check_eq(undefined, aCallbackObj); |
|
77 do_test_finished(); |
|
78 server.stop(run_next_test); |
|
79 } |
|
80 |
|
81 IDService._fetchWellKnownFile(hostPort, check_well_known_invalid_1, "http"); |
|
82 } |
|
83 |
|
84 let TESTS = [test_well_known_1, test_well_known_404, test_well_known_invalid_1]; |
|
85 |
|
86 TESTS.forEach(add_test); |
|
87 |
|
88 function run_test() { |
|
89 run_next_test(); |
|
90 } |