Merge "Add instrumentation to test NetworkAgent." am: eb1d6593c5 am: 6dcb6a943c

Change-Id: Ief4f6bd95ba513e08c5d2e9e8fef9d0c426b4478
This commit is contained in:
Chalard Jean
2020-04-13 15:22:45 +00:00
committed by Automerger Merge Worker

View File

@@ -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.
*/ */