diff options
Diffstat (limited to 'comm/chat/protocols/xmpp/test/test_dnsSrv.js')
-rw-r--r-- | comm/chat/protocols/xmpp/test/test_dnsSrv.js | 112 |
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(); +} |