Remove use of network scores, and provider IDs in VcnNetworkProvider
This change updates the VcnNetworkProvider and associated
requestListeners to no longer use the network score and provider IDs, in
order to match the new NetworkProvider APIs.
Bug: 185204197
Test: atest FrameworksVcnTests
Merged-In: I0cabce702cfd8457fd1a152af07a847b87d67028
Change-Id: I0cabce702cfd8457fd1a152af07a847b87d67028
(cherry picked from commit fff0f8ba33)
This commit is contained in:
@@ -265,10 +265,10 @@ public class Vcn extends Handler {
|
|||||||
|
|
||||||
private class VcnNetworkRequestListener implements VcnNetworkProvider.NetworkRequestListener {
|
private class VcnNetworkRequestListener implements VcnNetworkProvider.NetworkRequestListener {
|
||||||
@Override
|
@Override
|
||||||
public void onNetworkRequested(@NonNull NetworkRequest request, int score, int providerId) {
|
public void onNetworkRequested(@NonNull NetworkRequest request) {
|
||||||
Objects.requireNonNull(request, "Missing request");
|
Objects.requireNonNull(request, "Missing request");
|
||||||
|
|
||||||
sendMessage(obtainMessage(MSG_EVENT_NETWORK_REQUESTED, score, providerId, request));
|
sendMessage(obtainMessage(MSG_EVENT_NETWORK_REQUESTED, request));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -284,7 +284,7 @@ public class Vcn extends Handler {
|
|||||||
handleConfigUpdated((VcnConfig) msg.obj);
|
handleConfigUpdated((VcnConfig) msg.obj);
|
||||||
break;
|
break;
|
||||||
case MSG_EVENT_NETWORK_REQUESTED:
|
case MSG_EVENT_NETWORK_REQUESTED:
|
||||||
handleNetworkRequested((NetworkRequest) msg.obj, msg.arg1, msg.arg2);
|
handleNetworkRequested((NetworkRequest) msg.obj);
|
||||||
break;
|
break;
|
||||||
case MSG_EVENT_SUBSCRIPTIONS_CHANGED:
|
case MSG_EVENT_SUBSCRIPTIONS_CHANGED:
|
||||||
handleSubscriptionsChanged((TelephonySubscriptionSnapshot) msg.obj);
|
handleSubscriptionsChanged((TelephonySubscriptionSnapshot) msg.obj);
|
||||||
@@ -365,25 +365,9 @@ public class Vcn extends Handler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleNetworkRequested(
|
private void handleNetworkRequested(@NonNull NetworkRequest request) {
|
||||||
@NonNull NetworkRequest request, int score, int providerId) {
|
|
||||||
Slog.v(getLogTag(), "Received request " + request);
|
Slog.v(getLogTag(), "Received request " + request);
|
||||||
|
|
||||||
if (score > getNetworkScore()) {
|
|
||||||
if (VDBG) {
|
|
||||||
Slog.v(
|
|
||||||
getLogTag(),
|
|
||||||
"Request already satisfied by higher-scoring ("
|
|
||||||
+ score
|
|
||||||
+ ") network from "
|
|
||||||
+ "provider "
|
|
||||||
+ providerId
|
|
||||||
+ ": "
|
|
||||||
+ request);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If preexisting VcnGatewayConnection(s) satisfy request, return
|
// If preexisting VcnGatewayConnection(s) satisfy request, return
|
||||||
for (VcnGatewayConnectionConfig gatewayConnectionConfig : mVcnGatewayConnections.keySet()) {
|
for (VcnGatewayConnectionConfig gatewayConnectionConfig : mVcnGatewayConnections.keySet()) {
|
||||||
if (isRequestSatisfiedByGatewayConnectionConfig(request, gatewayConnectionConfig)) {
|
if (isRequestSatisfiedByGatewayConnectionConfig(request, gatewayConnectionConfig)) {
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import android.content.Context;
|
|||||||
import android.net.NetworkProvider;
|
import android.net.NetworkProvider;
|
||||||
import android.net.NetworkRequest;
|
import android.net.NetworkRequest;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.util.ArrayMap;
|
|
||||||
import android.util.ArraySet;
|
import android.util.ArraySet;
|
||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
|
|
||||||
@@ -31,7 +30,6 @@ import com.android.internal.annotations.VisibleForTesting;
|
|||||||
import com.android.internal.annotations.VisibleForTesting.Visibility;
|
import com.android.internal.annotations.VisibleForTesting.Visibility;
|
||||||
import com.android.internal.util.IndentingPrintWriter;
|
import com.android.internal.util.IndentingPrintWriter;
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -48,11 +46,11 @@ public class VcnNetworkProvider extends NetworkProvider {
|
|||||||
private final Set<NetworkRequestListener> mListeners = new ArraySet<>();
|
private final Set<NetworkRequestListener> mListeners = new ArraySet<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cache of NetworkRequest(s), scores and network providers, keyed by NetworkRequest
|
* Cache of NetworkRequest(s).
|
||||||
*
|
*
|
||||||
* <p>NetworkRequests are immutable once created, and therefore can be used as stable keys.
|
* <p>NetworkRequests are immutable once created, and therefore can be used as stable keys.
|
||||||
*/
|
*/
|
||||||
private final ArrayMap<NetworkRequest, NetworkRequestEntry> mRequests = new ArrayMap<>();
|
private final Set<NetworkRequest> mRequests = new ArraySet<>();
|
||||||
|
|
||||||
public VcnNetworkProvider(Context context, Looper looper) {
|
public VcnNetworkProvider(Context context, Looper looper) {
|
||||||
super(context, looper, VcnNetworkProvider.class.getSimpleName());
|
super(context, looper, VcnNetworkProvider.class.getSimpleName());
|
||||||
@@ -80,38 +78,28 @@ public class VcnNetworkProvider extends NetworkProvider {
|
|||||||
/** Sends all cached NetworkRequest(s) to the specified listener. */
|
/** Sends all cached NetworkRequest(s) to the specified listener. */
|
||||||
@VisibleForTesting(visibility = Visibility.PACKAGE)
|
@VisibleForTesting(visibility = Visibility.PACKAGE)
|
||||||
public void resendAllRequests(@NonNull NetworkRequestListener listener) {
|
public void resendAllRequests(@NonNull NetworkRequestListener listener) {
|
||||||
for (NetworkRequestEntry entry : mRequests.values()) {
|
for (NetworkRequest request : mRequests) {
|
||||||
notifyListenerForEvent(listener, entry);
|
notifyListenerForEvent(listener, request);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void notifyListenerForEvent(
|
private void notifyListenerForEvent(
|
||||||
@NonNull NetworkRequestListener listener, @NonNull NetworkRequestEntry entry) {
|
@NonNull NetworkRequestListener listener, @NonNull NetworkRequest request) {
|
||||||
listener.onNetworkRequested(entry.mRequest, entry.mScore, entry.mProviderId);
|
listener.onNetworkRequested(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onNetworkRequested(@NonNull NetworkRequest request, int score, int providerId) {
|
public void onNetworkRequested(@NonNull NetworkRequest request, int score, int providerId) {
|
||||||
if (VDBG) {
|
if (VDBG) {
|
||||||
Slog.v(
|
Slog.v(TAG, "Network requested: Request = " + request);
|
||||||
TAG,
|
|
||||||
"Network requested: Request = "
|
|
||||||
+ request
|
|
||||||
+ ", score = "
|
|
||||||
+ score
|
|
||||||
+ ", providerId = "
|
|
||||||
+ providerId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final NetworkRequestEntry entry = new NetworkRequestEntry(request, score, providerId);
|
mRequests.add(request);
|
||||||
|
|
||||||
// NetworkRequests are immutable once created, and therefore can be used as stable keys.
|
|
||||||
mRequests.put(request, entry);
|
|
||||||
|
|
||||||
// TODO(b/176939047): Intelligently route requests to prioritized VcnInstances (based on
|
// TODO(b/176939047): Intelligently route requests to prioritized VcnInstances (based on
|
||||||
// Default Data Sub, or similar)
|
// Default Data Sub, or similar)
|
||||||
for (NetworkRequestListener listener : mListeners) {
|
for (NetworkRequestListener listener : mListeners) {
|
||||||
notifyListenerForEvent(listener, entry);
|
notifyListenerForEvent(listener, request);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,37 +108,9 @@ public class VcnNetworkProvider extends NetworkProvider {
|
|||||||
mRequests.remove(request);
|
mRequests.remove(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class NetworkRequestEntry {
|
|
||||||
public final NetworkRequest mRequest;
|
|
||||||
public final int mScore;
|
|
||||||
public final int mProviderId;
|
|
||||||
|
|
||||||
private NetworkRequestEntry(@NonNull NetworkRequest request, int score, int providerId) {
|
|
||||||
mRequest = Objects.requireNonNull(request, "Missing request");
|
|
||||||
mScore = score;
|
|
||||||
mProviderId = providerId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Dumps the state of this NetworkRequestEntry for logging and debugging purposes.
|
|
||||||
*
|
|
||||||
* <p>PII and credentials MUST NEVER be dumped here.
|
|
||||||
*/
|
|
||||||
public void dump(IndentingPrintWriter pw) {
|
|
||||||
pw.println("NetworkRequestEntry:");
|
|
||||||
pw.increaseIndent();
|
|
||||||
|
|
||||||
pw.println("mRequest: " + mRequest);
|
|
||||||
pw.println("mScore: " + mScore);
|
|
||||||
pw.println("mProviderId: " + mProviderId);
|
|
||||||
|
|
||||||
pw.decreaseIndent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// package-private
|
// package-private
|
||||||
interface NetworkRequestListener {
|
interface NetworkRequestListener {
|
||||||
void onNetworkRequested(@NonNull NetworkRequest request, int score, int providerId);
|
void onNetworkRequested(@NonNull NetworkRequest request);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -170,10 +130,10 @@ public class VcnNetworkProvider extends NetworkProvider {
|
|||||||
pw.decreaseIndent();
|
pw.decreaseIndent();
|
||||||
pw.println();
|
pw.println();
|
||||||
|
|
||||||
pw.println("mRequests.values:");
|
pw.println("mRequests:");
|
||||||
pw.increaseIndent();
|
pw.increaseIndent();
|
||||||
for (NetworkRequestEntry entry : mRequests.values()) {
|
for (NetworkRequest request : mRequests) {
|
||||||
entry.dump(pw);
|
pw.println(request);
|
||||||
}
|
}
|
||||||
pw.decreaseIndent();
|
pw.decreaseIndent();
|
||||||
pw.println();
|
pw.println();
|
||||||
|
|||||||
@@ -34,12 +34,14 @@ import org.junit.Before;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/** Tests for TelephonySubscriptionTracker */
|
/** Tests for TelephonySubscriptionTracker */
|
||||||
@RunWith(AndroidJUnit4.class)
|
@RunWith(AndroidJUnit4.class)
|
||||||
@SmallTest
|
@SmallTest
|
||||||
public class VcnNetworkProviderTest {
|
public class VcnNetworkProviderTest {
|
||||||
private static final int TEST_SCORE_UNSATISFIED = 0;
|
private static final int TEST_SCORE_UNSATISFIED = 0;
|
||||||
private static final int TEST_SCORE_HIGH = 100;
|
|
||||||
private static final int TEST_PROVIDER_ID = 1;
|
private static final int TEST_PROVIDER_ID = 1;
|
||||||
|
|
||||||
@NonNull private final Context mContext;
|
@NonNull private final Context mContext;
|
||||||
@@ -65,17 +67,7 @@ public class VcnNetworkProviderTest {
|
|||||||
|
|
||||||
final NetworkRequest request = mock(NetworkRequest.class);
|
final NetworkRequest request = mock(NetworkRequest.class);
|
||||||
mVcnNetworkProvider.onNetworkRequested(request, TEST_SCORE_UNSATISFIED, TEST_PROVIDER_ID);
|
mVcnNetworkProvider.onNetworkRequested(request, TEST_SCORE_UNSATISFIED, TEST_PROVIDER_ID);
|
||||||
verify(mListener).onNetworkRequested(request, TEST_SCORE_UNSATISFIED, TEST_PROVIDER_ID);
|
verify(mListener).onNetworkRequested(request);
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testRequestsPassedToRegisteredListeners_satisfiedByHighScoringProvider()
|
|
||||||
throws Exception {
|
|
||||||
mVcnNetworkProvider.registerListener(mListener);
|
|
||||||
|
|
||||||
final NetworkRequest request = mock(NetworkRequest.class);
|
|
||||||
mVcnNetworkProvider.onNetworkRequested(request, TEST_SCORE_HIGH, TEST_PROVIDER_ID);
|
|
||||||
verify(mListener).onNetworkRequested(request, TEST_SCORE_HIGH, TEST_PROVIDER_ID);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -87,4 +79,29 @@ public class VcnNetworkProviderTest {
|
|||||||
mVcnNetworkProvider.onNetworkRequested(request, TEST_SCORE_UNSATISFIED, TEST_PROVIDER_ID);
|
mVcnNetworkProvider.onNetworkRequested(request, TEST_SCORE_UNSATISFIED, TEST_PROVIDER_ID);
|
||||||
verifyNoMoreInteractions(mListener);
|
verifyNoMoreInteractions(mListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCachedRequestsPassedOnRegister() throws Exception {
|
||||||
|
final List<NetworkRequest> requests = new ArrayList<>();
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
// Build unique network requests; in this case, iterate down the capabilities as a way
|
||||||
|
// to unique-ify requests.
|
||||||
|
final NetworkRequest request =
|
||||||
|
new NetworkRequest.Builder().clearCapabilities().addCapability(i).build();
|
||||||
|
|
||||||
|
requests.add(request);
|
||||||
|
mVcnNetworkProvider.onNetworkRequested(request, i, i + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove one, and verify that it is never sent to the listeners.
|
||||||
|
final NetworkRequest removed = requests.remove(0);
|
||||||
|
mVcnNetworkProvider.onNetworkRequestWithdrawn(removed);
|
||||||
|
|
||||||
|
mVcnNetworkProvider.registerListener(mListener);
|
||||||
|
for (NetworkRequest request : requests) {
|
||||||
|
verify(mListener).onNetworkRequested(request);
|
||||||
|
}
|
||||||
|
verifyNoMoreInteractions(mListener);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,8 +75,6 @@ import java.util.UUID;
|
|||||||
public class VcnTest {
|
public class VcnTest {
|
||||||
private static final String PKG_NAME = VcnTest.class.getPackage().getName();
|
private static final String PKG_NAME = VcnTest.class.getPackage().getName();
|
||||||
private static final ParcelUuid TEST_SUB_GROUP = new ParcelUuid(new UUID(0, 0));
|
private static final ParcelUuid TEST_SUB_GROUP = new ParcelUuid(new UUID(0, 0));
|
||||||
private static final int NETWORK_SCORE = 0;
|
|
||||||
private static final int PROVIDER_ID = 5;
|
|
||||||
private static final boolean MOBILE_DATA_ENABLED = true;
|
private static final boolean MOBILE_DATA_ENABLED = true;
|
||||||
private static final Set<Integer> TEST_SUB_IDS_IN_GROUP =
|
private static final Set<Integer> TEST_SUB_IDS_IN_GROUP =
|
||||||
new ArraySet<>(Arrays.asList(1, 2, 3));
|
new ArraySet<>(Arrays.asList(1, 2, 3));
|
||||||
@@ -177,7 +175,7 @@ public class VcnTest {
|
|||||||
requestBuilder.addCapability(netCapability);
|
requestBuilder.addCapability(netCapability);
|
||||||
}
|
}
|
||||||
|
|
||||||
requestListener.onNetworkRequested(requestBuilder.build(), NETWORK_SCORE, PROVIDER_ID);
|
requestListener.onNetworkRequested(requestBuilder.build());
|
||||||
mTestLooper.dispatchAll();
|
mTestLooper.dispatchAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user