Skip to content

Commit 8509d09

Browse files
authored
Merge pull request #336 from JemyCheung/dns_prefetch
Dns prefetch
2 parents dbd2a01 + a262f76 commit 8509d09

File tree

22 files changed

+1641
-64
lines changed

22 files changed

+1641
-64
lines changed

library/library.iml

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -61,44 +61,48 @@
6161
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
6262
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
6363
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
64-
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
65-
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
66-
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
67-
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
68-
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
69-
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
70-
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
7164
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
7265
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
7366
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
7467
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
7568
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
7669
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
7770
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
71+
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
72+
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
73+
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
74+
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
75+
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
76+
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
77+
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
78+
<excludeFolder url="file://$MODULE_DIR$/build/.DS_Store" />
7879
<excludeFolder url="file://$MODULE_DIR$/build/docs" />
80+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
81+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
7982
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
8083
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
8184
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
8285
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
8386
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
87+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" />
8488
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" />
8589
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
8690
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
91+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
92+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
8793
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
8894
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
95+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
8996
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
90-
<excludeFolder url="file://$MODULE_DIR$/build/ivy.xml" />
9197
<excludeFolder url="file://$MODULE_DIR$/build/libs" />
9298
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
93-
<excludeFolder url="file://$MODULE_DIR$/build/poms" />
9499
<excludeFolder url="file://$MODULE_DIR$/build/reports" />
95100
<excludeFolder url="file://$MODULE_DIR$/build/test-results" />
96101
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
97102
</content>
98103
<orderEntry type="jdk" jdkName="Android API 26 Platform" jdkType="Android SDK" />
99104
<orderEntry type="sourceFolder" forTests="false" />
100-
<orderEntry type="library" exported="" name="Gradle: com.squareup.okio:okio:1.14.0@jar" level="project" />
101-
<orderEntry type="library" exported="" name="Gradle: com.squareup.okhttp3:okhttp:3.11.0@jar" level="project" />
102-
<orderEntry type="library" exported="" name="Gradle: android-android-26" level="project" />
105+
<orderEntry type="library" exported="" name="com.squareup.okio:okio:1.14.0@jar" level="project" />
106+
<orderEntry type="library" exported="" name="com.squareup.okhttp3:okhttp:3.11.0@jar" level="project" />
103107
</component>
104108
</module>

library/src/androidTest/java/com/qiniu/android/CancelTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ public void testFile() throws Throwable {
4444
checkTemp(ts, "testFile");
4545
}
4646

47-
public void testData() throws Throwable {
48-
Temp[] ts = new Temp[]{templateData(400, 0.2), templateData(700, 0.2), templateData(1024, 0.51), templateData(4 * 1024 + 785, 0.5), templateData(4 * 1024, 0.5), templateData(8 * 1024, 0.6)};
49-
checkTemp(ts, "testData");
50-
}
47+
// public void testData() throws Throwable {
48+
// Temp[] ts = new Temp[]{templateData(400, 0.2), templateData(700, 0.2), templateData(1024, 0.51), templateData(4 * 1024 + 785, 0.5), templateData(4 * 1024, 0.5), templateData(8 * 1024, 0.6)};
49+
// checkTemp(ts, "testData");
50+
// }
5151

5252
private void checkTemp(Temp[] ts, String type) {
5353
int failedCount = 0;
Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
package com.qiniu.android;
2+
3+
4+
import android.test.InstrumentationTestCase;
5+
import android.util.Log;
6+
7+
import com.qiniu.android.collect.Config;
8+
import com.qiniu.android.common.ZoneInfo;
9+
import com.qiniu.android.http.DnsPrefetcher;
10+
import com.qiniu.android.http.ResponseInfo;
11+
import com.qiniu.android.http.custom.DnsCacheKey;
12+
import com.qiniu.android.storage.Configuration;
13+
import com.qiniu.android.storage.Recorder;
14+
import com.qiniu.android.storage.UpCompletionHandler;
15+
import com.qiniu.android.storage.UpProgressHandler;
16+
import com.qiniu.android.storage.UploadManager;
17+
import com.qiniu.android.storage.UploadOptions;
18+
import com.qiniu.android.storage.persistent.DnsCacheFile;
19+
import com.qiniu.android.utils.AndroidNetwork;
20+
import com.qiniu.android.utils.StringUtils;
21+
22+
import org.json.JSONObject;
23+
24+
import java.io.File;
25+
import java.io.IOException;
26+
import java.net.InetAddress;
27+
import java.net.UnknownHostException;
28+
import java.util.List;
29+
import java.util.concurrent.ConcurrentHashMap;
30+
31+
/**
32+
* Created by jemy on 2019/8/20.
33+
*/
34+
35+
public class DnsApiTest extends InstrumentationTestCase {
36+
public void testDns() throws Throwable {
37+
List<InetAddress> inetAddresses = null;
38+
DnsPrefetcher dnsPrefetcher;
39+
// try {
40+
// inetAddresses = DnsPrefetcher.getDnsBySystem().lookup("upload.qiniup.com");
41+
// } catch (UnknownHostException e) {
42+
// e.printStackTrace();
43+
// }
44+
Log.e("qiniutest", "InetAddress: " + inetAddresses.size());
45+
//超耗时过程
46+
// for (int i = 0; i < inetAddresses.size(); i++) {
47+
// Log.e("qiniutest", "InetAddress.getCanonicalHostName: " + inetAddresses.get(i).getCanonicalHostName());
48+
//
49+
// }
50+
for (int i = 0; i < inetAddresses.size(); i++) {
51+
Log.e("qiniutest", "InetAddress.getHostAddress: " + inetAddresses.get(i).getHostAddress());
52+
}
53+
}
54+
55+
56+
public void testQueryDomain() {
57+
ZoneInfo info = null;
58+
59+
DnsPrefetcher dnsPrefetcher = DnsPrefetcher.getDnsPrefetcher();
60+
try {
61+
info = dnsPrefetcher.init(TestConfig.uptoken_prefetch).getPreQueryZone();
62+
} catch (UnknownHostException e) {
63+
e.printStackTrace();
64+
}
65+
if (info == null) {
66+
Log.e("qiniutest: ", "null");
67+
}
68+
Log.e("qiniutest: ", info.toString());
69+
Log.e("qiniutest: ", info.upDomainsList.get(0));
70+
}
71+
72+
73+
public void testLocalDomain() {
74+
List<ZoneInfo> info = null;
75+
DnsPrefetcher dnsPrefetcher = DnsPrefetcher.getDnsPrefetcher();
76+
try {
77+
info = dnsPrefetcher.init(TestConfig.uptoken_prefetch).getLocalZone();
78+
} catch (UnknownHostException e) {
79+
e.printStackTrace();
80+
}
81+
if (info == null) {
82+
Log.e("qiniutest: ", "null");
83+
}
84+
for (int i = 0; i < info.size(); i++) {
85+
Log.e("qiniutest: ", info.get(i).toString());
86+
}
87+
88+
}
89+
90+
91+
public void testLocalIp() {
92+
String s = AndroidNetwork.getHostIP();
93+
Log.e("qiniutest", s);
94+
}
95+
96+
public void testDnsPreAndcache() {
97+
Configuration config = new Configuration.Builder().build();
98+
boolean needPrefetch = DnsPrefetcher.checkRePrefetchDns(TestConfig.uptoken_prefetch, config);
99+
Log.e("qiniutest", "check:" + needPrefetch);
100+
if (needPrefetch) {
101+
DnsPrefetcher.startPrefetchDns(TestConfig.uptoken_prefetch, config);
102+
} else {
103+
testRecoverCache();
104+
return;
105+
}
106+
//预取或者recover success
107+
List<String> list = DnsPrefetcher.getDnsPrefetcher().getHosts();
108+
ConcurrentHashMap<String, List<InetAddress>> map = DnsPrefetcher.getDnsPrefetcher().getConcurrentHashMap();
109+
Log.e("qiniutest: ", "list size: " + list.size());
110+
for (String s : list) {
111+
Log.e("qiniutest: ", "uphost: " + s);
112+
List<InetAddress> list1 = map.get(s);
113+
for (InetAddress inetAddress :
114+
list1) {
115+
Log.e("qiniutest: ", "ip: " + inetAddress.getHostAddress());
116+
}
117+
}
118+
119+
}
120+
121+
//test recover
122+
public void testRecoverCache() {
123+
124+
Recorder recorder = null;
125+
try {
126+
recorder = new DnsCacheFile(Config.dnscacheDir);
127+
} catch (IOException e) {
128+
e.printStackTrace();
129+
}
130+
String fileName = recorder.getFileName();
131+
if (fileName == null) {
132+
Log.e("qiniutest: ", "recover file is null ");
133+
return;
134+
}
135+
byte[] data = recorder.get(recorder.getFileName());
136+
if (data == null) {
137+
Log.e("qiniutest: ", "recover data is null ");
138+
return;
139+
}
140+
DnsPrefetcher.recoverDnsCache(data);
141+
142+
143+
ConcurrentHashMap<String, List<InetAddress>> map1 = DnsPrefetcher.getDnsPrefetcher().getConcurrentHashMap();
144+
List<String> list = DnsPrefetcher.getDnsPrefetcher().getHosts();
145+
Log.e("qiniutest: ", "size for cache: " + list.size());
146+
for (String s : list) {
147+
Log.e("qiniutest: ", "uphost for cache: " + s);
148+
List<InetAddress> list1 = map1.get(s);
149+
for (InetAddress inetAddress :
150+
list1) {
151+
Log.e("qiniutest: ", "ip for cache: " + inetAddress.getHostAddress());
152+
}
153+
}
154+
}
155+
156+
int time = 0;
157+
final Object lock = new Object();
158+
159+
public void testAtomic() {
160+
final int size = 6 * 1024;
161+
for (int i = 0; i < 3; i++) {
162+
new Thread(new Runnable() {
163+
@Override
164+
public void run() {
165+
try {
166+
Configuration config = new Configuration.Builder().build();
167+
final UploadManager uploadManager = new UploadManager(config, 3);
168+
final String expectKey = "r=" + size + "k";
169+
final File f;
170+
f = TempFile.createFile(size);
171+
final UploadOptions uploadoption = new UploadOptions(null, null, false, new UpProgressHandler() {
172+
public void progress(String key, double percent) {
173+
Log.e("qiniutest", percent + "");
174+
}
175+
}, null);
176+
177+
uploadManager.put(f, expectKey, TestConfig.token_z0, new UpCompletionHandler() {
178+
public void complete(String k, ResponseInfo rinfo, JSONObject response) {
179+
Log.e("qiniutest", k + rinfo);
180+
time += 1;
181+
if (time == 3) {
182+
lock.notify();
183+
}
184+
}
185+
}, uploadoption);
186+
187+
188+
} catch (IOException e) {
189+
e.printStackTrace();
190+
}
191+
}
192+
}).start();
193+
}
194+
synchronized (lock) {
195+
try {
196+
lock.wait();
197+
} catch (InterruptedException e) {
198+
e.printStackTrace();
199+
}
200+
}
201+
}
202+
203+
public void testSerializable() {
204+
DnsCacheKey key = new DnsCacheKey("12321", "127.0.0.1", "akscope");
205+
Log.e("qiniutest", key.toString());
206+
DnsCacheKey key1 = DnsCacheKey.toCacheKey(key.toString());
207+
if (key1 == null) {
208+
return;
209+
}
210+
Log.e("qiniutest", key1.getCurrentTime() + ":" + key1.getLocalIp() + ":" + key1.getAkScope());
211+
212+
}
213+
214+
215+
}

library/src/androidTest/java/com/qiniu/android/ResumeUploadTest.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@
99
import com.qiniu.android.common.Zone;
1010
import com.qiniu.android.http.ResponseInfo;
1111
import com.qiniu.android.storage.Configuration;
12+
import com.qiniu.android.storage.Recorder;
1213
import com.qiniu.android.storage.UpCompletionHandler;
1314
import com.qiniu.android.storage.UpProgressHandler;
1415
import com.qiniu.android.storage.UploadManager;
1516
import com.qiniu.android.storage.UploadOptions;
17+
import com.qiniu.android.storage.persistent.FileRecorder;
1618

1719
import junit.framework.Assert;
1820

@@ -83,7 +85,7 @@ public void progress(String key, double percent) {
8385

8486
public void setUp() throws Exception {
8587
Configuration config = new Configuration.Builder().build();
86-
uploadManager = new UploadManager(config);
88+
uploadManager = new UploadManager(config, 3);
8789
ACollectUploadInfoTest.testInit();
8890
}
8991

@@ -120,7 +122,7 @@ public void complete(String k, ResponseInfo rinfo, JSONObject response) {
120122
// Assert.assertNotNull(resp);
121123
// String hash = resp.getString("hash");
122124
// Assert.assertEquals(hash, Etag.file(f));
123-
TempFile.remove(f);
125+
//TempFile.remove(f);
124126
// Assert.assertTrue("进度有变化,不大可能一直相同。" + getProgress(), !isProgressAllSame());
125127
Log.d(TAG, getProgress());
126128
ACollectUploadInfoTest.recordFileTest();
@@ -189,12 +191,12 @@ public void test4M1k2() throws Throwable {
189191
}
190192

191193
@LargeTest
192-
public void test4M() throws Throwable {
193-
template(1024 * 4);
194+
public void testResumeUploadFast() throws Throwable {
195+
template(1024 * 8);
194196
}
195197

196198
// @LargeTest
197199
// public void test8M1k() throws Throwable{
198200
// template(1024*8+1);
199201
// }
200-
}
202+
}

library/src/androidTest/java/com/qiniu/android/TestConfig.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
public final class TestConfig {
1010
//华东上传凭证
1111
public static final String bucket_z0 = "sdk-z0";
12-
public static final String token_z0 = "QWYn5TFQsLLU1pL5MFEmX3s5DmHdUThav9WyOWOm:KUw9Fxq8NoLTeZNsKkhTjoKpsuQ=:eyJzY29wZSI6InNkay16MCIsInJldHVybmJvZHkiOiJ7XCJoYXNoXCI6XCIkKGV0YWcpXCIsXCJrZXlcIjpcIiQoa2V5KVwiLFwiZm5hbWVcIjpcIiAkKGZuYW1lKSBcIixcImZzaXplXCI6XCIkKGZzaXplKVwiLFwibWltZVR5cGVcIjpcIiQobWltZVR5cGUpXCIsXCJmb29cIjpcIiQoeDpmb28pXCIsXCJiYXJcIjpcIiQoeDpiYXIpXCJ9IiwiZGVhZGxpbmUiOjQyOTQ5NjcyOTV9";
12+
public static final String token_z0 = "MP_Ebql_lSsUrDr7WrXn_5vKocQDLvTPCNEFeVmp:zfCfgMtCzO8l8iab_lbm402wZY8=:eyJzY29wZSI6ImFuZHJvaWR0ZXN0IiwiZGVhZGxpbmUiOjE1Njk4NTgzMTl9";
1313
//华北上传凭证
1414
public static final String bucket_z1 = "sdk-z1";
1515
public static final String token_z1 = "QWYn5TFQsLLU1pL5MFEmX3s5DmHdUThav9WyOWOm:ILIWwUZ7_hvZeKJzbBKvpo8DpYc=:eyJzY29wZSI6InNkay16MSIsInJldHVybmJvZHkiOiJ7XCJoYXNoXCI6XCIkKGV0YWcpXCIsXCJrZXlcIjpcIiQoa2V5KVwiLFwiZm5hbWVcIjpcIiAkKGZuYW1lKSBcIixcImZzaXplXCI6XCIkKGZzaXplKVwiLFwibWltZVR5cGVcIjpcIiQobWltZVR5cGUpXCIsXCJmb29cIjpcIiQoeDpmb28pXCIsXCJiYXJcIjpcIiQoeDpiYXIpXCJ9IiwiZGVhZGxpbmUiOjQyOTQ5NjcyOTV9";
@@ -21,6 +21,9 @@ public final class TestConfig {
2121
public static final String token_na0 = "QWYn5TFQsLLU1pL5MFEmX3s5DmHdUThav9WyOWOm:QxnYkUaYIw4fIsI133_tjFJ_03M=:eyJzY29wZSI6InNkay1uYTAiLCJyZXR1cm5ib2R5Ijoie1wiaGFzaFwiOlwiJChldGFnKVwiLFwia2V5XCI6XCIkKGtleSlcIixcImZuYW1lXCI6XCIgJChmbmFtZSkgXCIsXCJmc2l6ZVwiOlwiJChmc2l6ZSlcIixcIm1pbWVUeXBlXCI6XCIkKG1pbWVUeXBlKVwiLFwiZm9vXCI6XCIkKHg6Zm9vKVwiLFwiYmFyXCI6XCIkKHg6YmFyKVwifSIsImRlYWRsaW5lIjo0Mjk0OTY3Mjk1fQ==";
2222
public static final String ak = "QWYn5TFQsLLU1pL5MFEmX3s5DmHdUThav9WyOWOm";
2323

24+
//dns prefetch token
25+
public static final String uptoken_prefetch = "MP_Ebql_lSsUrDr7WrXn_5vKocQDLvTPCNEFeVmp:3KJpXCGMqm6EAYU71RF1HDmQrcE=:eyJzY29wZSI6ImFuZHJvaWR0ZXN0IiwiZGVhZGxpbmUiOjE1Njc0OTAxODF9";
26+
2427
/**
2528
* 华东机房
2629
*/

library/src/androidTest/java/com/qiniu/android/common/AutoZoneTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.qiniu.android.common;
22

33
import android.test.AndroidTestCase;
4+
import android.util.Log;
45

56
import com.qiniu.android.TestConfig;
67

@@ -76,10 +77,11 @@ public void onFailure(int reason) {
7677
e.printStackTrace();
7778
}
7879
ZoneInfo info = autoZone.zoneInfo(ak, bkt);
79-
// Log.d("zone0: ", info.toString());
80+
Log.d("qiniutest: ", info.toString());
8081

8182
ZoneInfo info2 = autoZone.zoneInfo(ak, bkt);
8283
Assert.assertSame(info, info2);
8384

8485
}
86+
8587
}

library/src/main/java/com/qiniu/android/collect/Config.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,18 @@ public final class Config {
7171
*/
7272
public static int interval = 10;
7373

74+
/**
75+
* dns缓存信息目录
76+
*/
77+
public static String dnscacheDir = "/sdcard/dnschache";
78+
79+
/**
80+
* preQuery host
81+
*/
82+
public static String preQueryHost = "uc.qbox.me";
83+
84+
public static int rePreHost = 2;
85+
7486
/**
7587
* 当网络切换到 wifi 下,切换到此设置
7688
*/

0 commit comments

Comments
 (0)