Loading core/java/com/android/internal/util/WakeupMessage.java +10 −4 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import android.content.Context; import android.os.Handler; import android.os.Message; import com.android.internal.annotations.VisibleForTesting; /** * An AlarmListener that sends the specified message to a Handler and keeps the system awake until * the message is processed. Loading @@ -36,9 +38,13 @@ import android.os.Message; */ public class WakeupMessage implements AlarmManager.OnAlarmListener { private final AlarmManager mAlarmManager; private final Handler mHandler; private final String mCmdName; private final int mCmd, mArg1, mArg2; @VisibleForTesting protected final Handler mHandler; @VisibleForTesting protected final String mCmdName; @VisibleForTesting protected final int mCmd, mArg1, mArg2; private boolean mScheduled; public WakeupMessage(Context context, Handler handler, Loading services/core/java/com/android/server/connectivity/NetworkMonitor.java +6 −1 Original line number Diff line number Diff line Loading @@ -566,7 +566,7 @@ public class NetworkMonitor extends StateMachine { @Override public void enter() { final String cmdName = ACTION_LINGER_EXPIRED + "." + mNetworkAgentInfo.network.netId; mWakeupMessage = new WakeupMessage(mContext, getHandler(), cmdName, CMD_LINGER_EXPIRED); mWakeupMessage = makeWakeupMessage(mContext, getHandler(), cmdName, CMD_LINGER_EXPIRED); long wakeupTime = SystemClock.elapsedRealtime() + mLingerDelayMs; mWakeupMessage.schedule(wakeupTime); } Loading Loading @@ -823,4 +823,9 @@ public class NetworkMonitor extends StateMachine { } DEFAULT_LINGER_DELAY_MS = time_ms; } @VisibleForTesting protected WakeupMessage makeWakeupMessage(Context c, Handler h, String s, int i) { return new WakeupMessage(c, h, s, i); } } services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java +43 −8 Original line number Diff line number Diff line Loading @@ -59,12 +59,14 @@ import android.os.Message; import android.os.MessageQueue; import android.os.Messenger; import android.os.MessageQueue.IdleHandler; import android.os.SystemClock; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.SmallTest; import android.util.Log; import android.util.LogPrinter; import com.android.internal.util.WakeupMessage; import com.android.server.connectivity.NetworkAgentInfo; import com.android.server.connectivity.NetworkMonitor; import com.android.server.net.NetworkPinner; Loading Loading @@ -505,6 +507,35 @@ public class ConnectivityServiceTest extends AndroidTestCase { } } private class FakeWakeupMessage extends WakeupMessage { private static final int UNREASONABLY_LONG_WAIT = 1000; public FakeWakeupMessage(Context context, Handler handler, String cmdName, int cmd) { super(context, handler, cmdName, cmd); } @Override public void schedule(long when) { long delayMs = when - SystemClock.elapsedRealtime(); if (delayMs < 0) delayMs = 0; if (delayMs > UNREASONABLY_LONG_WAIT) { fail("Attempting to send msg more than " + UNREASONABLY_LONG_WAIT + "ms into the future: " + delayMs); } mHandler.sendEmptyMessageDelayed(mCmd, delayMs); } @Override public void cancel() { mHandler.removeMessages(mCmd); } @Override public void onAlarm() { throw new AssertionError("Should never happen. Update this fake."); } } // NetworkMonitor implementation allowing overriding of Internet connectivity probe result. private class WrappedNetworkMonitor extends NetworkMonitor { // HTTP response code fed back to NetworkMonitor for Internet connectivity probe. Loading @@ -519,6 +550,12 @@ public class ConnectivityServiceTest extends AndroidTestCase { protected int isCaptivePortal() { return gen204ProbeResult; } @Override protected WakeupMessage makeWakeupMessage( Context context, Handler handler, String cmdName, int cmd) { return new FakeWakeupMessage(context, handler, cmdName, cmd); } } private class WrappedConnectivityService extends ConnectivityService { Loading Loading @@ -596,10 +633,10 @@ public class ConnectivityServiceTest extends AndroidTestCase { int delays = 0; while (!criteria.get()) { try { Thread.sleep(100); Thread.sleep(50); } catch (InterruptedException e) { } if (++delays == 5) fail(); if (++delays == 10) fail(); } } Loading @@ -615,6 +652,8 @@ public class ConnectivityServiceTest extends AndroidTestCase { public void setUp() throws Exception { super.setUp(); NetworkMonitor.SetDefaultLingerTime(120); // InstrumentationTestRunner prepares a looper, but AndroidJUnitRunner does not. // http://b/25897652 . if (Looper.myLooper() == null) { Loading Loading @@ -696,8 +735,6 @@ public class ConnectivityServiceTest extends AndroidTestCase { @LargeTest public void testLingering() throws Exception { // Decrease linger timeout to the minimum allowed by AlarmManagerService. NetworkMonitor.SetDefaultLingerTime(5000); verifyNoNetwork(); mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR); mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI); Loading @@ -724,10 +761,8 @@ public class ConnectivityServiceTest extends AndroidTestCase { assertTrue(mCm.getAllNetworks()[0].equals(mCellNetworkAgent.getNetwork()) || mCm.getAllNetworks()[1].equals(mCellNetworkAgent.getNetwork())); // Test cellular linger timeout. try { Thread.sleep(6000); } catch (InterruptedException e) { } waitFor(new Criteria() { public boolean get() { return mCm.getAllNetworks().length == 1; } }); verifyActiveNetwork(TRANSPORT_WIFI); assertEquals(1, mCm.getAllNetworks().length); assertEquals(mCm.getAllNetworks()[0], mCm.getActiveNetwork()); Loading Loading
core/java/com/android/internal/util/WakeupMessage.java +10 −4 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import android.content.Context; import android.os.Handler; import android.os.Message; import com.android.internal.annotations.VisibleForTesting; /** * An AlarmListener that sends the specified message to a Handler and keeps the system awake until * the message is processed. Loading @@ -36,9 +38,13 @@ import android.os.Message; */ public class WakeupMessage implements AlarmManager.OnAlarmListener { private final AlarmManager mAlarmManager; private final Handler mHandler; private final String mCmdName; private final int mCmd, mArg1, mArg2; @VisibleForTesting protected final Handler mHandler; @VisibleForTesting protected final String mCmdName; @VisibleForTesting protected final int mCmd, mArg1, mArg2; private boolean mScheduled; public WakeupMessage(Context context, Handler handler, Loading
services/core/java/com/android/server/connectivity/NetworkMonitor.java +6 −1 Original line number Diff line number Diff line Loading @@ -566,7 +566,7 @@ public class NetworkMonitor extends StateMachine { @Override public void enter() { final String cmdName = ACTION_LINGER_EXPIRED + "." + mNetworkAgentInfo.network.netId; mWakeupMessage = new WakeupMessage(mContext, getHandler(), cmdName, CMD_LINGER_EXPIRED); mWakeupMessage = makeWakeupMessage(mContext, getHandler(), cmdName, CMD_LINGER_EXPIRED); long wakeupTime = SystemClock.elapsedRealtime() + mLingerDelayMs; mWakeupMessage.schedule(wakeupTime); } Loading Loading @@ -823,4 +823,9 @@ public class NetworkMonitor extends StateMachine { } DEFAULT_LINGER_DELAY_MS = time_ms; } @VisibleForTesting protected WakeupMessage makeWakeupMessage(Context c, Handler h, String s, int i) { return new WakeupMessage(c, h, s, i); } }
services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java +43 −8 Original line number Diff line number Diff line Loading @@ -59,12 +59,14 @@ import android.os.Message; import android.os.MessageQueue; import android.os.Messenger; import android.os.MessageQueue.IdleHandler; import android.os.SystemClock; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.SmallTest; import android.util.Log; import android.util.LogPrinter; import com.android.internal.util.WakeupMessage; import com.android.server.connectivity.NetworkAgentInfo; import com.android.server.connectivity.NetworkMonitor; import com.android.server.net.NetworkPinner; Loading Loading @@ -505,6 +507,35 @@ public class ConnectivityServiceTest extends AndroidTestCase { } } private class FakeWakeupMessage extends WakeupMessage { private static final int UNREASONABLY_LONG_WAIT = 1000; public FakeWakeupMessage(Context context, Handler handler, String cmdName, int cmd) { super(context, handler, cmdName, cmd); } @Override public void schedule(long when) { long delayMs = when - SystemClock.elapsedRealtime(); if (delayMs < 0) delayMs = 0; if (delayMs > UNREASONABLY_LONG_WAIT) { fail("Attempting to send msg more than " + UNREASONABLY_LONG_WAIT + "ms into the future: " + delayMs); } mHandler.sendEmptyMessageDelayed(mCmd, delayMs); } @Override public void cancel() { mHandler.removeMessages(mCmd); } @Override public void onAlarm() { throw new AssertionError("Should never happen. Update this fake."); } } // NetworkMonitor implementation allowing overriding of Internet connectivity probe result. private class WrappedNetworkMonitor extends NetworkMonitor { // HTTP response code fed back to NetworkMonitor for Internet connectivity probe. Loading @@ -519,6 +550,12 @@ public class ConnectivityServiceTest extends AndroidTestCase { protected int isCaptivePortal() { return gen204ProbeResult; } @Override protected WakeupMessage makeWakeupMessage( Context context, Handler handler, String cmdName, int cmd) { return new FakeWakeupMessage(context, handler, cmdName, cmd); } } private class WrappedConnectivityService extends ConnectivityService { Loading Loading @@ -596,10 +633,10 @@ public class ConnectivityServiceTest extends AndroidTestCase { int delays = 0; while (!criteria.get()) { try { Thread.sleep(100); Thread.sleep(50); } catch (InterruptedException e) { } if (++delays == 5) fail(); if (++delays == 10) fail(); } } Loading @@ -615,6 +652,8 @@ public class ConnectivityServiceTest extends AndroidTestCase { public void setUp() throws Exception { super.setUp(); NetworkMonitor.SetDefaultLingerTime(120); // InstrumentationTestRunner prepares a looper, but AndroidJUnitRunner does not. // http://b/25897652 . if (Looper.myLooper() == null) { Loading Loading @@ -696,8 +735,6 @@ public class ConnectivityServiceTest extends AndroidTestCase { @LargeTest public void testLingering() throws Exception { // Decrease linger timeout to the minimum allowed by AlarmManagerService. NetworkMonitor.SetDefaultLingerTime(5000); verifyNoNetwork(); mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR); mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI); Loading @@ -724,10 +761,8 @@ public class ConnectivityServiceTest extends AndroidTestCase { assertTrue(mCm.getAllNetworks()[0].equals(mCellNetworkAgent.getNetwork()) || mCm.getAllNetworks()[1].equals(mCellNetworkAgent.getNetwork())); // Test cellular linger timeout. try { Thread.sleep(6000); } catch (InterruptedException e) { } waitFor(new Criteria() { public boolean get() { return mCm.getAllNetworks().length == 1; } }); verifyActiveNetwork(TRANSPORT_WIFI); assertEquals(1, mCm.getAllNetworks().length); assertEquals(mCm.getAllNetworks()[0], mCm.getActiveNetwork()); Loading