Merge "Add instrumentation to test NetworkAgent." into rvc-dev
This commit is contained in:
@@ -25,12 +25,14 @@ import android.compat.annotation.UnsupportedAppUsage;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.ConditionVariable;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.os.Messenger;
|
import android.os.Messenger;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.internal.util.AsyncChannel;
|
import com.android.internal.util.AsyncChannel;
|
||||||
import com.android.internal.util.Protocol;
|
import com.android.internal.util.Protocol;
|
||||||
|
|
||||||
@@ -571,6 +573,37 @@ public abstract class NetworkAgent {
|
|||||||
return mNetwork;
|
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.
|
* @return The Network associated with this agent, or null if it's not registered yet.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user