Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(44)

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/physicalweb/UrlManagerTest.java

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

Powered by Google App Engine
This is Rietveld 408576698