OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.chrome.browser.physicalweb; | 5 package org.chromium.chrome.browser.physicalweb; |
6 | 6 |
7 import android.content.SharedPreferences; | 7 import android.content.SharedPreferences; |
| 8 import android.support.test.InstrumentationRegistry; |
8 import android.support.test.filters.SmallTest; | 9 import android.support.test.filters.SmallTest; |
9 import android.test.InstrumentationTestCase; | 10 |
| 11 import org.junit.Assert; |
| 12 import org.junit.Before; |
| 13 import org.junit.Test; |
| 14 import org.junit.runner.RunWith; |
10 | 15 |
11 import org.chromium.base.ContextUtils; | 16 import org.chromium.base.ContextUtils; |
12 import org.chromium.base.test.util.DisabledTest; | 17 import org.chromium.base.test.util.DisabledTest; |
13 import org.chromium.base.test.util.FlakyTest; | 18 import org.chromium.base.test.util.FlakyTest; |
14 import org.chromium.base.test.util.RetryOnFailure; | 19 import org.chromium.base.test.util.RetryOnFailure; |
| 20 import org.chromium.chrome.test.ChromeJUnit4ClassRunner; |
15 import org.chromium.content.browser.test.util.Criteria; | 21 import org.chromium.content.browser.test.util.Criteria; |
16 import org.chromium.content.browser.test.util.CriteriaHelper; | 22 import org.chromium.content.browser.test.util.CriteriaHelper; |
17 | 23 |
18 import java.util.ArrayList; | 24 import java.util.ArrayList; |
19 import java.util.HashSet; | 25 import java.util.HashSet; |
20 import java.util.List; | 26 import java.util.List; |
21 import java.util.Set; | 27 import java.util.Set; |
22 | 28 |
23 /** | 29 /** |
24 * Tests for {@link UrlManager}. | 30 * Tests for {@link UrlManager}. |
25 */ | 31 */ |
26 public class UrlManagerTest extends InstrumentationTestCase { | 32 @RunWith(ChromeJUnit4ClassRunner.class) |
| 33 public class UrlManagerTest { |
27 private static final String URL1 = "https://example.com/"; | 34 private static final String URL1 = "https://example.com/"; |
28 private static final String TITLE1 = "Example"; | 35 private static final String TITLE1 = "Example"; |
29 private static final String DESC1 = "Example Website"; | 36 private static final String DESC1 = "Example Website"; |
30 private static final String URL2 = "https://google.com/"; | 37 private static final String URL2 = "https://google.com/"; |
31 private static final String TITLE2 = "Google"; | 38 private static final String TITLE2 = "Google"; |
32 private static final String DESC2 = "Search the Web"; | 39 private static final String DESC2 = "Search the Web"; |
33 private static final String URL3 = "https://html5zombo.com/"; | 40 private static final String URL3 = "https://html5zombo.com/"; |
34 private static final String URL4 = "https://hooli.xyz/"; | 41 private static final String URL4 = "https://hooli.xyz/"; |
35 private static final String URL5 = "https://www.gmail.com/mail/help/paper/"; | 42 private static final String URL5 = "https://www.gmail.com/mail/help/paper/"; |
36 private static final String GROUP1 = "group1"; | 43 private static final String GROUP1 = "group1"; |
37 private static final String GROUP2 = "group2"; | 44 private static final String GROUP2 = "group2"; |
38 private static final String GROUP3 = "group3"; | 45 private static final String GROUP3 = "group3"; |
39 private static final String PREF_PHYSICAL_WEB = "physical_web"; | 46 private static final String PREF_PHYSICAL_WEB = "physical_web"; |
40 private static final int PHYSICAL_WEB_OFF = 0; | 47 private static final int PHYSICAL_WEB_OFF = 0; |
41 private static final int PHYSICAL_WEB_ON = 1; | 48 private static final int PHYSICAL_WEB_ON = 1; |
42 private static final int PHYSICAL_WEB_ONBOARDING = 2; | 49 private static final int PHYSICAL_WEB_ONBOARDING = 2; |
43 private UrlManager mUrlManager = null; | 50 private UrlManager mUrlManager = null; |
44 private MockPwsClient mMockPwsClient = null; | 51 private MockPwsClient mMockPwsClient = null; |
45 | 52 |
46 @Override | 53 @Before |
47 protected void setUp() throws Exception { | 54 public void setUp() throws Exception { |
48 super.setUp(); | |
49 ContextUtils.getAppSharedPreferences() | 55 ContextUtils.getAppSharedPreferences() |
50 .edit() | 56 .edit() |
51 .putInt(PREF_PHYSICAL_WEB, PHYSICAL_WEB_ON) | 57 .putInt(PREF_PHYSICAL_WEB, PHYSICAL_WEB_ON) |
52 .apply(); | 58 .apply(); |
53 UrlManager.clearPrefsForTesting(); | 59 UrlManager.clearPrefsForTesting(); |
54 mUrlManager = new UrlManager(); | 60 mUrlManager = new UrlManager(); |
55 mMockPwsClient = new MockPwsClient(); | 61 mMockPwsClient = new MockPwsClient(); |
56 mUrlManager.overridePwsClientForTesting(mMockPwsClient); | 62 mUrlManager.overridePwsClientForTesting(mMockPwsClient); |
57 } | 63 } |
58 | 64 |
(...skipping 29 matching lines...) Expand all Loading... |
88 mMockPwsClient.addPwsResults(new ArrayList<PwsResult>()); | 94 mMockPwsClient.addPwsResults(new ArrayList<PwsResult>()); |
89 } | 95 } |
90 | 96 |
91 private void setOnboarding() { | 97 private void setOnboarding() { |
92 ContextUtils.getAppSharedPreferences() | 98 ContextUtils.getAppSharedPreferences() |
93 .edit() | 99 .edit() |
94 .putInt(PREF_PHYSICAL_WEB, PHYSICAL_WEB_ONBOARDING) | 100 .putInt(PREF_PHYSICAL_WEB, PHYSICAL_WEB_ONBOARDING) |
95 .apply(); | 101 .apply(); |
96 } | 102 } |
97 | 103 |
| 104 @Test |
98 @SmallTest | 105 @SmallTest |
99 @RetryOnFailure | 106 @RetryOnFailure |
100 public void testAddUrlAfterClearAllUrlsWorks() { | 107 public void testAddUrlAfterClearAllUrlsWorks() { |
101 addPwsResult1(); | 108 addPwsResult1(); |
102 addPwsResult2(); | 109 addPwsResult2(); |
103 addPwsResult1(); | 110 addPwsResult1(); |
104 addPwsResult2(); | 111 addPwsResult2(); |
105 addUrlInfo1(); | 112 addUrlInfo1(); |
106 addUrlInfo2(); | 113 addUrlInfo2(); |
107 getInstrumentation().waitForIdleSync(); | 114 InstrumentationRegistry.getInstrumentation().waitForIdleSync(); |
108 mUrlManager.clearAllUrls(); | 115 mUrlManager.clearAllUrls(); |
109 | 116 |
110 // Add some more URLs...this should not crash if we cleared correctly. | 117 // Add some more URLs...this should not crash if we cleared correctly. |
111 addUrlInfo1(); | 118 addUrlInfo1(); |
112 addUrlInfo2(); | 119 addUrlInfo2(); |
113 getInstrumentation().waitForIdleSync(); | 120 InstrumentationRegistry.getInstrumentation().waitForIdleSync(); |
114 List<UrlInfo> urlInfos = mUrlManager.getUrls(); | 121 List<UrlInfo> urlInfos = mUrlManager.getUrls(); |
115 assertEquals(2, urlInfos.size()); | 122 Assert.assertEquals(2, urlInfos.size()); |
116 } | 123 } |
117 | 124 |
| 125 @Test |
118 @SmallTest | 126 @SmallTest |
119 @RetryOnFailure | 127 @RetryOnFailure |
120 public void testClearNearbyUrlsWorks() { | 128 public void testClearNearbyUrlsWorks() { |
121 addPwsResult1(); | 129 addPwsResult1(); |
122 addPwsResult2(); | 130 addPwsResult2(); |
123 addUrlInfo1(); | 131 addUrlInfo1(); |
124 addUrlInfo2(); | 132 addUrlInfo2(); |
125 getInstrumentation().waitForIdleSync(); | 133 InstrumentationRegistry.getInstrumentation().waitForIdleSync(); |
126 | 134 |
127 mUrlManager.clearNearbyUrls(); | 135 mUrlManager.clearNearbyUrls(); |
128 | 136 |
129 // Test that the URLs are not nearby, but do exist in the cache. | 137 // Test that the URLs are not nearby, but do exist in the cache. |
130 List<UrlInfo> urlInfos = mUrlManager.getUrls(true); | 138 List<UrlInfo> urlInfos = mUrlManager.getUrls(true); |
131 assertEquals(0, urlInfos.size()); | 139 Assert.assertEquals(0, urlInfos.size()); |
132 assertTrue(mUrlManager.containsInAnyCache(URL1)); | 140 Assert.assertTrue(mUrlManager.containsInAnyCache(URL1)); |
133 assertTrue(mUrlManager.containsInAnyCache(URL2)); | 141 Assert.assertTrue(mUrlManager.containsInAnyCache(URL2)); |
134 | 142 |
135 mUrlManager.clearAllUrls(); | 143 mUrlManager.clearAllUrls(); |
136 | 144 |
137 // Test that cache is empty. | 145 // Test that cache is empty. |
138 assertFalse(mUrlManager.containsInAnyCache(URL1)); | 146 Assert.assertFalse(mUrlManager.containsInAnyCache(URL1)); |
139 assertFalse(mUrlManager.containsInAnyCache(URL2)); | 147 Assert.assertFalse(mUrlManager.containsInAnyCache(URL2)); |
140 } | 148 } |
141 | 149 |
| 150 @Test |
142 @SmallTest | 151 @SmallTest |
143 @RetryOnFailure | 152 @RetryOnFailure |
144 public void testAddUrlGarbageCollectsForSize() throws Exception { | 153 public void testAddUrlGarbageCollectsForSize() throws Exception { |
145 // Add and remove 101 URLs, making sure one is clearly slightly older th
an the others. | 154 // Add and remove 101 URLs, making sure one is clearly slightly older th
an the others. |
146 addEmptyPwsResult(); | 155 addEmptyPwsResult(); |
147 UrlInfo urlInfo = new UrlInfo(URL1, -1.0, System.currentTimeMillis() - 1
); | 156 UrlInfo urlInfo = new UrlInfo(URL1, -1.0, System.currentTimeMillis() - 1
); |
148 mUrlManager.addUrl(urlInfo); | 157 mUrlManager.addUrl(urlInfo); |
149 mUrlManager.removeUrl(urlInfo); | 158 mUrlManager.removeUrl(urlInfo); |
150 for (int i = 1; i <= mUrlManager.getMaxCacheSize(); i++) { | 159 for (int i = 1; i <= mUrlManager.getMaxCacheSize(); i++) { |
151 mMockPwsClient.addPwsResults(new ArrayList<PwsResult>()); | 160 mMockPwsClient.addPwsResults(new ArrayList<PwsResult>()); |
152 urlInfo = new UrlInfo(URL1 + i, -1.0, System.currentTimeMillis()); | 161 urlInfo = new UrlInfo(URL1 + i, -1.0, System.currentTimeMillis()); |
153 mUrlManager.addUrl(urlInfo); | 162 mUrlManager.addUrl(urlInfo); |
154 mUrlManager.removeUrl(urlInfo); | 163 mUrlManager.removeUrl(urlInfo); |
155 } | 164 } |
156 | 165 |
157 // Make our cache is missing the first URL and contains the others. | 166 // Make our cache is missing the first URL and contains the others. |
158 assertFalse(mUrlManager.containsInAnyCache(URL1)); | 167 Assert.assertFalse(mUrlManager.containsInAnyCache(URL1)); |
159 assertTrue(mUrlManager.containsInAnyCache(URL1 + 1)); | 168 Assert.assertTrue(mUrlManager.containsInAnyCache(URL1 + 1)); |
160 assertTrue(mUrlManager.containsInAnyCache(URL1 + mUrlManager.getMaxCache
Size())); | 169 Assert.assertTrue(mUrlManager.containsInAnyCache(URL1 + mUrlManager.getM
axCacheSize())); |
161 } | 170 } |
162 | 171 |
| 172 @Test |
163 @SmallTest | 173 @SmallTest |
164 public void testAddUrlGarbageCollectsForAge() throws Exception { | 174 public void testAddUrlGarbageCollectsForAge() throws Exception { |
165 // Add a URL with a phony timestamp. | 175 // Add a URL with a phony timestamp. |
166 addEmptyPwsResult(); | 176 addEmptyPwsResult(); |
167 addEmptyPwsResult(); | 177 addEmptyPwsResult(); |
168 UrlInfo urlInfo1 = new UrlInfo(URL1, -1.0, 0); | 178 UrlInfo urlInfo1 = new UrlInfo(URL1, -1.0, 0); |
169 UrlInfo urlInfo2 = new UrlInfo(URL2, -1.0, System.currentTimeMillis()); | 179 UrlInfo urlInfo2 = new UrlInfo(URL2, -1.0, System.currentTimeMillis()); |
170 mUrlManager.addUrl(urlInfo1); | 180 mUrlManager.addUrl(urlInfo1); |
171 mUrlManager.removeUrl(urlInfo1); | 181 mUrlManager.removeUrl(urlInfo1); |
172 mUrlManager.addUrl(urlInfo2); | 182 mUrlManager.addUrl(urlInfo2); |
173 mUrlManager.removeUrl(urlInfo2); | 183 mUrlManager.removeUrl(urlInfo2); |
174 | 184 |
175 // Make sure only URL2 is still in the cache. | 185 // Make sure only URL2 is still in the cache. |
176 assertFalse(mUrlManager.containsInAnyCache(URL1)); | 186 Assert.assertFalse(mUrlManager.containsInAnyCache(URL1)); |
177 assertTrue(mUrlManager.containsInAnyCache(URL2)); | 187 Assert.assertTrue(mUrlManager.containsInAnyCache(URL2)); |
178 } | 188 } |
179 | 189 |
| 190 @Test |
180 @SmallTest | 191 @SmallTest |
181 public void testAddUrlUpdatesCache() throws Exception { | 192 public void testAddUrlUpdatesCache() throws Exception { |
182 addEmptyPwsResult(); | 193 addEmptyPwsResult(); |
183 addEmptyPwsResult(); | 194 addEmptyPwsResult(); |
184 | 195 |
185 UrlInfo urlInfo = new UrlInfo(URL1); | 196 UrlInfo urlInfo = new UrlInfo(URL1); |
186 mUrlManager.addUrl(urlInfo); | 197 mUrlManager.addUrl(urlInfo); |
187 List<UrlInfo> urls = mUrlManager.getUrls(true); | 198 List<UrlInfo> urls = mUrlManager.getUrls(true); |
188 assertEquals(1, urls.size()); | 199 Assert.assertEquals(1, urls.size()); |
189 assertEquals(urlInfo.getDistance(), urls.get(0).getDistance()); | 200 Assert.assertEquals(urlInfo.getDistance(), urls.get(0).getDistance(), 0)
; |
190 assertEquals(urlInfo.getDeviceAddress(), urls.get(0).getDeviceAddress())
; | 201 Assert.assertEquals(urlInfo.getDeviceAddress(), urls.get(0).getDeviceAdd
ress()); |
191 assertEquals(urlInfo.getFirstSeenTimestamp(), urls.get(0).getFirstSeenTi
mestamp()); | 202 Assert.assertEquals(urlInfo.getFirstSeenTimestamp(), urls.get(0).getFirs
tSeenTimestamp()); |
192 | 203 |
193 urlInfo = new UrlInfo(URL1).setDistance(100.0).setDeviceAddress("00:11:2
2:33:AA:BB"); | 204 urlInfo = new UrlInfo(URL1).setDistance(100.0).setDeviceAddress("00:11:2
2:33:AA:BB"); |
194 mUrlManager.addUrl(urlInfo); | 205 mUrlManager.addUrl(urlInfo); |
195 urls = mUrlManager.getUrls(true); | 206 urls = mUrlManager.getUrls(true); |
196 assertEquals(1, urls.size()); | 207 Assert.assertEquals(1, urls.size()); |
197 assertEquals(urlInfo.getDistance(), urls.get(0).getDistance()); | 208 Assert.assertEquals(urlInfo.getDistance(), urls.get(0).getDistance(), 0)
; |
198 assertEquals(urlInfo.getDeviceAddress(), urls.get(0).getDeviceAddress())
; | 209 Assert.assertEquals(urlInfo.getDeviceAddress(), urls.get(0).getDeviceAdd
ress()); |
199 } | 210 } |
200 | 211 |
| 212 @Test |
201 @SmallTest | 213 @SmallTest |
202 @RetryOnFailure | 214 @RetryOnFailure |
203 public void testAddUrlTwiceWorks() throws Exception { | 215 public void testAddUrlTwiceWorks() throws Exception { |
204 // Add and remove an old URL twice and add new URL twice before removing
. | 216 // Add and remove an old URL twice and add new URL twice before removing
. |
205 // This should cover several issues involved with updating the cache que
ue. | 217 // This should cover several issues involved with updating the cache que
ue. |
206 addEmptyPwsResult(); | 218 addEmptyPwsResult(); |
207 addEmptyPwsResult(); | 219 addEmptyPwsResult(); |
208 addEmptyPwsResult(); | 220 addEmptyPwsResult(); |
209 addEmptyPwsResult(); | 221 addEmptyPwsResult(); |
210 UrlInfo urlInfo1 = new UrlInfo(URL1, -1.0, 0); | 222 UrlInfo urlInfo1 = new UrlInfo(URL1, -1.0, 0); |
211 UrlInfo urlInfo2 = new UrlInfo(URL2, -1.0, System.currentTimeMillis()); | 223 UrlInfo urlInfo2 = new UrlInfo(URL2, -1.0, System.currentTimeMillis()); |
212 mUrlManager.addUrl(urlInfo1); | 224 mUrlManager.addUrl(urlInfo1); |
213 mUrlManager.removeUrl(urlInfo1); | 225 mUrlManager.removeUrl(urlInfo1); |
214 mUrlManager.addUrl(urlInfo1); | 226 mUrlManager.addUrl(urlInfo1); |
215 mUrlManager.removeUrl(urlInfo1); | 227 mUrlManager.removeUrl(urlInfo1); |
216 mUrlManager.addUrl(urlInfo2); | 228 mUrlManager.addUrl(urlInfo2); |
217 mUrlManager.addUrl(urlInfo2); | 229 mUrlManager.addUrl(urlInfo2); |
218 mUrlManager.removeUrl(urlInfo2); | 230 mUrlManager.removeUrl(urlInfo2); |
219 | 231 |
220 // Make sure only URL2 is still in the cache. | 232 // Make sure only URL2 is still in the cache. |
221 assertFalse(mUrlManager.containsInAnyCache(URL1)); | 233 Assert.assertFalse(mUrlManager.containsInAnyCache(URL1)); |
222 assertTrue(mUrlManager.containsInAnyCache(URL2)); | 234 Assert.assertTrue(mUrlManager.containsInAnyCache(URL2)); |
223 } | 235 } |
224 | 236 |
| 237 @Test |
225 @SmallTest | 238 @SmallTest |
226 public void testGetUrlsSortsAndDedups() throws Exception { | 239 public void testGetUrlsSortsAndDedups() throws Exception { |
227 // Construct results with matching group IDs and check that getUrls retu
rns only the closest | 240 // Construct results with matching group IDs and check that getUrls retu
rns only the closest |
228 // URL in each group. The list should be sorted by distance, closest fir
st. | 241 // URL in each group. The list should be sorted by distance, closest fir
st. |
229 addPwsResult1(); // GROUP1 | 242 addPwsResult1(); // GROUP1 |
230 addPwsResult2(); // GROUP2 | 243 addPwsResult2(); // GROUP2 |
231 mMockPwsClient.addPwsResult(new PwsResult(URL3, URL2 + "#a", null, TITLE
2, DESC2, GROUP2)); | 244 mMockPwsClient.addPwsResult(new PwsResult(URL3, URL2 + "#a", null, TITLE
2, DESC2, GROUP2)); |
232 mMockPwsClient.addPwsResult(new PwsResult(URL4, URL1, null, TITLE1, DESC
1, GROUP1)); | 245 mMockPwsClient.addPwsResult(new PwsResult(URL4, URL1, null, TITLE1, DESC
1, GROUP1)); |
233 mMockPwsClient.addPwsResult(new PwsResult(URL5, URL5, null, TITLE1, DESC
1, GROUP3)); | 246 mMockPwsClient.addPwsResult(new PwsResult(URL5, URL5, null, TITLE1, DESC
1, GROUP3)); |
234 mUrlManager.addUrl(new UrlInfo(URL1, 30.0, System.currentTimeMillis())); | 247 mUrlManager.addUrl(new UrlInfo(URL1, 30.0, System.currentTimeMillis())); |
235 mUrlManager.addUrl(new UrlInfo(URL2, 20.0, System.currentTimeMillis())); | 248 mUrlManager.addUrl(new UrlInfo(URL2, 20.0, System.currentTimeMillis())); |
236 mUrlManager.addUrl(new UrlInfo(URL3, 10.0, System.currentTimeMillis())); | 249 mUrlManager.addUrl(new UrlInfo(URL3, 10.0, System.currentTimeMillis())); |
237 mUrlManager.addUrl(new UrlInfo(URL4, 40.0, System.currentTimeMillis())); | 250 mUrlManager.addUrl(new UrlInfo(URL4, 40.0, System.currentTimeMillis())); |
238 mUrlManager.addUrl(new UrlInfo(URL5, 50.0, System.currentTimeMillis())); | 251 mUrlManager.addUrl(new UrlInfo(URL5, 50.0, System.currentTimeMillis())); |
239 getInstrumentation().waitForIdleSync(); | 252 InstrumentationRegistry.getInstrumentation().waitForIdleSync(); |
240 | 253 |
241 // Make sure URLs are in order and duplicates are omitted. | 254 // Make sure URLs are in order and duplicates are omitted. |
242 List<UrlInfo> urlInfos = mUrlManager.getUrls(); | 255 List<UrlInfo> urlInfos = mUrlManager.getUrls(); |
243 assertEquals(3, urlInfos.size()); | 256 Assert.assertEquals(3, urlInfos.size()); |
244 assertEquals(10.0, urlInfos.get(0).getDistance()); | 257 Assert.assertEquals(10.0, urlInfos.get(0).getDistance(), 0); |
245 assertEquals(URL3, urlInfos.get(0).getUrl()); | 258 Assert.assertEquals(URL3, urlInfos.get(0).getUrl()); |
246 assertEquals(30.0, urlInfos.get(1).getDistance()); | 259 Assert.assertEquals(30.0, urlInfos.get(1).getDistance(), 0); |
247 assertEquals(URL1, urlInfos.get(1).getUrl()); | 260 Assert.assertEquals(URL1, urlInfos.get(1).getUrl()); |
248 assertEquals(50.0, urlInfos.get(2).getDistance()); | 261 Assert.assertEquals(50.0, urlInfos.get(2).getDistance(), 0); |
249 assertEquals(URL5, urlInfos.get(2).getUrl()); | 262 Assert.assertEquals(URL5, urlInfos.get(2).getUrl()); |
250 } | 263 } |
251 | 264 |
252 /* | 265 /* |
253 * @SmallTest | 266 * @SmallTest |
254 * Bug=crbug.com/684148 | 267 * Bug=crbug.com/684148 |
255 */ | 268 */ |
| 269 @Test |
256 @DisabledTest | 270 @DisabledTest |
257 public void testSerializationWorksWithPoorlySerializedResult() throws Except
ion { | 271 public void testSerializationWorksWithPoorlySerializedResult() throws Except
ion { |
258 addPwsResult1(); | 272 addPwsResult1(); |
259 addPwsResult2(); | 273 addPwsResult2(); |
260 long curTime = System.currentTimeMillis(); | 274 long curTime = System.currentTimeMillis(); |
261 mUrlManager.addUrl(new UrlInfo(URL1, 99.5, curTime + 42)); | 275 mUrlManager.addUrl(new UrlInfo(URL1, 99.5, curTime + 42)); |
262 mUrlManager.addUrl(new UrlInfo(URL2, 100.5, curTime + 43)); | 276 mUrlManager.addUrl(new UrlInfo(URL2, 100.5, curTime + 43)); |
263 getInstrumentation().waitForIdleSync(); | 277 InstrumentationRegistry.getInstrumentation().waitForIdleSync(); |
264 | 278 |
265 // Create an invalid serialization. | 279 // Create an invalid serialization. |
266 Set<String> serializedUrls = new HashSet<>(); | 280 Set<String> serializedUrls = new HashSet<>(); |
267 serializedUrls.add(new UrlInfo(URL1, 99.5, curTime + 42).jsonSerialize()
.toString()); | 281 serializedUrls.add(new UrlInfo(URL1, 99.5, curTime + 42).jsonSerialize()
.toString()); |
268 serializedUrls.add("{\"not_a_value\": \"This is totally not a serialized
UrlInfo.\"}"); | 282 serializedUrls.add("{\"not_a_value\": \"This is totally not a serialized
UrlInfo.\"}"); |
269 ContextUtils.getAppSharedPreferences() | 283 ContextUtils.getAppSharedPreferences() |
270 .edit() | 284 .edit() |
271 .putStringSet("physicalweb_all_urls", serializedUrls) | 285 .putStringSet("physicalweb_all_urls", serializedUrls) |
272 .apply(); | 286 .apply(); |
273 | 287 |
274 // Make sure only the properly serialized URL is restored. | 288 // Make sure only the properly serialized URL is restored. |
275 UrlManager urlManager = new UrlManager(); | 289 UrlManager urlManager = new UrlManager(); |
276 List<UrlInfo> urlInfos = urlManager.getUrls(); | 290 List<UrlInfo> urlInfos = urlManager.getUrls(); |
277 assertEquals(0, urlInfos.size()); | 291 Assert.assertEquals(0, urlInfos.size()); |
278 assertTrue(urlManager.containsInAnyCache(URL1)); | 292 Assert.assertTrue(urlManager.containsInAnyCache(URL1)); |
279 assertTrue(urlManager.containsInAnyCache(URL2)); | 293 Assert.assertTrue(urlManager.containsInAnyCache(URL2)); |
280 } | 294 } |
281 | 295 |
| 296 @Test |
282 @FlakyTest(message = "https://crbug.com/685471") | 297 @FlakyTest(message = "https://crbug.com/685471") |
283 @SmallTest | 298 @SmallTest |
284 @RetryOnFailure | 299 @RetryOnFailure |
285 public void testSerializationWorksWithoutGarbageCollection() throws Exceptio
n { | 300 public void testSerializationWorksWithoutGarbageCollection() throws Exceptio
n { |
286 addPwsResult1(); | 301 addPwsResult1(); |
287 addPwsResult2(); | 302 addPwsResult2(); |
288 long curTime = System.currentTimeMillis(); | 303 long curTime = System.currentTimeMillis(); |
289 mUrlManager.addUrl(new UrlInfo(URL1, 99.5, curTime + 42)); | 304 mUrlManager.addUrl(new UrlInfo(URL1, 99.5, curTime + 42)); |
290 mUrlManager.addUrl(new UrlInfo(URL2, 100.5, curTime + 43)); | 305 mUrlManager.addUrl(new UrlInfo(URL2, 100.5, curTime + 43)); |
291 getInstrumentation().waitForIdleSync(); | 306 InstrumentationRegistry.getInstrumentation().waitForIdleSync(); |
292 | 307 |
293 // Make sure all URLs are restored. | 308 // Make sure all URLs are restored. |
294 UrlManager urlManager = new UrlManager(); | 309 UrlManager urlManager = new UrlManager(); |
295 List<UrlInfo> urlInfos = urlManager.getUrls(); | 310 List<UrlInfo> urlInfos = urlManager.getUrls(); |
296 assertEquals(0, urlInfos.size()); | 311 Assert.assertEquals(0, urlInfos.size()); |
297 assertTrue(urlManager.containsInAnyCache(URL1)); | 312 Assert.assertTrue(urlManager.containsInAnyCache(URL1)); |
298 assertTrue(urlManager.containsInAnyCache(URL2)); | 313 Assert.assertTrue(urlManager.containsInAnyCache(URL2)); |
299 Set<String> resolvedUrls = urlManager.getResolvedUrls(); | 314 Set<String> resolvedUrls = urlManager.getResolvedUrls(); |
300 assertEquals(2, resolvedUrls.size()); | 315 Assert.assertEquals(2, resolvedUrls.size()); |
301 } | 316 } |
302 | 317 |
| 318 @Test |
303 @SmallTest | 319 @SmallTest |
304 @RetryOnFailure | 320 @RetryOnFailure |
305 public void testSerializationWorksWithGarbageCollection() throws Exception { | 321 public void testSerializationWorksWithGarbageCollection() throws Exception { |
306 addPwsResult1(); | 322 addPwsResult1(); |
307 addPwsResult2(); | 323 addPwsResult2(); |
308 mUrlManager.addUrl(new UrlInfo(URL1, 99.5, 42)); | 324 mUrlManager.addUrl(new UrlInfo(URL1, 99.5, 42)); |
309 mUrlManager.addUrl(new UrlInfo(URL2, 100.5, 43)); | 325 mUrlManager.addUrl(new UrlInfo(URL2, 100.5, 43)); |
310 getInstrumentation().waitForIdleSync(); | 326 InstrumentationRegistry.getInstrumentation().waitForIdleSync(); |
311 | 327 |
312 // Make sure all URLs are restored. | 328 // Make sure all URLs are restored. |
313 UrlManager urlManager = new UrlManager(); | 329 UrlManager urlManager = new UrlManager(); |
314 List<UrlInfo> urlInfos = urlManager.getUrls(); | 330 List<UrlInfo> urlInfos = urlManager.getUrls(); |
315 assertEquals(0, urlInfos.size()); | 331 Assert.assertEquals(0, urlInfos.size()); |
316 Set<String> resolvedUrls = urlManager.getResolvedUrls(); | 332 Set<String> resolvedUrls = urlManager.getResolvedUrls(); |
317 assertEquals(0, resolvedUrls.size()); | 333 Assert.assertEquals(0, resolvedUrls.size()); |
318 } | 334 } |
319 | 335 |
| 336 @Test |
320 @SmallTest | 337 @SmallTest |
321 public void testUpgradeFromNone() throws Exception { | 338 public void testUpgradeFromNone() throws Exception { |
322 Set<String> oldResolvedUrls = new HashSet<String>(); | 339 Set<String> oldResolvedUrls = new HashSet<String>(); |
323 oldResolvedUrls.add("old"); | 340 oldResolvedUrls.add("old"); |
324 ContextUtils.getAppSharedPreferences() | 341 ContextUtils.getAppSharedPreferences() |
325 .edit() | 342 .edit() |
326 .remove(UrlManager.getVersionKey()) | 343 .remove(UrlManager.getVersionKey()) |
327 .putStringSet("physicalweb_nearby_urls", oldResolvedUrls) | 344 .putStringSet("physicalweb_nearby_urls", oldResolvedUrls) |
328 .putInt("org.chromium.chrome.browser.physicalweb.VERSION", 1) | 345 .putInt("org.chromium.chrome.browser.physicalweb.VERSION", 1) |
329 .putInt("org.chromium.chrome.browser.physicalweb.BOTTOM_BAR_DISP
LAY_COUNT", 1) | 346 .putInt("org.chromium.chrome.browser.physicalweb.BOTTOM_BAR_DISP
LAY_COUNT", 1) |
330 .apply(); | 347 .apply(); |
331 new UrlManager(); | 348 new UrlManager(); |
332 | 349 |
333 // Make sure the new prefs are populated and old prefs are gone. | 350 // Make sure the new prefs are populated and old prefs are gone. |
334 final SharedPreferences sharedPreferences = ContextUtils.getAppSharedPre
ferences(); | 351 final SharedPreferences sharedPreferences = ContextUtils.getAppSharedPre
ferences(); |
335 CriteriaHelper.pollInstrumentationThread(new Criteria() { | 352 CriteriaHelper.pollInstrumentationThread(new Criteria() { |
336 @Override | 353 @Override |
337 public boolean isSatisfied() { | 354 public boolean isSatisfied() { |
338 SharedPreferences sharedPreferences = ContextUtils.getAppSharedP
references(); | 355 SharedPreferences sharedPreferences = ContextUtils.getAppSharedP
references(); |
339 return sharedPreferences.contains(UrlManager.getVersionKey()) | 356 return sharedPreferences.contains(UrlManager.getVersionKey()) |
340 && !sharedPreferences.contains("physicalweb_nearby_urls"
) | 357 && !sharedPreferences.contains("physicalweb_nearby_urls"
) |
341 && !sharedPreferences.contains( | 358 && !sharedPreferences.contains( |
342 "org.chromium.chrome.browser.physicalweb.VERS
ION") | 359 "org.chromium.chrome.browser.physicalweb.VERS
ION") |
343 && !sharedPreferences.contains("org.chromium.chrome.brow
ser.physicalweb" | 360 && !sharedPreferences.contains("org.chromium.chrome.brow
ser.physicalweb" |
344 + ".BOTTOM_BAR_DISPLAY_COUNT"); | 361 + ".BOTTOM_BAR_DISPLAY_COUNT"); |
345 } | 362 } |
346 }, 5000, CriteriaHelper.DEFAULT_POLLING_INTERVAL); | 363 }, 5000, CriteriaHelper.DEFAULT_POLLING_INTERVAL); |
347 | 364 |
348 assertEquals( | 365 Assert.assertEquals( |
349 UrlManager.getVersion(), sharedPreferences.getInt(UrlManager.get
VersionKey(), 0)); | 366 UrlManager.getVersion(), sharedPreferences.getInt(UrlManager.get
VersionKey(), 0)); |
350 } | 367 } |
351 } | 368 } |
OLD | NEW |