Merge changes Ibed6cdd4,I51e3c00d,Ibf37f94b
* changes: Update toString() to use the correct request Update requestsSortedById() to sort by collection Allow a way to track the active request in an NRI
This commit is contained in:
@@ -2697,10 +2697,16 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
/**
|
/**
|
||||||
* Return an array of all current NetworkRequest sorted by request id.
|
* Return an array of all current NetworkRequest sorted by request id.
|
||||||
*/
|
*/
|
||||||
private NetworkRequestInfo[] requestsSortedById() {
|
@VisibleForTesting
|
||||||
|
protected NetworkRequestInfo[] requestsSortedById() {
|
||||||
NetworkRequestInfo[] requests = new NetworkRequestInfo[0];
|
NetworkRequestInfo[] requests = new NetworkRequestInfo[0];
|
||||||
requests = mNetworkRequests.values().toArray(requests);
|
requests = mNetworkRequests.values().toArray(requests);
|
||||||
Arrays.sort(requests, Comparator.comparingInt(nri -> nri.request.requestId));
|
// Sort the array based off the NRI containing the min requestId in its requests.
|
||||||
|
Arrays.sort(requests,
|
||||||
|
Comparator.comparingInt(nri -> Collections.min(nri.mRequests,
|
||||||
|
Comparator.comparingInt(req -> req.requestId)).requestId
|
||||||
|
)
|
||||||
|
);
|
||||||
return requests;
|
return requests;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5350,6 +5356,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ensureAllNetworkRequestsHaveType(List<NetworkRequest> requests) {
|
||||||
|
for (int i = 0; i < requests.size(); i++) {
|
||||||
|
ensureNetworkRequestHasType(requests.get(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void ensureNetworkRequestHasType(NetworkRequest request) {
|
private void ensureNetworkRequestHasType(NetworkRequest request) {
|
||||||
if (request.type == NetworkRequest.Type.NONE) {
|
if (request.type == NetworkRequest.Type.NONE) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
@@ -5361,7 +5373,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
* Tracks info about the requester.
|
* Tracks info about the requester.
|
||||||
* Also used to notice when the calling process dies so we can self-expire
|
* Also used to notice when the calling process dies so we can self-expire
|
||||||
*/
|
*/
|
||||||
private class NetworkRequestInfo implements IBinder.DeathRecipient {
|
@VisibleForTesting
|
||||||
|
protected class NetworkRequestInfo implements IBinder.DeathRecipient {
|
||||||
final List<NetworkRequest> mRequests;
|
final List<NetworkRequest> mRequests;
|
||||||
final NetworkRequest request;
|
final NetworkRequest request;
|
||||||
|
|
||||||
@@ -5380,7 +5393,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
NetworkRequestInfo(NetworkRequest r, PendingIntent pi) {
|
NetworkRequestInfo(NetworkRequest r, PendingIntent pi) {
|
||||||
request = r;
|
request = r;
|
||||||
mRequests = initializeRequests(r);
|
mRequests = initializeRequests(r);
|
||||||
ensureNetworkRequestHasType(request);
|
ensureAllNetworkRequestsHaveType(mRequests);
|
||||||
mPendingIntent = pi;
|
mPendingIntent = pi;
|
||||||
messenger = null;
|
messenger = null;
|
||||||
mBinder = null;
|
mBinder = null;
|
||||||
@@ -5394,7 +5407,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
messenger = m;
|
messenger = m;
|
||||||
request = r;
|
request = r;
|
||||||
mRequests = initializeRequests(r);
|
mRequests = initializeRequests(r);
|
||||||
ensureNetworkRequestHasType(request);
|
ensureAllNetworkRequestsHaveType(mRequests);
|
||||||
mBinder = binder;
|
mBinder = binder;
|
||||||
mPid = getCallingPid();
|
mPid = getCallingPid();
|
||||||
mUid = getCallingUid();
|
mUid = getCallingUid();
|
||||||
@@ -5418,6 +5431,19 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
return Collections.unmodifiableList(tempRequests);
|
return Collections.unmodifiableList(tempRequests);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private NetworkRequest getSatisfiedRequest() {
|
||||||
|
if (mSatisfier == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (NetworkRequest req : mRequests) {
|
||||||
|
if (mSatisfier.isSatisfyingRequest(req.requestId)) {
|
||||||
|
return req;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private void enforceRequestCountLimit() {
|
private void enforceRequestCountLimit() {
|
||||||
synchronized (mUidToNetworkRequestCount) {
|
synchronized (mUidToNetworkRequestCount) {
|
||||||
@@ -5436,14 +5462,16 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void binderDied() {
|
public void binderDied() {
|
||||||
log("ConnectivityService NetworkRequestInfo binderDied(" +
|
log("ConnectivityService NetworkRequestInfo binderDied(" +
|
||||||
request + ", " + mBinder + ")");
|
mRequests + ", " + mBinder + ")");
|
||||||
releaseNetworkRequest(request);
|
releaseNetworkRequest(mRequests);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "uid/pid:" + mUid + "/" + mPid + " " + request
|
return "uid/pid:" + mUid + "/" + mPid + " " + mRequests
|
||||||
+ (mPendingIntent == null ? "" : " to trigger " + mPendingIntent);
|
+ (mPendingIntent == null ? "" : " to trigger " + mPendingIntent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5763,6 +5791,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
return mNextNetworkProviderId.getAndIncrement();
|
return mNextNetworkProviderId.getAndIncrement();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void releaseNetworkRequest(List<NetworkRequest> networkRequests) {
|
||||||
|
for (int i = 0; i < networkRequests.size(); i++) {
|
||||||
|
releaseNetworkRequest(networkRequests.get(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void releaseNetworkRequest(NetworkRequest networkRequest) {
|
public void releaseNetworkRequest(NetworkRequest networkRequest) {
|
||||||
ensureNetworkRequestHasType(networkRequest);
|
ensureNetworkRequestHasType(networkRequest);
|
||||||
@@ -6779,7 +6813,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return mRequest.request.requestId + " : "
|
return mRequest.mRequests.get(0).requestId + " : "
|
||||||
+ (null != mOldNetwork ? mOldNetwork.network.netId : "null")
|
+ (null != mOldNetwork ? mOldNetwork.network.netId : "null")
|
||||||
+ " → " + (null != mNewNetwork ? mNewNetwork.network.netId : "null");
|
+ " → " + (null != mNewNetwork ? mNewNetwork.network.netId : "null");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -259,7 +259,10 @@ import org.mockito.MockitoAnnotations;
|
|||||||
import org.mockito.Spy;
|
import org.mockito.Spy;
|
||||||
import org.mockito.stubbing.Answer;
|
import org.mockito.stubbing.Answer;
|
||||||
|
|
||||||
|
import java.io.FileDescriptor;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.io.StringWriter;
|
||||||
import java.net.DatagramSocket;
|
import java.net.DatagramSocket;
|
||||||
import java.net.Inet4Address;
|
import java.net.Inet4Address;
|
||||||
import java.net.Inet6Address;
|
import java.net.Inet6Address;
|
||||||
@@ -7585,4 +7588,39 @@ public class ConnectivityServiceTest {
|
|||||||
|
|
||||||
mCm.unregisterNetworkCallback(networkCallback);
|
mCm.unregisterNetworkCallback(networkCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDumpDoesNotCrash() {
|
||||||
|
StringWriter stringWriter = new StringWriter();
|
||||||
|
|
||||||
|
mService.dump(new FileDescriptor(), new PrintWriter(stringWriter), new String[0]);
|
||||||
|
|
||||||
|
assertFalse(stringWriter.toString().isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRequestsSortedByIdSortsCorrectly() {
|
||||||
|
final TestNetworkCallback genericNetworkCallback = new TestNetworkCallback();
|
||||||
|
final TestNetworkCallback wifiNetworkCallback = new TestNetworkCallback();
|
||||||
|
final TestNetworkCallback cellNetworkCallback = new TestNetworkCallback();
|
||||||
|
final NetworkRequest genericRequest = new NetworkRequest.Builder()
|
||||||
|
.clearCapabilities().build();
|
||||||
|
final NetworkRequest wifiRequest = new NetworkRequest.Builder()
|
||||||
|
.addTransportType(TRANSPORT_WIFI).build();
|
||||||
|
final NetworkRequest cellRequest = new NetworkRequest.Builder()
|
||||||
|
.addTransportType(TRANSPORT_CELLULAR).build();
|
||||||
|
mCm.registerNetworkCallback(genericRequest, genericNetworkCallback);
|
||||||
|
mCm.registerNetworkCallback(wifiRequest, wifiNetworkCallback);
|
||||||
|
mCm.registerNetworkCallback(cellRequest, cellNetworkCallback);
|
||||||
|
|
||||||
|
ConnectivityService.NetworkRequestInfo[] nriOutput = mService.requestsSortedById();
|
||||||
|
|
||||||
|
assertTrue(nriOutput.length > 1);
|
||||||
|
for (int i = 0; i < nriOutput.length - 1; i++) {
|
||||||
|
boolean isRequestIdInOrder =
|
||||||
|
nriOutput[i].mRequests.get(0).requestId
|
||||||
|
< nriOutput[i + 1].mRequests.get(0).requestId;
|
||||||
|
assertTrue(isRequestIdInOrder);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user