Merge NetworkStatsService handler changes.
===== Remove the need of accessing handler in NSS unit test Currently, to wait for handler becomes idle, specific message is used and the test would wait for condition variable to be open when the message is processed. However, this is already done in the HandlerUtils. Thus, there is no need to post such message manually in the handler. Test: atest FrameworksNetTests Bug: 150664039 Change-Id: Iab32b2dbab01634ca159dcb90fc9f929d1fed1a2 ===== Remove setHandler in NetworkStatsService Currently, internal handler is set by setHandler after constructing NSS object. This was introduced in ag/866187 to access the handler in the unit test. However, the design put NSS in a bad situation where all classes that need handler or executor could not be final and need to be dynamically allocated in order to get a valid handler. Thus, since the usage of handler is removed in previous patch, this change eliminate setHandler by initializing the handler in the constructor. Test: atest FrameworksNetTests Bug: 150664039 Change-Id: I794a24d00b0ca9fdc78091e7b9ab7307e0f034b7 ===== Bug: 150664039 Change-Id: If256ed4437ddcbcc72a6f766cff2f4cc512ee3f7 Merged-In: If256ed4437ddcbcc72a6f766cff2f4cc512ee3f7 (cherry picked from commit 2a6439d7e2a3926e10a0b9a4dc730b1a022d8138)
This commit is contained in:
committed by
Lorenzo Colitti
parent
fdb872c4ed
commit
911106c17c
@@ -64,6 +64,7 @@ import static org.mockito.Mockito.times;
|
|||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import android.annotation.NonNull;
|
||||||
import android.app.AlarmManager;
|
import android.app.AlarmManager;
|
||||||
import android.app.usage.NetworkStatsManager;
|
import android.app.usage.NetworkStatsManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -163,7 +164,6 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
private @Mock IBinder mBinder;
|
private @Mock IBinder mBinder;
|
||||||
private @Mock AlarmManager mAlarmManager;
|
private @Mock AlarmManager mAlarmManager;
|
||||||
private HandlerThread mHandlerThread;
|
private HandlerThread mHandlerThread;
|
||||||
private Handler mHandler;
|
|
||||||
|
|
||||||
private NetworkStatsService mService;
|
private NetworkStatsService mService;
|
||||||
private INetworkStatsSession mSession;
|
private INetworkStatsSession mSession;
|
||||||
@@ -192,15 +192,11 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
PowerManager.WakeLock wakeLock =
|
PowerManager.WakeLock wakeLock =
|
||||||
powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
|
powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
|
||||||
|
|
||||||
mService = new NetworkStatsService(
|
|
||||||
mServiceContext, mNetManager, mAlarmManager, wakeLock, mClock,
|
|
||||||
mServiceContext.getSystemService(TelephonyManager.class), mSettings,
|
|
||||||
mStatsFactory, new NetworkStatsObservers(), mStatsDir, getBaseDir(mStatsDir));
|
|
||||||
mHandlerThread = new HandlerThread("HandlerThread");
|
mHandlerThread = new HandlerThread("HandlerThread");
|
||||||
mHandlerThread.start();
|
final NetworkStatsService.Dependencies deps = makeDependencies();
|
||||||
Handler.Callback callback = new NetworkStatsService.HandlerCallback(mService);
|
mService = new NetworkStatsService(mServiceContext, mNetManager, mAlarmManager, wakeLock,
|
||||||
mHandler = new Handler(mHandlerThread.getLooper(), callback);
|
mClock, mServiceContext.getSystemService(TelephonyManager.class), mSettings,
|
||||||
mService.setHandler(mHandler, callback);
|
mStatsFactory, new NetworkStatsObservers(), mStatsDir, getBaseDir(mStatsDir), deps);
|
||||||
|
|
||||||
mElapsedRealtime = 0L;
|
mElapsedRealtime = 0L;
|
||||||
|
|
||||||
@@ -217,11 +213,21 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
|
|
||||||
// catch INetworkManagementEventObserver during systemReady()
|
// catch INetworkManagementEventObserver during systemReady()
|
||||||
ArgumentCaptor<INetworkManagementEventObserver> networkObserver =
|
ArgumentCaptor<INetworkManagementEventObserver> networkObserver =
|
||||||
ArgumentCaptor.forClass(INetworkManagementEventObserver.class);
|
ArgumentCaptor.forClass(INetworkManagementEventObserver.class);
|
||||||
verify(mNetManager).registerObserver(networkObserver.capture());
|
verify(mNetManager).registerObserver(networkObserver.capture());
|
||||||
mNetworkObserver = networkObserver.getValue();
|
mNetworkObserver = networkObserver.getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
private NetworkStatsService.Dependencies makeDependencies() {
|
||||||
|
return new NetworkStatsService.Dependencies() {
|
||||||
|
@Override
|
||||||
|
public HandlerThread makeHandlerThread() {
|
||||||
|
return mHandlerThread;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
public void tearDown() throws Exception {
|
public void tearDown() throws Exception {
|
||||||
IoUtils.deleteContents(mStatsDir);
|
IoUtils.deleteContents(mStatsDir);
|
||||||
@@ -234,6 +240,8 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
|
|
||||||
mSession.close();
|
mSession.close();
|
||||||
mService = null;
|
mService = null;
|
||||||
|
|
||||||
|
mHandlerThread.quitSafely();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -939,9 +947,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
long minThresholdInBytes = 2 * 1024 * 1024; // 2 MB
|
long minThresholdInBytes = 2 * 1024 * 1024; // 2 MB
|
||||||
assertEquals(minThresholdInBytes, request.thresholdInBytes);
|
assertEquals(minThresholdInBytes, request.thresholdInBytes);
|
||||||
|
|
||||||
// Send dummy message to make sure that any previous message has been handled
|
HandlerUtilsKt.waitForIdle(mHandlerThread, WAIT_TIMEOUT);
|
||||||
mHandler.sendMessage(mHandler.obtainMessage(-1));
|
|
||||||
HandlerUtilsKt.waitForIdle(mHandler, WAIT_TIMEOUT);
|
|
||||||
|
|
||||||
// Make sure that the caller binder gets connected
|
// Make sure that the caller binder gets connected
|
||||||
verify(mBinder).linkToDeath(any(IBinder.DeathRecipient.class), anyInt());
|
verify(mBinder).linkToDeath(any(IBinder.DeathRecipient.class), anyInt());
|
||||||
@@ -1077,7 +1083,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
|
|
||||||
// Simulates alert quota of the provider has been reached.
|
// Simulates alert quota of the provider has been reached.
|
||||||
cb.onAlertReached();
|
cb.onAlertReached();
|
||||||
HandlerUtilsKt.waitForIdle(mHandler, WAIT_TIMEOUT);
|
HandlerUtilsKt.waitForIdle(mHandlerThread, WAIT_TIMEOUT);
|
||||||
|
|
||||||
// Verifies that polling is triggered by alert reached.
|
// Verifies that polling is triggered by alert reached.
|
||||||
provider.expectStatsUpdate(0 /* unused */);
|
provider.expectStatsUpdate(0 /* unused */);
|
||||||
@@ -1294,9 +1300,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
|
|
||||||
private void forcePollAndWaitForIdle() {
|
private void forcePollAndWaitForIdle() {
|
||||||
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
||||||
// Send dummy message to make sure that any previous message has been handled
|
HandlerUtilsKt.waitForIdle(mHandlerThread, WAIT_TIMEOUT);
|
||||||
mHandler.sendMessage(mHandler.obtainMessage(-1));
|
|
||||||
HandlerUtilsKt.waitForIdle(mHandler, WAIT_TIMEOUT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static class LatchedHandler extends Handler {
|
static class LatchedHandler extends Handler {
|
||||||
|
|||||||
Reference in New Issue
Block a user