mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-14 11:42:04 +01:00
2eb13f48d2
git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/branches/smack_3_3_0@13561 b35dd754-fafc-0310-a699-88a17e54d16e
147 lines
5.8 KiB
Java
147 lines
5.8 KiB
Java
package org.jivesoftware.smack.util;
|
|
|
|
import static junit.framework.Assert.assertEquals;
|
|
import static junit.framework.Assert.assertNotNull;
|
|
import static junit.framework.Assert.assertTrue;
|
|
import static junit.framework.Assert.fail;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
|
|
import org.jivesoftware.smack.util.dns.DNSJavaResolver;
|
|
import org.jivesoftware.smack.util.dns.DNSResolver;
|
|
import org.jivesoftware.smack.util.dns.HostAddress;
|
|
import org.jivesoftware.smack.util.dns.JavaxResolver;
|
|
import org.jivesoftware.smack.util.dns.SRVRecord;
|
|
import org.junit.Test;
|
|
|
|
public class DNSUtilTest {
|
|
private static final String igniterealtimeDomain = "igniterealtime.org";
|
|
private static final String igniterealtimeXMPPServer = "xmpp." + igniterealtimeDomain;
|
|
private static final int igniterealtimeClientPort = 5222;
|
|
private static final int igniterealtimeServerPort = 5269;
|
|
|
|
@Test
|
|
public void xmppClientDomainJavaXTest() {
|
|
DNSResolver resolver = JavaxResolver.maybeGetInstance();
|
|
assertNotNull(resolver);
|
|
DNSUtil.setDNSResolver(resolver);
|
|
xmppClientDomainTest();
|
|
}
|
|
|
|
@Test
|
|
public void xmppServerDomainJavaXTest() {
|
|
DNSResolver resolver = JavaxResolver.maybeGetInstance();
|
|
assertNotNull(resolver);
|
|
DNSUtil.setDNSResolver(resolver);
|
|
xmppServerDomainTest();
|
|
}
|
|
|
|
@Test
|
|
public void xmppClientDomainDNSJavaTest() {
|
|
DNSResolver resolver = DNSJavaResolver.getInstance();
|
|
assertNotNull(resolver);
|
|
DNSUtil.setDNSResolver(resolver);
|
|
xmppClientDomainTest();
|
|
}
|
|
|
|
@Test
|
|
public void xmppServerDomainDNSJavaTest() {
|
|
DNSResolver resolver = DNSJavaResolver.getInstance();
|
|
assertNotNull(resolver);
|
|
DNSUtil.setDNSResolver(resolver);
|
|
xmppServerDomainTest();
|
|
}
|
|
|
|
@Test
|
|
public void sortSRVlowestPrioFirstTest() {
|
|
List<HostAddress> sortedRecords = DNSUtil.sortSRVRecords(createSRVRecords());
|
|
assertTrue(sortedRecords.get(0).getFQDN().equals("0.20.foo.bar"));
|
|
}
|
|
|
|
@Test
|
|
public void sortSRVdistributeOverWeights() {
|
|
int weight50 = 0;
|
|
int weight20one = 0;
|
|
int weight20two = 0;
|
|
int weight10 = 0;
|
|
for (int i = 0; i < 1000; i++) {
|
|
List<HostAddress> sortedRecords = DNSUtil.sortSRVRecords(createSRVRecords());
|
|
String host = sortedRecords.get(1).getFQDN();
|
|
if (host.equals("5.20.one.foo.bar")) {
|
|
weight20one++;
|
|
} else if (host.equals("5.20.two.foo.bar")) {
|
|
weight20two++;
|
|
} else if (host.equals("5.10.foo.bar")) {
|
|
weight10++;
|
|
} else if (host.equals("5.50.foo.bar")) {
|
|
weight50++;
|
|
} else {
|
|
fail("Wrong host after SRVRecord sorting");
|
|
}
|
|
}
|
|
assertTrue(weight50 > 400 && weight50 < 600);
|
|
assertTrue(weight20one > 100 && weight20one < 300);
|
|
assertTrue(weight20two > 100 && weight20two < 300);
|
|
assertTrue(weight10 > 0&& weight10 < 200);
|
|
}
|
|
|
|
@Test
|
|
public void sortSRVdistributeZeroWeights() {
|
|
int weightZeroOne = 0;
|
|
int weightZeroTwo = 0;
|
|
for (int i = 0; i < 1000; i++) {
|
|
List<HostAddress> sortedRecords = DNSUtil.sortSRVRecords(createSRVRecords());
|
|
// Remove the first 5 records with a lower priority
|
|
for (int j = 0; j < 5; j++) {
|
|
sortedRecords.remove(0);
|
|
}
|
|
String host = sortedRecords.remove(0).getFQDN();
|
|
if (host.equals("10.0.one.foo.bar")) {
|
|
weightZeroOne++;
|
|
} else if (host.endsWith("10.0.two.foo.bar")) {
|
|
weightZeroTwo++;
|
|
} else {
|
|
fail("Wrong host after SRVRecord sorting");
|
|
}
|
|
}
|
|
assertTrue(weightZeroOne > 400 && weightZeroOne < 600);
|
|
assertTrue(weightZeroTwo > 400 && weightZeroTwo < 600);
|
|
}
|
|
|
|
private void xmppClientDomainTest() {
|
|
List<HostAddress> hostAddresses = DNSUtil.resolveXMPPDomain(igniterealtimeDomain);
|
|
HostAddress ha = hostAddresses.get(0);
|
|
assertEquals(ha.getFQDN(), igniterealtimeXMPPServer);
|
|
assertEquals(ha.getPort(), igniterealtimeClientPort);
|
|
}
|
|
|
|
private void xmppServerDomainTest() {
|
|
List<HostAddress> hostAddresses = DNSUtil.resolveXMPPServerDomain(igniterealtimeDomain);
|
|
HostAddress ha = hostAddresses.get(0);
|
|
assertEquals(ha.getFQDN(), igniterealtimeXMPPServer);
|
|
assertEquals(ha.getPort(), igniterealtimeServerPort);
|
|
}
|
|
|
|
private static List<SRVRecord> createSRVRecords() {
|
|
List<SRVRecord> records = new ArrayList<SRVRecord>();
|
|
// We create one record with priority 0 that should also be tried first
|
|
// Then 4 records with priority 5 and different weights (50, 20, 20, 10)
|
|
// Then 2 records with priority 10 and weight 0 which should be treaded equal
|
|
// These records are added in a 'random' way to the list
|
|
try {
|
|
records.add(new SRVRecord("5.20.one.foo.bar", 42, 5, 20)); // Priority 5, Weight 20
|
|
records.add(new SRVRecord("10.0.one.foo.bar", 42, 10, 0)); // Priority 10, Weight 0
|
|
records.add(new SRVRecord("5.10.foo.bar", 42, 5, 10)); // Priority 5, Weight 10
|
|
records.add(new SRVRecord("10.0.two.foo.bar", 42, 10, 0)); // Priority 10, Weight 0
|
|
records.add(new SRVRecord("5.20.two.foo.bar", 42, 5, 20)); // Priority 5, Weight 20
|
|
records.add(new SRVRecord("0.20.foo.bar", 42, 0, 20)); // Priority 0, Weight 20
|
|
records.add(new SRVRecord("5.50.foo.bar", 42, 5, 50)); // Priority 5, Weight 50
|
|
} catch (IllegalArgumentException e) {
|
|
// Ignore
|
|
}
|
|
assertTrue(records.size() > 0);
|
|
return records;
|
|
}
|
|
}
|