Merge "Add tests for NetworkStack failure notifications" into qt-dev

am: d63457c64b

Change-Id: I958f7db1c65b2a2a467853ed5c3bc0836f5f1125
This commit is contained in:
Remi NGUYEN VAN
2019-05-30 19:31:42 -07:00
committed by android-build-merger

View File

@@ -23,11 +23,20 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.VersionedPackage;
import android.net.NetworkStackClient;
import android.net.NetworkStackClient.NetworkStackHealthListener;
import android.os.Handler;
import android.os.test.TestLooper;
import android.provider.DeviceConfig;
@@ -42,6 +51,8 @@ import com.android.server.PackageWatchdog.PackageHealthObserverImpact;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@@ -73,8 +84,13 @@ public class PackageWatchdogTest {
private static final long SHORT_DURATION = TimeUnit.SECONDS.toMillis(1);
private static final long LONG_DURATION = TimeUnit.SECONDS.toMillis(5);
private TestLooper mTestLooper;
private Context mSpyContext;
@Mock
private NetworkStackClient mNetworkStackClient;
private NetworkStackClient mMockNetworkStackClient;
@Mock
private PackageManager mMockPackageManager;
@Captor
private ArgumentCaptor<NetworkStackHealthListener> mNetworkStackCallbackCaptor;
@Before
public void setUp() throws Exception {
@@ -83,6 +99,14 @@ public class PackageWatchdogTest {
"package-watchdog.xml").delete();
adoptShellPermissions(Manifest.permission.READ_DEVICE_CONFIG);
mTestLooper = new TestLooper();
mSpyContext = spy(InstrumentationRegistry.getContext());
when(mSpyContext.getPackageManager()).thenReturn(mMockPackageManager);
when(mMockPackageManager.getPackageInfo(anyString(), anyInt())).then(inv -> {
final PackageInfo res = new PackageInfo();
res.packageName = inv.getArgument(0);
res.setLongVersionCode(VERSION_CODE);
return res;
});
}
@After
@@ -702,6 +726,26 @@ public class PackageWatchdogTest {
assertEquals(MonitoredPackage.STATE_PASSED, m4.handleElapsedTimeLocked(LONG_DURATION));
}
@Test
public void testNetworkStackFailure() {
final PackageWatchdog wd = createWatchdog();
// Start observing with failure handling
TestObserver observer = new TestObserver(OBSERVER_NAME_1,
PackageHealthObserverImpact.USER_IMPACT_HIGH);
wd.startObservingHealth(observer, Collections.singletonList(APP_A), SHORT_DURATION);
// Notify of NetworkStack failure
mNetworkStackCallbackCaptor.getValue().onNetworkStackFailure(APP_A);
// Run handler so package failures are dispatched to observers
mTestLooper.dispatchAll();
// Verify the NetworkStack observer is notified
assertEquals(1, observer.mFailedPackages.size());
assertEquals(APP_A, observer.mFailedPackages.get(0));
}
private void adoptShellPermissions(String... permissions) {
InstrumentationRegistry
.getInstrumentation()
@@ -733,19 +777,23 @@ public class PackageWatchdogTest {
}
private PackageWatchdog createWatchdog(TestController controller, boolean withPackagesReady) {
Context context = InstrumentationRegistry.getContext();
AtomicFile policyFile =
new AtomicFile(new File(context.getFilesDir(), "package-watchdog.xml"));
new AtomicFile(new File(mSpyContext.getFilesDir(), "package-watchdog.xml"));
Handler handler = new Handler(mTestLooper.getLooper());
PackageWatchdog watchdog =
new PackageWatchdog(context, policyFile, handler, handler, controller,
mNetworkStackClient);
new PackageWatchdog(mSpyContext, policyFile, handler, handler, controller,
mMockNetworkStackClient);
// Verify controller is not automatically started
assertFalse(controller.mIsEnabled);
if (withPackagesReady) {
// Only capture the NetworkStack callback for the latest registered watchdog
reset(mMockNetworkStackClient);
watchdog.onPackagesReady();
// Verify controller by default is started when packages are ready
assertTrue(controller.mIsEnabled);
verify(mMockNetworkStackClient).registerHealthListener(
mNetworkStackCallbackCaptor.capture());
}
return watchdog;
}