summaryrefslogtreecommitdiffstats
path: root/comm/chat/protocols/xmpp/test/test_dnsSrv.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/chat/protocols/xmpp/test/test_dnsSrv.js')
-rw-r--r--comm/chat/protocols/xmpp/test/test_dnsSrv.js112
1 files changed, 112 insertions, 0 deletions
diff --git a/comm/chat/protocols/xmpp/test/test_dnsSrv.js b/comm/chat/protocols/xmpp/test/test_dnsSrv.js
new file mode 100644
index 0000000000..37f1b6b052
--- /dev/null
+++ b/comm/chat/protocols/xmpp/test/test_dnsSrv.js
@@ -0,0 +1,112 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+var { XMPPAccountPrototype } = ChromeUtils.importESModule(
+ "resource:///modules/xmpp-base.sys.mjs"
+);
+var { XMPPSession } = ChromeUtils.importESModule(
+ "resource:///modules/xmpp-session.sys.mjs"
+);
+var { SRVRecord } = ChromeUtils.import("resource:///modules/DNS.jsm");
+
+function FakeXMPPSession() {}
+FakeXMPPSession.prototype = {
+ __proto__: XMPPSession.prototype,
+ _account: { __proto__: XMPPAccountPrototype },
+ _host: null,
+ _port: 0,
+ connect(
+ aHostOrigin,
+ aPortOrigin,
+ aSecurity,
+ aProxy,
+ aHost = aHostOrigin,
+ aPort = aPortOrigin
+ ) {},
+ _connectNextRecord() {
+ this.isConnectNextRecord = true;
+ },
+
+ // Used to indicate that method _connectNextRecord is called or not.
+ isConnectNextRecord: false,
+
+ LOG(aMsg) {},
+ WARN(aMsg) {},
+};
+
+var TEST_DATA = [
+ {
+ // Test sorting based on priority and weight.
+ input: [
+ new SRVRecord(20, 0, "xmpp.instantbird.com", 5222),
+ new SRVRecord(5, 0, "xmpp1.instantbird.com", 5222),
+ new SRVRecord(10, 0, "xmpp2.instantbird.com", 5222),
+ new SRVRecord(0, 0, "xmpp3.instantbird.com", 5222),
+ new SRVRecord(15, 0, "xmpp4.instantbird.com", 5222),
+ ],
+ output: [
+ new SRVRecord(0, 0, "xmpp3.instantbird.com", 5222),
+ new SRVRecord(5, 0, "xmpp1.instantbird.com", 5222),
+ new SRVRecord(10, 0, "xmpp2.instantbird.com", 5222),
+ new SRVRecord(15, 0, "xmpp4.instantbird.com", 5222),
+ new SRVRecord(20, 0, "xmpp.instantbird.com", 5222),
+ ],
+ isConnectNextRecord: true,
+ },
+ {
+ input: [
+ new SRVRecord(5, 30, "xmpp5.instantbird.com", 5222),
+ new SRVRecord(5, 0, "xmpp1.instantbird.com", 5222),
+ new SRVRecord(10, 60, "xmpp2.instantbird.com", 5222),
+ new SRVRecord(5, 10, "xmpp3.instantbird.com", 5222),
+ new SRVRecord(20, 10, "xmpp.instantbird.com", 5222),
+ new SRVRecord(15, 0, "xmpp4.instantbird.com", 5222),
+ ],
+ output: [
+ new SRVRecord(5, 30, "xmpp5.instantbird.com", 5222),
+ new SRVRecord(5, 10, "xmpp3.instantbird.com", 5222),
+ new SRVRecord(5, 0, "xmpp1.instantbird.com", 5222),
+ new SRVRecord(10, 60, "xmpp2.instantbird.com", 5222),
+ new SRVRecord(15, 0, "xmpp4.instantbird.com", 5222),
+ new SRVRecord(20, 10, "xmpp.instantbird.com", 5222),
+ ],
+ isConnectNextRecord: true,
+ },
+
+ // Tests no SRV records are found.
+ {
+ input: [],
+ output: [],
+ isConnectNextRecord: false,
+ },
+
+ // Tests XMPP is not supported if the result is one record with target ".".
+ {
+ input: [new SRVRecord(5, 30, ".", 5222)],
+ output: XMPPSession.prototype.SRV_ERROR_XMPP_NOT_SUPPORTED,
+ isConnectNextRecord: false,
+ },
+ {
+ input: [new SRVRecord(5, 30, "xmpp.instantbird.com", 5222)],
+ output: [new SRVRecord(5, 30, "xmpp.instantbird.com", 5222)],
+ isConnectNextRecord: true,
+ },
+];
+
+function run_test() {
+ for (let currentQuery of TEST_DATA) {
+ let session = new FakeXMPPSession();
+ try {
+ session._handleSrvQuery(currentQuery.input);
+ equal(session._srvRecords.length, currentQuery.output.length);
+ for (let index = 0; index < session._srvRecords.length; index++) {
+ deepEqual(session._srvRecords[index], currentQuery.output[index]);
+ }
+ } catch (e) {
+ equal(e, currentQuery.output);
+ }
+ equal(session.isConnectNextRecord, currentQuery.isConnectNextRecord);
+ }
+
+ run_next_test();
+}