package com.qiniu.android.dns;
import android.test.AndroidTestCase;
import com.qiniu.android.dns.local.AndroidDnsServer;
import com.qiniu.android.dns.local.HijackingDetectWrapper;
import com.qiniu.android.dns.local.Resolver;
import junit.framework.Assert;
import java.io.IOException;
import java.net.InetAddress;
import java.util.TimeZone;
/**
* Created by bailong on 15/6/21.
*/
public class DnsTest extends AndroidTestCase {
private boolean flag = false;
public void testDns() throws IOException {
IResolver[] resolvers = new IResolver[2];
resolvers[0] = AndroidDnsServer.defaultResolver();
resolvers[1] = new Resolver(InetAddress.getByName("223.5.5.5"));
DnsManager dns = new DnsManager(NetworkInfo.normal, resolvers);
String[] ips = dns.query("www.qiniu.com");
assertNotNull(ips);
assertTrue(ips.length > 0);
}
public void testCnc() throws IOException {
IResolver[] resolvers = new IResolver[2];
resolvers[0] = AndroidDnsServer.defaultResolver();
resolvers[1] = new Resolver(InetAddress.getByName("223.5.5.5"));
DnsManager dns = new DnsManager(new NetworkInfo(NetworkInfo.NetSatus.MOBILE, NetworkInfo.ISP_CNC), resolvers);
dns.putHosts("hello.qiniu.com", "1.1.1.1");
dns.putHosts("hello.qiniu.com", "2.2.2.2");
dns.putHosts("qiniu.com", "3.3.3.3");
dns.putHosts("qiniu.com", "4.4.4.4", NetworkInfo.ISP_CNC);
Domain d = new Domain("qiniu.com", false, true);
String[] r = dns.query(d);
Assert.assertEquals(1, r.length);
Assert.assertEquals("4.4.4.4", r[0]);
}
public void testTtl() throws IOException {
IResolver[] resolvers = new IResolver[2];
resolvers[0] = AndroidDnsServer.defaultResolver();
resolvers[1] = new HijackingDetectWrapper(
new Resolver(InetAddress.getByName("223.5.5.5")));
DnsManager dns = new DnsManager(new NetworkInfo(
NetworkInfo.NetSatus.MOBILE, NetworkInfo.ISP_CNC), resolvers);
dns.putHosts("hello.qiniu.com", "1.1.1.1");
dns.putHosts("hello.qiniu.com", "2.2.2.2");
dns.putHosts("qiniu.com", "3.3.3.3");
dns.putHosts("qiniu.com", "4.4.4.4", NetworkInfo.ISP_CNC);
Domain d = new Domain("qiniu.com", false, false, 10);
String[] r = dns.query(d);
Assert.assertEquals(1, r.length);
Assert.assertEquals("4.4.4.4", r[0]);
d = new Domain("qiniu.com", false, false, 1000);
r = dns.query(d);
Assert.assertEquals(1, r.length);
Assert.assertTrue(!"4.4.4.4".equals(r[0]));
}
public void testCname() throws IOException {
IResolver[] resolvers = new IResolver[2];
resolvers[0] = AndroidDnsServer.defaultResolver();
resolvers[1] = new HijackingDetectWrapper(
new Resolver(InetAddress.getByName("114.114.115.115")));
DnsManager dns = new DnsManager(NetworkInfo.normal, resolvers);
dns.putHosts("hello.qiniu.com", "1.1.1.1");
dns.putHosts("hello.qiniu.com", "2.2.2.2");
dns.putHosts("qiniu.com", "3.3.3.3");
dns.putHosts("qiniu.com", "4.4.4.4", NetworkInfo.ISP_CNC);
Domain d = new Domain("qiniu.com", true);
String[] r = dns.query(d);
Assert.assertEquals(1, r.length);
Assert.assertEquals("3.3.3.3", r[0]);
d = new Domain("qiniu.com", false);
r = dns.query(d);
Assert.assertEquals(1, r.length);
Assert.assertTrue(!"3.3.3.3".equals(r[0]));
}
public void testSort() throws IOException {
IResolver[] resolvers = new IResolver[1];
resolvers[0] = new HijackingDetectWrapper(
new Resolver(InetAddress.getByName("114.114.115.115")));
IpSorter sorter = new IpSorter() {
@Override
public String[] sort(String[] ips) {
String[] ret = new String[ips.length];
if (flag) {
ret[0] = "2.2.2.2";
ret[1] = "1.1.1.1";
} else {
ret[0] = "1.1.1.1";
ret[1] = "2.2.2.2";
}
return ret;
}
};
DnsManager dns = new DnsManager(NetworkInfo.normal, resolvers, sorter);
dns.putHosts("hello.qiniu.com", "1.1.1.1");
dns.putHosts("hello.qiniu.com", "2.2.2.2");
dns.putHosts("qiniu.com", "3.3.3.3");
dns.putHosts("qiniu.com", "4.4.4.4", NetworkInfo.ISP_CNC);
Domain d = new Domain("hello.qiniu.com", true, true);
String[] ips = dns.query(d);
Assert.assertEquals(2, ips.length);
Assert.assertEquals("1.1.1.1", ips[0]);
Assert.assertEquals("2.2.2.2", ips[1]);
flag = true;
d = new Domain("hello.qiniu.com", true, true);
ips = dns.query(d);
Assert.assertEquals(2, ips.length);
Assert.assertEquals("2.2.2.2", ips[0]);
Assert.assertEquals("1.1.1.1", ips[1]);
}
public void testNull() {
IResolver[] resolvers = new IResolver[1];
resolvers[0] = AndroidDnsServer.defaultResolver();
DnsManager dns = new DnsManager(NetworkInfo.normal, resolvers);
IOException e = null;
try {
dns.query((String) null);
} catch (IOException ex) {
ex.printStackTrace();
e = ex;
}
assertNotNull(e);
e = null;
try {
dns.query((Domain) null);
} catch (IOException ex) {
ex.printStackTrace();
e = ex;
}
assertNotNull(e);
e = null;
try {
dns.query("");
} catch (IOException ex) {
ex.printStackTrace();
e = ex;
}
assertNotNull(e);
}
public void testIp() throws IOException {
IResolver[] resolvers = new IResolver[1];
resolvers[0] = AndroidDnsServer.defaultResolver();
DnsManager dns = new DnsManager(NetworkInfo.normal, resolvers);
String[] ips = dns.query("1.1.1.1");
assertEquals(ips.length, 1);
assertEquals(ips[0], "1.1.1.1");
}
public void testNeedHttpdns() {
String id = TimeZone.getDefault().getID();
if (id.equals("Asia/Shanghai")) {
assertEquals(true, DnsManager.needHttpDns());
} else {
assertEquals(false, DnsManager.needHttpDns());
}
}
}