summaryrefslogtreecommitdiffstats
path: root/security/manager/ssl/tests/unit/test_logoutAndTeardown.js
diff options
context:
space:
mode:
Diffstat (limited to 'security/manager/ssl/tests/unit/test_logoutAndTeardown.js')
-rw-r--r--security/manager/ssl/tests/unit/test_logoutAndTeardown.js55
1 files changed, 55 insertions, 0 deletions
diff --git a/security/manager/ssl/tests/unit/test_logoutAndTeardown.js b/security/manager/ssl/tests/unit/test_logoutAndTeardown.js
new file mode 100644
index 000000000..2bf8855fe
--- /dev/null
+++ b/security/manager/ssl/tests/unit/test_logoutAndTeardown.js
@@ -0,0 +1,55 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+do_get_profile();
+
+function connect_and_teardown() {
+ let socketTransportService =
+ Cc["@mozilla.org/network/socket-transport-service;1"]
+ .getService(Ci.nsISocketTransportService);
+
+ let tearDown = false;
+
+ let reader = {
+ onInputStreamReady: function(stream) {
+ throws(() => stream.available(), /NS_ERROR_FAILURE/,
+ "stream should be in an error state");
+ ok(tearDown, "A tear down attempt should have occurred");
+ run_next_test();
+ }
+ };
+
+ let sink = {
+ onTransportStatus: function(transport, status, progress, progressmax) {
+ if (status == Ci.nsISocketTransport.STATUS_CONNECTED_TO) {
+ // Try to logout and tear down the secure decoder ring.
+ // This should close and stream and notify the reader.
+ // The test will time out if this fails.
+ tearDown = true;
+ Cc["@mozilla.org/security/sdr;1"].getService(Ci.nsISecretDecoderRing)
+ .logoutAndTeardown();
+ }
+ }
+ };
+
+ Services.prefs.setCharPref("network.dns.localDomains",
+ "ocsp-stapling-none.example.com");
+ let transport = socketTransportService.createTransport(
+ ["ssl"], 1, "ocsp-stapling-none.example.com", 8443, null);
+ transport.setEventSink(sink, Services.tm.currentThread);
+
+ let inStream = transport.openInputStream(0, 0, 0)
+ .QueryInterface(Ci.nsIAsyncInputStream);
+ inStream.asyncWait(reader, Ci.nsIAsyncInputStream.WAIT_CLOSURE_ONLY, 0,
+ Services.tm.currentThread);
+}
+
+function run_test() {
+ add_tls_server_setup("OCSPStaplingServer", "ocsp_certs");
+ add_test(connect_and_teardown);
+ run_next_test();
+}