Skip to content

Commit 0e03d8e

Browse files
authored
UC query result support disk cache (#506)
1 parent cdbba26 commit 0e03d8e

File tree

17 files changed

+590
-375
lines changed

17 files changed

+590
-375
lines changed

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,23 @@ public final class TestConfig {
1010
// TODO: 2020-05-09 bad token for testPutBytesWithFixedZoneUseBackupDomains
1111
// 华东上传凭证
1212
public static final String bucket_z0 = "kodo-phone-zone0-space";
13-
public static final String token_z0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:IySl002XpGBWsDKkKNK7g_ByUrU=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTAtc3BhY2UiLCJkZWFkbGluZSI6MTcwMjI2NDUyOSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpLCBcImZzaXplXCI6JChmc2l6ZSl9In0=";
13+
public static final String token_z0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:kCuN1lxE7wby0SgsYmgleVQh5pk=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTAtc3BhY2UiLCJkZWFkbGluZSI6MTcwMjk1Mzg5MSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpLCBcImZzaXplXCI6JChmc2l6ZSl9In0=";
1414
// 华北上传凭证
1515
public static final String bucket_z1 = "kodo-phone-zone1-space";
16-
public static final String token_z1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:SRqIrj9rqtDuq7N9ZuZppqnFvGI=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTEtc3BhY2UiLCJkZWFkbGluZSI6MTcwMjI2NDUyOSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpLCBcImZzaXplXCI6JChmc2l6ZSl9In0=";
16+
public static final String token_z1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:6GJohI_Ldf_hBwGATV3iYeuMVZ0=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTEtc3BhY2UiLCJkZWFkbGluZSI6MTcwMjk1Mzg5MSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpLCBcImZzaXplXCI6JChmc2l6ZSl9In0=";
1717
// 华南上传凭证
1818
public static final String bucket_z2 = "kodo-phone-zone2-space";
19-
public static final String token_z2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:59MIAaRbhMJUjyTayLSsTMO99H8=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTItc3BhY2UiLCJkZWFkbGluZSI6MTcwMjI2NDUyOSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpLCBcImZzaXplXCI6JChmc2l6ZSl9In0=";
19+
public static final String token_z2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:gy-wF5GQuoffNKUmRMKC0wVQDHQ=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTItc3BhY2UiLCJkZWFkbGluZSI6MTcwMjk1Mzg5MSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpLCBcImZzaXplXCI6JChmc2l6ZSl9In0=";
2020
// 北美上传凭证
2121
public static final String bucket_na0 = "kodo-phone-zone-na0-space";
22-
public static final String token_na0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:hv6IeMz-bitw_nxnxYEeWJPRFq4=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1uYTAtc3BhY2UiLCJkZWFkbGluZSI6MTcwMjI2NDUyOSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpLCBcImZzaXplXCI6JChmc2l6ZSl9In0=";
22+
public static final String token_na0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:mEbYwqz9BbvKpjemh7arZA01SCY=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1uYTAtc3BhY2UiLCJkZWFkbGluZSI6MTcwMjk1Mzg5MSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpLCBcImZzaXplXCI6JChmc2l6ZSl9In0=";
2323
// 东南亚上传凭证
2424
public static final String bucket_as0 = "kodo-phone-zone-as0-space";
25-
public static final String token_as0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:umlUjNLKvlx7QM9dA7r7xD0Kolc=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1hczAtc3BhY2UiLCJkZWFkbGluZSI6MTcwMjI2NDUyOSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpLCBcImZzaXplXCI6JChmc2l6ZSl9In0=";
25+
public static final String token_as0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:b5V9b1I3FCrNYJ1aQznlcGvyKe0=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1hczAtc3BhY2UiLCJkZWFkbGluZSI6MTcwMjk1Mzg5MSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpLCBcImZzaXplXCI6JChmc2l6ZSl9In0=";
2626
// 华北浙江2上传凭证
2727
public static final String bucket_cn_east_2 = "kodo-phone-cn-east-2";
28-
public static final String token_cn_east_2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:3p87j64XIiAFG7H73leG8zjU120=:eyJzY29wZSI6ImtvZG8tcGhvbmUtY24tZWFzdC0yIiwiZGVhZGxpbmUiOjE3MDIyNjQ1MjksICJyZXR1cm5Cb2R5Ijoie1wiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKSwgXCJmc2l6ZVwiOiQoZnNpemUpfSJ9";
29-
public static final String invalidBucketToken = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:Bq_GcfQI_T5hZl78g1SboR4o75k=:eyJzY29wZSI6InpvbmVfaW52YWxpZCIsImRlYWRsaW5lIjoxNzAyMjY0NTI5LCAicmV0dXJuQm9keSI6IntcImZvb1wiOiQoeDpmb28pLCBcImJhclwiOiQoeDpiYXIpLCBcIm1pbWVUeXBlXCI6JChtaW1lVHlwZSksIFwiaGFzaFwiOiQoZXRhZyksIFwia2V5XCI6JChrZXkpLCBcImZuYW1lXCI6JChmbmFtZSksIFwiZnNpemVcIjokKGZzaXplKX0ifQ==";
28+
public static final String token_cn_east_2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:5wMZsrDWTJuYW-aYz6AsBJJhol4=:eyJzY29wZSI6ImtvZG8tcGhvbmUtY24tZWFzdC0yIiwiZGVhZGxpbmUiOjE3MDI5NTM4OTEsICJyZXR1cm5Cb2R5Ijoie1wiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKSwgXCJmc2l6ZVwiOiQoZnNpemUpfSJ9";
29+
public static final String invalidBucketToken = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:AF6tAFx4teQul_zEMXWzbN79_eI=:eyJzY29wZSI6InpvbmVfaW52YWxpZCIsImRlYWRsaW5lIjoxNzAyOTUzODkxLCAicmV0dXJuQm9keSI6IntcImZvb1wiOiQoeDpmb28pLCBcImJhclwiOiQoeDpiYXIpLCBcIm1pbWVUeXBlXCI6JChtaW1lVHlwZSksIFwiaGFzaFwiOiQoZXRhZyksIFwia2V5XCI6JChrZXkpLCBcImZuYW1lXCI6JChmbmFtZSksIFwiZnNpemVcIjokKGZzaXplKX0ifQ==";
3030

3131
// -----------
3232
public static final String ak = "bjtWBQXrcxgo7HWwlC_bgHg81j352_GhgBGZPeOW";

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,12 @@ public void complete(int code, ResponseInfo responseInfo, UploadRegionRequestMet
4040
ZonesInfo info = zone.getZonesInfo(token);
4141
assertTrue("before clear cache: info was null", info != null);
4242
assertTrue("before clear cache: info was't valid", info.isValid());
43-
assertTrue("before clear cache: info was temporary", !info.isTemporary());
4443

44+
// 清除不能影响通过 token 获取 ZonesInfo
4545
AutoZone.clearCache();
4646
info = zone.getZonesInfo(token);
4747
assertTrue("after clear cache: info was null", info != null);
4848
assertTrue("after clear cache: info was't valid", info.isValid());
49-
assertTrue("after clear cache: info was't temporary", info.isTemporary());
5049
}
5150

5251
@Test
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package com.qiniu.android.utils;
2+
3+
import androidx.test.ext.junit.runners.AndroidJUnit4;
4+
5+
import com.qiniu.android.BaseTest;
6+
7+
import org.json.JSONException;
8+
import org.json.JSONObject;
9+
import org.junit.Test;
10+
import org.junit.runner.RunWith;
11+
12+
@RunWith(AndroidJUnit4.class)
13+
public class CacheTest extends BaseTest {
14+
15+
@Test
16+
public void testCache() {
17+
Info info = new Info();
18+
info.foo = "foo";
19+
info.bar = 1;
20+
21+
String key = "info_key";
22+
Cache cache = new Cache.Builder(Info.class)
23+
.setVersion("v1")
24+
.setFlushCount(1)
25+
.builder();
26+
27+
cache.cache(key, info, true);
28+
29+
30+
// 1. 测试内存缓存
31+
Info memInfo = (Info) cache.cacheForKey(key);
32+
assertEquals("foo", memInfo.foo);
33+
34+
// 2. 测试删除内存缓存
35+
cache.clearMemoryCache();
36+
memInfo = (Info) cache.cacheForKey(key);
37+
assertEquals(null, memInfo);
38+
39+
// 3. 测试 load
40+
cache = new Cache.Builder(Info.class)
41+
.setVersion("v1")
42+
.setFlushCount(1)
43+
.builder();
44+
memInfo = (Info) cache.cacheForKey(key);
45+
assertEquals("foo", memInfo.foo);
46+
47+
// 4. 测试清除磁盘缓存测试
48+
cache.clearDiskCache();
49+
cache = new Cache.Builder(Info.class)
50+
.setVersion("v1")
51+
.setFlushCount(1)
52+
.builder();
53+
memInfo = (Info) cache.cacheForKey(key);
54+
assertEquals(null, memInfo);
55+
56+
// 5. 测试异步 flush
57+
cache.cache(key, info, false);
58+
59+
try {
60+
Thread.sleep(3 * 1000);
61+
} catch (Exception e) {
62+
}
63+
64+
cache = new Cache.Builder(Info.class)
65+
.setVersion("v1")
66+
.setFlushCount(1)
67+
.builder();
68+
memInfo = (Info) cache.cacheForKey(key);
69+
assertEquals("foo", memInfo.foo);
70+
assertEquals(1, memInfo.bar);
71+
}
72+
73+
static class Info implements Cache.Object {
74+
String foo;
75+
int bar;
76+
77+
Info(){
78+
}
79+
80+
public Info(JSONObject jsonObject) {
81+
if (jsonObject == null) {
82+
return;
83+
}
84+
85+
this.foo = jsonObject.optString("foo");
86+
this.bar = jsonObject.optInt("bar");
87+
}
88+
89+
@Override
90+
public JSONObject toJson() {
91+
JSONObject jsonObject = new JSONObject();
92+
try {
93+
jsonObject.put("foo", this.foo);
94+
jsonObject.put("bar", this.bar);
95+
} catch (JSONException e) {
96+
e.printStackTrace();
97+
}
98+
return jsonObject;
99+
}
100+
}
101+
}

library/src/androidTest/java/com/qiniu/android/utils/SingleFlightTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public void testAsyncRetry() {
9898
testStatus.maxCount = 1000;
9999
testStatus.completeCount = 0;
100100

101-
SingleFlight singleFlight = new SingleFlight();
101+
SingleFlight<String> singleFlight = new SingleFlight<>();
102102
for (int i = 0; i < testStatus.maxCount; i++) {
103103
singleFlightPerform(singleFlight, i, 0, true, new CompleteHandler() {
104104
@Override
@@ -121,16 +121,16 @@ public boolean shouldWait() {
121121
LogUtil.d("== async completeCount:" + testStatus.completeCount + " end");
122122
}
123123

124-
private void singleFlightPerform(final SingleFlight singleFlight,
124+
private void singleFlightPerform(final SingleFlight<String> singleFlight,
125125
final int index,
126126
final int retryCount,
127127
final boolean isAsync,
128128
final CompleteHandler completeHandler) {
129129

130130
try {
131-
singleFlight.perform("key", new SingleFlight.ActionHandler() {
131+
singleFlight.perform("key", new SingleFlight.ActionHandler<String>() {
132132
@Override
133-
public void action(final SingleFlight.CompleteHandler singleFlightCompleteHandler) throws Exception {
133+
public void action(final SingleFlight.CompleteHandler<String> singleFlightCompleteHandler) throws Exception {
134134

135135
final CompleteHandler completeHandlerP = new CompleteHandler() {
136136
@Override
@@ -160,9 +160,9 @@ public void run() {
160160
completeHandlerP.complete();
161161
}
162162
}
163-
}, new SingleFlight.CompleteHandler() {
163+
}, new SingleFlight.CompleteHandler<String>() {
164164
@Override
165-
public void complete(Object value) {
165+
public void complete(String value) {
166166
if (retryCount < RetryCount) {
167167
singleFlightPerform(singleFlight, index, retryCount + 1, isAsync, completeHandler);
168168
} else {

0 commit comments

Comments
 (0)