Merge "Add instrumentation to test NetworkAgent."
This commit is contained in:
@@ -25,12 +25,14 @@ import android.compat.annotation.UnsupportedAppUsage;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.ConditionVariable;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.Message;
|
||||
import android.os.Messenger;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.util.AsyncChannel;
|
||||
import com.android.internal.util.Protocol;
|
||||
|
||||
@@ -571,6 +573,37 @@ public abstract class NetworkAgent {
|
||||
return mNetwork;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register this network agent with a testing harness.
|
||||
*
|
||||
* The returned Messenger sends messages to the Handler. This allows a test to send
|
||||
* this object {@code CMD_*} messages as if they came from ConnectivityService, which
|
||||
* is useful for testing the behavior.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public Messenger registerForTest(final Network network) {
|
||||
log("Registering NetworkAgent for test");
|
||||
synchronized (mRegisterLock) {
|
||||
mNetwork = network;
|
||||
mInitialConfiguration = null;
|
||||
}
|
||||
return new Messenger(mHandler);
|
||||
}
|
||||
|
||||
/**
|
||||
* Waits for the handler to be idle.
|
||||
* This is useful for testing, and has smaller scope than an accessor to mHandler.
|
||||
* TODO : move the implementation in common library with the tests
|
||||
* @hide
|
||||
*/
|
||||
@VisibleForTesting
|
||||
public boolean waitForIdle(final long timeoutMs) {
|
||||
final ConditionVariable cv = new ConditionVariable(false);
|
||||
mHandler.post(cv::open);
|
||||
return cv.block(timeoutMs);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The Network associated with this agent, or null if it's not registered yet.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user