diff options
Diffstat (limited to 'comm/mail/test/browser/shared-modules/NNTPHelpers.jsm')
-rw-r--r-- | comm/mail/test/browser/shared-modules/NNTPHelpers.jsm | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/comm/mail/test/browser/shared-modules/NNTPHelpers.jsm b/comm/mail/test/browser/shared-modules/NNTPHelpers.jsm new file mode 100644 index 0000000000..71c785c02c --- /dev/null +++ b/comm/mail/test/browser/shared-modules/NNTPHelpers.jsm @@ -0,0 +1,123 @@ +/* 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"; + +const EXPORTED_SYMBOLS = [ + "setupNNTPDaemon", + "NNTP_PORT", + "setupLocalServer", + "startupNNTPServer", + "shutdownNNTPServer", +]; + +var { MailServices } = ChromeUtils.import( + "resource:///modules/MailServices.jsm" +); +var { NewsArticle, NNTP_RFC977_handler, NntpDaemon } = ChromeUtils.import( + "resource://testing-common/mailnews/Nntpd.jsm" +); +var { nsMailServer } = ChromeUtils.import( + "resource://testing-common/mailnews/Maild.jsm" +); + +var kSimpleNewsArticle = + "From: John Doe <john.doe@example.com>\n" + + "Date: Sat, 24 Mar 1990 10:59:24 -0500\n" + + "Newsgroups: test.subscribe.simple\n" + + "Subject: H2G2 -- What does it mean?\n" + + "Message-ID: <TSS1@nntp.invalid>\n" + + "\n" + + "What does the acronym H2G2 stand for? I've seen it before...\n"; + +// The groups to set up on the fake server. +// It is an array of tuples, where the first element is the group name and the +// second element is whether or not we should subscribe to it. +var groups = [ + ["test.empty", false], + ["test.subscribe.empty", true], + ["test.subscribe.simple", true], + ["test.filter", true], +]; + +// Sets up the NNTP daemon object for use in fake server +function setupNNTPDaemon() { + var daemon = new NntpDaemon(); + + groups.forEach(function (element) { + daemon.addGroup(element[0]); + }); + + var article = new NewsArticle(kSimpleNewsArticle); + daemon.addArticleToGroup(article, "test.subscribe.simple", 1); + + return daemon; +} + +// Startup server +function startupNNTPServer(daemon, port) { + var handler = NNTP_RFC977_handler; + + function createHandler(daemon) { + return new handler(daemon); + } + + var server = new nsMailServer(createHandler, daemon); + server.start(port); + return server; +} + +// Shutdown server +function shutdownNNTPServer(server) { + server.stop(); +} + +// Enable strict threading +Services.prefs.setBoolPref("mail.strict_threading", true); + +// Make sure we don't try to use a protected port. I like adding 1024 to the +// default port when doing so... +var NNTP_PORT = 1024 + 119; + +var _server = null; + +function subscribeServer(incomingServer) { + // Subscribe to newsgroups + incomingServer.QueryInterface(Ci.nsINntpIncomingServer); + groups.forEach(function (element) { + if (element[1]) { + incomingServer.subscribeToNewsgroup(element[0]); + } + }); + // Only allow one connection + incomingServer.maximumConnectionsNumber = 1; +} + +// Sets up the client-side portion of fakeserver +function setupLocalServer(port) { + if (_server != null) { + return _server; + } + + var server = MailServices.accounts.createIncomingServer( + null, + "localhost", + "nntp" + ); + server.port = port; + server.valid = false; + + var account = MailServices.accounts.createAccount(); + account.incomingServer = server; + server.valid = true; + // hack to cause an account loaded notification now the server is valid + // (see also Bug 903804) + account.incomingServer = account.incomingServer; // eslint-disable-line no-self-assign + + subscribeServer(server); + + _server = server; + + return server; +} |