OLD | NEW |
(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 } |
OLD | NEW |