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

Side by Side Diff: chrome/android/junit/src/org/chromium/chrome/browser/omnibox/geo/VisibleNetworksTrackerTest.java

Issue 2883063003: Introduce Visible Networks Tracker. (Closed)
Patch Set: Introduce Visible Networks Tracker. This is used to keep a cache of visible networks and pre-comput… Created 3 years, 7 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
« no previous file with comments | « chrome/android/java_sources.gni ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2017 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.omnibox.geo;
6
7 import static org.junit.Assert.assertEquals;
8
9 import android.content.Context;
10
11 import org.junit.Before;
12 import org.junit.Test;
13 import org.junit.runner.RunWith;
14 import org.mockito.Mock;
15 import org.mockito.MockitoAnnotations;
16 import org.robolectric.annotation.Config;
17 import org.robolectric.annotation.Implementation;
18 import org.robolectric.annotation.Implements;
19 import org.robolectric.shadows.ShadowLooper;
20 import org.robolectric.shadows.ShadowSystemClock;
21
22 import org.chromium.base.ThreadUtils;
23 import org.chromium.chrome.browser.omnibox.geo.VisibleNetworks.VisibleCell;
24 import org.chromium.chrome.browser.omnibox.geo.VisibleNetworks.VisibleWifi;
25 import org.chromium.chrome.browser.omnibox.geo.VisibleNetworksTrackerTest.Shadow PlatformNetworksManager;
26 import org.chromium.testing.local.CustomShadowAsyncTask;
27 import org.chromium.testing.local.LocalRobolectricTestRunner;
28
29 import java.util.Arrays;
30 import java.util.HashSet;
31 import java.util.LinkedList;
32 import java.util.List;
33
34 /**
35 * Robolectric tests for {@link VisibleNetworksTracker}.
36 */
37 @RunWith(LocalRobolectricTestRunner.class)
38 @Config(manifest = Config.NONE,
39 shadows = {ShadowPlatformNetworksManager.class, CustomShadowAsyncTask.cl ass,
40 ShadowSystemClock.class})
41 public class VisibleNetworksTrackerTest {
42 private static final VisibleWifi VISIBLE_WIFI_1 =
43 VisibleWifi.create("ssid1", "11:11:11:11:11:11", 1, 10L);
44 private static final VisibleWifi VISIBLE_WIFI_2 =
45 VisibleWifi.create("ssid2", "11:11:11:11:11:12", 2, 20L);
46 private static final VisibleCell VISIBLE_CELL_1 =
47 VisibleCell.builder(VisibleCell.GSM_RADIO_TYPE)
48 .setCellId(30)
49 .setLocationAreaCode(31)
50 .setMobileCountryCode(32)
51 .setMobileNetworkCode(33)
52 .setTimestamp(30L)
53 .build();
54 private static final VisibleCell VISIBLE_CELL_2 =
55 VisibleCell.builder(VisibleCell.CDMA_RADIO_TYPE)
56 .setCellId(40)
57 .setLocationAreaCode(41)
58 .setMobileCountryCode(42)
59 .setMobileNetworkCode(43)
60 .setTimestamp(40L)
61 .build();
62
63 private static final VisibleNetworks FIRST_ALL_VISIBLE_NETWORKS =
64 VisibleNetworks.create(VISIBLE_WIFI_1, VISIBLE_CELL_1,
65 new HashSet<VisibleWifi>(Arrays.asList(VISIBLE_WIFI_1, VISIB LE_WIFI_2)),
66 new HashSet<VisibleCell>(Arrays.asList(VISIBLE_CELL_1, VISIB LE_CELL_2)));
67 private static final VisibleNetworks SECOND_ALL_VISIBLE_NETWORKS = VisibleNe tworks.create(
68 VISIBLE_WIFI_2, VISIBLE_CELL_2, new HashSet<VisibleWifi>(Arrays.asLi st(VISIBLE_WIFI_1)),
69 new HashSet<VisibleCell>(Arrays.asList(VISIBLE_CELL_1)));
70 private static final VisibleNetworks FIRST_ONLY_CONNECTED_NETWORKS =
71 VisibleNetworks.create(VISIBLE_WIFI_1, VISIBLE_CELL_1, null, null);
72 private static final VisibleNetworks SECOND_ONLY_CONNECTED_NETWORKS =
73 VisibleNetworks.create(VISIBLE_WIFI_2, VISIBLE_CELL_2, null, null);
74
75 private static final long CURRENT_TIME_MS = 90000000L;
76 private static final long ELAPSED_UNDER_THRESHOLD_TIME_MS =
77 VisibleNetworksTracker.AGE_THRESHOLD - 1000L;
78 private static final long ELAPSED_OVER_THRESHOLD_TIME_MS =
79 VisibleNetworksTracker.AGE_THRESHOLD + 1000L;
80
81 @Mock
82 private static Context sContext;
83
84 @Before
85 public void setUp() {
86 MockitoAnnotations.initMocks(this);
87 ShadowSystemClock.setCurrentTimeMillis(CURRENT_TIME_MS);
88 ShadowPlatformNetworksManager.sAllVisibleNetworks = new LinkedList<>(
89 Arrays.asList(FIRST_ALL_VISIBLE_NETWORKS, SECOND_ALL_VISIBLE_NET WORKS));
90 ShadowPlatformNetworksManager.sOnlyConnectedNetworks = new LinkedList<>(
91 Arrays.asList(FIRST_ONLY_CONNECTED_NETWORKS, SECOND_ONLY_CONNECT ED_NETWORKS));
92
93 // Make sure that the cache is empty before every test.
94 ThreadUtils.runOnUiThreadBlocking(new Runnable(){
95 @Override
96 public void run() {
97 VisibleNetworksTracker.clearCache();
98 }
99 });
100 }
101
102 @Test
103 public void testGetLastKnownVisibleNetworks_emptyCache() {
104 // Cache is empty before the getLastKnownVisibleNetworks call. The visib leNetworks
105 // are computed only for the connected wifi and cell and then cached.
106 VisibleNetworks visibleNetworks =
107 VisibleNetworksTracker.getLastKnownVisibleNetworks(sContext);
108 assertEquals(FIRST_ONLY_CONNECTED_NETWORKS, visibleNetworks);
109
110 // A background refresh should be triggered as a result, and compute all to cache them.
111 ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
112 assertEquals(FIRST_ALL_VISIBLE_NETWORKS, VisibleNetworksTracker.getCache dVisibleNetworks());
113 assertEquals(CURRENT_TIME_MS, VisibleNetworksTracker.getCachedVisibleNet worksTime());
114 }
115
116 @Test
117 public void testGetLastKnownVisibleNetworks_withValidCache() {
118 VisibleNetworks visibleNetworks =
119 VisibleNetworksTracker.getLastKnownVisibleNetworks(sContext);
120 assertEquals(FIRST_ONLY_CONNECTED_NETWORKS, visibleNetworks);
121
122 // Wait until cache is populated
123 ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
124
125 // Time to consider the first cached networks still as valid.
126 ShadowSystemClock.setCurrentTimeMillis(CURRENT_TIME_MS + ELAPSED_UNDER_T HRESHOLD_TIME_MS);
127 visibleNetworks = VisibleNetworksTracker.getLastKnownVisibleNetworks(sCo ntext);
128
129 assertEquals(FIRST_ALL_VISIBLE_NETWORKS, visibleNetworks);
130 assertEquals(FIRST_ALL_VISIBLE_NETWORKS, VisibleNetworksTracker.getCache dVisibleNetworks());
131 assertEquals(CURRENT_TIME_MS, VisibleNetworksTracker.getCachedVisibleNet worksTime());
132 }
133
134 @Test
135 public void testGetLastKnownVisibleNetworks_withOldCache() {
136 VisibleNetworks visibleNetworks =
137 VisibleNetworksTracker.getLastKnownVisibleNetworks(sContext);
138 assertEquals(FIRST_ONLY_CONNECTED_NETWORKS, visibleNetworks);
139
140 // Wait until cache is populated
141 ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
142
143 // Time to consider the first cached networks as invalid. Should fetch t he second ones.
144 ShadowSystemClock.setCurrentTimeMillis(CURRENT_TIME_MS + ELAPSED_OVER_TH RESHOLD_TIME_MS);
145 visibleNetworks = VisibleNetworksTracker.getLastKnownVisibleNetworks(sCo ntext);
146
147 assertEquals(SECOND_ONLY_CONNECTED_NETWORKS, visibleNetworks);
148
149 // A background refresh should be triggered as a result, and compute all to cache them.
150 ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
151 assertEquals(
152 SECOND_ALL_VISIBLE_NETWORKS, VisibleNetworksTracker.getCachedVis ibleNetworks());
153 assertEquals(CURRENT_TIME_MS + ELAPSED_OVER_THRESHOLD_TIME_MS,
154 VisibleNetworksTracker.getCachedVisibleNetworksTime());
155 }
156
157 @Test
158 public void testRefreshVisibleNetworks_emptyCache() {
159 // Cache is empty before the refreshVisibleNetworks call. The visibleNet works are
160 // computed including all the visible cells and wifis then cached.
161 VisibleNetworksTracker.refreshVisibleNetworks(sContext);
162 ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
163
164 assertEquals(FIRST_ALL_VISIBLE_NETWORKS, VisibleNetworksTracker.getCache dVisibleNetworks());
165 assertEquals(CURRENT_TIME_MS, VisibleNetworksTracker.getCachedVisibleNet worksTime());
166 }
167
168 @Test
169 public void testRefreshVisibleNetworks_validCache() {
170 VisibleNetworksTracker.refreshVisibleNetworks(sContext);
171 ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
172 assertEquals(FIRST_ALL_VISIBLE_NETWORKS, VisibleNetworksTracker.getCache dVisibleNetworks());
173 assertEquals(CURRENT_TIME_MS, VisibleNetworksTracker.getCachedVisibleNet worksTime());
174
175 // Time to consider the first cached networks still as valid, refresh sh ould be a noop.
176 ShadowSystemClock.setCurrentTimeMillis(CURRENT_TIME_MS + ELAPSED_UNDER_T HRESHOLD_TIME_MS);
177 VisibleNetworksTracker.refreshVisibleNetworks(sContext);
178 ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
179
180 assertEquals(FIRST_ALL_VISIBLE_NETWORKS, VisibleNetworksTracker.getCache dVisibleNetworks());
181 assertEquals(CURRENT_TIME_MS, VisibleNetworksTracker.getCachedVisibleNet worksTime());
182 }
183
184 @Test
185 public void testRefreshVisibleNetworks_oldCache() {
186 VisibleNetworksTracker.refreshVisibleNetworks(sContext);
187 ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
188 assertEquals(FIRST_ALL_VISIBLE_NETWORKS, VisibleNetworksTracker.getCache dVisibleNetworks());
189 assertEquals(CURRENT_TIME_MS, VisibleNetworksTracker.getCachedVisibleNet worksTime());
190
191 // Time to consider the first cached networks as invalid. Should fetch t he second ones.
192 ShadowSystemClock.setCurrentTimeMillis(CURRENT_TIME_MS + ELAPSED_OVER_TH RESHOLD_TIME_MS);
193 VisibleNetworksTracker.refreshVisibleNetworks(sContext);
194 ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
195
196 assertEquals(
197 SECOND_ALL_VISIBLE_NETWORKS, VisibleNetworksTracker.getCachedVis ibleNetworks());
198 assertEquals(CURRENT_TIME_MS + ELAPSED_OVER_THRESHOLD_TIME_MS,
199 VisibleNetworksTracker.getCachedVisibleNetworksTime());
200 }
201
202 /**
203 * Shadow PlatformNetworksManager for robolectric tests.
204 */
205 @Implements(PlatformNetworksManager.class)
206 public static class ShadowPlatformNetworksManager {
207 private static List<VisibleNetworks> sAllVisibleNetworks;
208 private static List<VisibleNetworks> sOnlyConnectedNetworks;
209
210 @Implementation
211 public static VisibleNetworks computeVisibleNetworks(
212 Context context, boolean includeAllVisibleNotConnectedNetworks) {
213 return includeAllVisibleNotConnectedNetworks ? sAllVisibleNetworks.r emove(0)
214 : sOnlyConnectedNetwork s.remove(0);
215 }
216 }
217 }
OLDNEW
« no previous file with comments | « chrome/android/java_sources.gni ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698