no bug - Import translations from android-l10n r=release a=l10n CLOSED TREE
[gecko.git] / security / manager / ssl / tests / unit / test_ocsp_private_caching.js
blob3a56118bdfbb358d1443de0470953821a2ebde59
1 // -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
2 // This Source Code Form is subject to the terms of the Mozilla Public
3 // License, v. 2.0. If a copy of the MPL was not distributed with this
4 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 "use strict";
8 // In which we connect to a host and encounter OCSP responses with the
9 // Cache-Control header set, which normally Necko would cache. This test
10 // ensures that these responses aren't cached. PSM has its own OCSP cache, so
11 // Necko shouldn't also be caching them.
13 do_get_profile(); // must be called before getting nsIX509CertDB
15 const SERVER_PORT = 8888;
17 function add_flush_cache() {
18   add_test(() => {
19     // This appears to either fire multiple times or fire once for every
20     // observer that has ever been passed to flush. To prevent multiple calls to
21     // run_next_test, keep track of if this observer has already called it.
22     let observed = false;
23     let observer = {
24       observe: () => {
25         if (!observed) {
26           observed = true;
27           run_next_test();
28         }
29       },
30     };
31     Services.cache2.QueryInterface(Ci.nsICacheTesting).flush(observer);
32   });
35 function add_ocsp_necko_cache_test(loadContext) {
36   // Pre-testcase cleanup/setup.
37   add_test(() => {
38     Services.cache2.clear();
39     run_next_test();
40   });
41   add_flush_cache();
43   let responder;
44   add_test(() => {
45     clearOCSPCache();
46     clearSessionCache();
47     responder = startOCSPResponder(
48       SERVER_PORT,
49       "localhost",
50       "ocsp_certs",
51       ["default-ee"],
52       [],
53       [],
54       [],
55       [["Cache-Control", "max-age=1000"]]
56     );
57     run_next_test();
58   });
60   // Prepare a connection that will cause an OCSP request.
61   add_connection_test(
62     "ocsp-stapling-none.example.com",
63     PRErrorCodeSuccess,
64     null,
65     null,
66     null,
67     loadContext.originAttributes
68   );
70   add_flush_cache();
72   // Traverse the cache and ensure the response was not cached.
73   add_test(() => {
74     let foundEntry = false;
75     let visitor = {
76       onCacheStorageInfo() {},
77       onCacheEntryInfo(aURI) {
78         Assert.equal(
79           aURI.spec,
80           "http://localhost:8888/",
81           "expected OCSP request URI should match"
82         );
83         foundEntry = true;
84       },
85       onCacheEntryVisitCompleted() {
86         Assert.ok(!foundEntry, "should not find a cached entry");
87         run_next_test();
88       },
89       QueryInterface: ChromeUtils.generateQI(["nsICacheStorageVisitor"]),
90     };
91     Services.cache2.asyncVisitAllStorages(visitor, true);
92   });
94   // Clean up (stop the responder).
95   add_test(() => {
96     responder.stop(run_next_test);
97   });
100 function run_test() {
101   Services.prefs.setIntPref("security.OCSP.enabled", 1);
102   add_tls_server_setup("OCSPStaplingServer", "ocsp_certs");
103   add_ocsp_necko_cache_test(Services.loadContextInfo.private);
104   add_ocsp_necko_cache_test(Services.loadContextInfo.default);
105   run_next_test();