summaryrefslogtreecommitdiff
path: root/tests/net/java/android
diff options
context:
space:
mode:
Diffstat (limited to 'tests/net/java/android')
-rw-r--r--tests/net/java/android/app/usage/NetworkStatsManagerTest.java212
-rw-r--r--tests/net/java/android/net/ConnectivityDiagnosticsManagerTest.java384
-rw-r--r--tests/net/java/android/net/ConnectivityManagerTest.java430
-rw-r--r--tests/net/java/android/net/Ikev2VpnProfileTest.java439
-rw-r--r--tests/net/java/android/net/IpMemoryStoreTest.java332
-rw-r--r--tests/net/java/android/net/IpSecAlgorithmTest.java226
-rw-r--r--tests/net/java/android/net/IpSecConfigTest.java103
-rw-r--r--tests/net/java/android/net/IpSecManagerTest.java305
-rw-r--r--tests/net/java/android/net/IpSecTransformTest.java62
-rw-r--r--tests/net/java/android/net/KeepalivePacketDataUtilTest.java205
-rw-r--r--tests/net/java/android/net/MacAddressTest.java312
-rw-r--r--tests/net/java/android/net/NetworkIdentityTest.kt54
-rw-r--r--tests/net/java/android/net/NetworkStatsTest.java1024
-rw-r--r--tests/net/java/android/net/NetworkTemplateTest.kt351
-rw-r--r--tests/net/java/android/net/NetworkUtilsTest.java128
-rw-r--r--tests/net/java/android/net/QosSocketFilterTest.java75
-rw-r--r--tests/net/java/android/net/TelephonyNetworkSpecifierTest.java113
-rw-r--r--tests/net/java/android/net/VpnManagerTest.java122
-rw-r--r--tests/net/java/android/net/VpnTransportInfoTest.java68
-rw-r--r--tests/net/java/android/net/ipmemorystore/ParcelableTests.java142
-rw-r--r--tests/net/java/android/net/nsd/NsdManagerTest.java388
-rw-r--r--tests/net/java/android/net/nsd/NsdServiceInfoTest.java188
-rw-r--r--tests/net/java/android/net/util/DnsUtilsTest.java216
-rw-r--r--tests/net/java/android/net/util/KeepaliveUtilsTest.kt145
-rw-r--r--tests/net/java/android/net/util/MultinetworkPolicyTrackerTest.kt148
25 files changed, 0 insertions, 6172 deletions
diff --git a/tests/net/java/android/app/usage/NetworkStatsManagerTest.java b/tests/net/java/android/app/usage/NetworkStatsManagerTest.java
deleted file mode 100644
index 899295a019d2..000000000000
--- a/tests/net/java/android/app/usage/NetworkStatsManagerTest.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.app.usage;
-
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertTrue;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.argThat;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.net.ConnectivityManager;
-import android.net.INetworkStatsService;
-import android.net.INetworkStatsSession;
-import android.net.NetworkStats.Entry;
-import android.net.NetworkStatsHistory;
-import android.net.NetworkTemplate;
-import android.os.RemoteException;
-
-import androidx.test.InstrumentationRegistry;
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.invocation.InvocationOnMock;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class NetworkStatsManagerTest {
-
- private @Mock INetworkStatsService mService;
- private @Mock INetworkStatsSession mStatsSession;
-
- private NetworkStatsManager mManager;
-
- // TODO: change to NetworkTemplate.MATCH_MOBILE once internal constant rename is merged to aosp.
- private static final int MATCH_MOBILE_ALL = 1;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mManager = new NetworkStatsManager(InstrumentationRegistry.getContext(), mService);
- }
-
- @Test
- public void testQueryDetails() throws RemoteException {
- final String subscriberId = "subid";
- final long startTime = 1;
- final long endTime = 100;
- final int uid1 = 10001;
- final int uid2 = 10002;
- final int uid3 = 10003;
-
- Entry uid1Entry1 = new Entry("if1", uid1,
- android.net.NetworkStats.SET_DEFAULT, android.net.NetworkStats.TAG_NONE,
- 100, 10, 200, 20, 0);
-
- Entry uid1Entry2 = new Entry(
- "if2", uid1,
- android.net.NetworkStats.SET_DEFAULT, android.net.NetworkStats.TAG_NONE,
- 100, 10, 200, 20, 0);
-
- Entry uid2Entry1 = new Entry("if1", uid2,
- android.net.NetworkStats.SET_DEFAULT, android.net.NetworkStats.TAG_NONE,
- 150, 10, 250, 20, 0);
-
- Entry uid2Entry2 = new Entry(
- "if2", uid2,
- android.net.NetworkStats.SET_DEFAULT, android.net.NetworkStats.TAG_NONE,
- 150, 10, 250, 20, 0);
-
- NetworkStatsHistory history1 = new NetworkStatsHistory(10, 2);
- history1.recordData(10, 20, uid1Entry1);
- history1.recordData(20, 30, uid1Entry2);
-
- NetworkStatsHistory history2 = new NetworkStatsHistory(10, 2);
- history1.recordData(30, 40, uid2Entry1);
- history1.recordData(35, 45, uid2Entry2);
-
-
- when(mService.openSessionForUsageStats(anyInt(), anyString())).thenReturn(mStatsSession);
- when(mStatsSession.getRelevantUids()).thenReturn(new int[] { uid1, uid2, uid3 });
-
- when(mStatsSession.getHistoryIntervalForUid(any(NetworkTemplate.class),
- eq(uid1), eq(android.net.NetworkStats.SET_ALL),
- eq(android.net.NetworkStats.TAG_NONE),
- eq(NetworkStatsHistory.FIELD_ALL), eq(startTime), eq(endTime)))
- .then((InvocationOnMock inv) -> {
- NetworkTemplate template = inv.getArgument(0);
- assertEquals(MATCH_MOBILE_ALL, template.getMatchRule());
- assertEquals(subscriberId, template.getSubscriberId());
- return history1;
- });
-
- when(mStatsSession.getHistoryIntervalForUid(any(NetworkTemplate.class),
- eq(uid2), eq(android.net.NetworkStats.SET_ALL),
- eq(android.net.NetworkStats.TAG_NONE),
- eq(NetworkStatsHistory.FIELD_ALL), eq(startTime), eq(endTime)))
- .then((InvocationOnMock inv) -> {
- NetworkTemplate template = inv.getArgument(0);
- assertEquals(MATCH_MOBILE_ALL, template.getMatchRule());
- assertEquals(subscriberId, template.getSubscriberId());
- return history2;
- });
-
-
- NetworkStats stats = mManager.queryDetails(
- ConnectivityManager.TYPE_MOBILE, subscriberId, startTime, endTime);
-
- NetworkStats.Bucket bucket = new NetworkStats.Bucket();
-
- // First 2 buckets exactly match entry timings
- assertTrue(stats.getNextBucket(bucket));
- assertEquals(10, bucket.getStartTimeStamp());
- assertEquals(20, bucket.getEndTimeStamp());
- assertBucketMatches(uid1Entry1, bucket);
-
- assertTrue(stats.getNextBucket(bucket));
- assertEquals(20, bucket.getStartTimeStamp());
- assertEquals(30, bucket.getEndTimeStamp());
- assertBucketMatches(uid1Entry2, bucket);
-
- // 30 -> 40: contains uid2Entry1 and half of uid2Entry2
- assertTrue(stats.getNextBucket(bucket));
- assertEquals(30, bucket.getStartTimeStamp());
- assertEquals(40, bucket.getEndTimeStamp());
- assertEquals(225, bucket.getRxBytes());
- assertEquals(15, bucket.getRxPackets());
- assertEquals(375, bucket.getTxBytes());
- assertEquals(30, bucket.getTxPackets());
-
- // 40 -> 50: contains half of uid2Entry2
- assertTrue(stats.getNextBucket(bucket));
- assertEquals(40, bucket.getStartTimeStamp());
- assertEquals(50, bucket.getEndTimeStamp());
- assertEquals(75, bucket.getRxBytes());
- assertEquals(5, bucket.getRxPackets());
- assertEquals(125, bucket.getTxBytes());
- assertEquals(10, bucket.getTxPackets());
-
- assertFalse(stats.hasNextBucket());
- }
-
- @Test
- public void testQueryDetails_NoSubscriberId() throws RemoteException {
- final long startTime = 1;
- final long endTime = 100;
- final int uid1 = 10001;
- final int uid2 = 10002;
-
- when(mService.openSessionForUsageStats(anyInt(), anyString())).thenReturn(mStatsSession);
- when(mStatsSession.getRelevantUids()).thenReturn(new int[] { uid1, uid2 });
-
- NetworkStats stats = mManager.queryDetails(
- ConnectivityManager.TYPE_MOBILE, null, startTime, endTime);
-
- when(mStatsSession.getHistoryIntervalForUid(any(NetworkTemplate.class),
- anyInt(), anyInt(), anyInt(), anyInt(), anyLong(), anyLong()))
- .thenReturn(new NetworkStatsHistory(10, 0));
-
- verify(mStatsSession, times(1)).getHistoryIntervalForUid(
- argThat((NetworkTemplate t) ->
- // No subscriberId: MATCH_MOBILE_WILDCARD template
- t.getMatchRule() == NetworkTemplate.MATCH_MOBILE_WILDCARD),
- eq(uid1), eq(android.net.NetworkStats.SET_ALL),
- eq(android.net.NetworkStats.TAG_NONE),
- eq(NetworkStatsHistory.FIELD_ALL), eq(startTime), eq(endTime));
-
- verify(mStatsSession, times(1)).getHistoryIntervalForUid(
- argThat((NetworkTemplate t) ->
- // No subscriberId: MATCH_MOBILE_WILDCARD template
- t.getMatchRule() == NetworkTemplate.MATCH_MOBILE_WILDCARD),
- eq(uid2), eq(android.net.NetworkStats.SET_ALL),
- eq(android.net.NetworkStats.TAG_NONE),
- eq(NetworkStatsHistory.FIELD_ALL), eq(startTime), eq(endTime));
-
- assertFalse(stats.hasNextBucket());
- }
-
- private void assertBucketMatches(Entry expected, NetworkStats.Bucket actual) {
- assertEquals(expected.uid, actual.getUid());
- assertEquals(expected.rxBytes, actual.getRxBytes());
- assertEquals(expected.rxPackets, actual.getRxPackets());
- assertEquals(expected.txBytes, actual.getTxBytes());
- assertEquals(expected.txPackets, actual.getTxPackets());
- }
-}
diff --git a/tests/net/java/android/net/ConnectivityDiagnosticsManagerTest.java b/tests/net/java/android/net/ConnectivityDiagnosticsManagerTest.java
deleted file mode 100644
index 06e9405a6a79..000000000000
--- a/tests/net/java/android/net/ConnectivityDiagnosticsManagerTest.java
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-import static android.net.ConnectivityDiagnosticsManager.ConnectivityDiagnosticsBinder;
-import static android.net.ConnectivityDiagnosticsManager.ConnectivityDiagnosticsCallback;
-import static android.net.ConnectivityDiagnosticsManager.ConnectivityReport;
-import static android.net.ConnectivityDiagnosticsManager.DataStallReport;
-
-import static com.android.testutils.ParcelUtils.assertParcelSane;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-
-import android.content.Context;
-import android.os.PersistableBundle;
-
-import androidx.test.InstrumentationRegistry;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-import org.mockito.Mock;
-
-import java.util.concurrent.Executor;
-
-@RunWith(JUnit4.class)
-public class ConnectivityDiagnosticsManagerTest {
- private static final int NET_ID = 1;
- private static final int DETECTION_METHOD = 2;
- private static final long TIMESTAMP = 10L;
- private static final String INTERFACE_NAME = "interface";
- private static final String BUNDLE_KEY = "key";
- private static final String BUNDLE_VALUE = "value";
-
- private static final Executor INLINE_EXECUTOR = x -> x.run();
-
- @Mock private IConnectivityManager mService;
- @Mock private ConnectivityDiagnosticsCallback mCb;
-
- private Context mContext;
- private ConnectivityDiagnosticsBinder mBinder;
- private ConnectivityDiagnosticsManager mManager;
-
- private String mPackageName;
-
- @Before
- public void setUp() {
- mContext = InstrumentationRegistry.getContext();
-
- mService = mock(IConnectivityManager.class);
- mCb = mock(ConnectivityDiagnosticsCallback.class);
-
- mBinder = new ConnectivityDiagnosticsBinder(mCb, INLINE_EXECUTOR);
- mManager = new ConnectivityDiagnosticsManager(mContext, mService);
-
- mPackageName = mContext.getOpPackageName();
- }
-
- @After
- public void tearDown() {
- // clear ConnectivityDiagnosticsManager callbacks map
- ConnectivityDiagnosticsManager.sCallbacks.clear();
- }
-
- private ConnectivityReport createSampleConnectivityReport() {
- final LinkProperties linkProperties = new LinkProperties();
- linkProperties.setInterfaceName(INTERFACE_NAME);
-
- final NetworkCapabilities networkCapabilities = new NetworkCapabilities();
- networkCapabilities.addCapability(NetworkCapabilities.NET_CAPABILITY_IMS);
-
- final PersistableBundle bundle = new PersistableBundle();
- bundle.putString(BUNDLE_KEY, BUNDLE_VALUE);
-
- return new ConnectivityReport(
- new Network(NET_ID), TIMESTAMP, linkProperties, networkCapabilities, bundle);
- }
-
- private ConnectivityReport createDefaultConnectivityReport() {
- return new ConnectivityReport(
- new Network(0),
- 0L,
- new LinkProperties(),
- new NetworkCapabilities(),
- PersistableBundle.EMPTY);
- }
-
- @Test
- public void testPersistableBundleEquals() {
- assertFalse(
- ConnectivityDiagnosticsManager.persistableBundleEquals(
- null, PersistableBundle.EMPTY));
- assertFalse(
- ConnectivityDiagnosticsManager.persistableBundleEquals(
- PersistableBundle.EMPTY, null));
- assertTrue(
- ConnectivityDiagnosticsManager.persistableBundleEquals(
- PersistableBundle.EMPTY, PersistableBundle.EMPTY));
-
- final PersistableBundle a = new PersistableBundle();
- a.putString(BUNDLE_KEY, BUNDLE_VALUE);
-
- final PersistableBundle b = new PersistableBundle();
- b.putString(BUNDLE_KEY, BUNDLE_VALUE);
-
- final PersistableBundle c = new PersistableBundle();
- c.putString(BUNDLE_KEY, null);
-
- assertFalse(
- ConnectivityDiagnosticsManager.persistableBundleEquals(PersistableBundle.EMPTY, a));
- assertFalse(
- ConnectivityDiagnosticsManager.persistableBundleEquals(a, PersistableBundle.EMPTY));
-
- assertTrue(ConnectivityDiagnosticsManager.persistableBundleEquals(a, b));
- assertTrue(ConnectivityDiagnosticsManager.persistableBundleEquals(b, a));
-
- assertFalse(ConnectivityDiagnosticsManager.persistableBundleEquals(a, c));
- assertFalse(ConnectivityDiagnosticsManager.persistableBundleEquals(c, a));
- }
-
- @Test
- public void testConnectivityReportEquals() {
- final ConnectivityReport defaultReport = createDefaultConnectivityReport();
- final ConnectivityReport sampleReport = createSampleConnectivityReport();
- assertEquals(sampleReport, createSampleConnectivityReport());
- assertEquals(defaultReport, createDefaultConnectivityReport());
-
- final LinkProperties linkProperties = sampleReport.getLinkProperties();
- final NetworkCapabilities networkCapabilities = sampleReport.getNetworkCapabilities();
- final PersistableBundle bundle = sampleReport.getAdditionalInfo();
-
- assertNotEquals(
- createDefaultConnectivityReport(),
- new ConnectivityReport(
- new Network(NET_ID),
- 0L,
- new LinkProperties(),
- new NetworkCapabilities(),
- PersistableBundle.EMPTY));
- assertNotEquals(
- createDefaultConnectivityReport(),
- new ConnectivityReport(
- new Network(0),
- TIMESTAMP,
- new LinkProperties(),
- new NetworkCapabilities(),
- PersistableBundle.EMPTY));
- assertNotEquals(
- createDefaultConnectivityReport(),
- new ConnectivityReport(
- new Network(0),
- 0L,
- linkProperties,
- new NetworkCapabilities(),
- PersistableBundle.EMPTY));
- assertNotEquals(
- createDefaultConnectivityReport(),
- new ConnectivityReport(
- new Network(0),
- TIMESTAMP,
- new LinkProperties(),
- networkCapabilities,
- PersistableBundle.EMPTY));
- assertNotEquals(
- createDefaultConnectivityReport(),
- new ConnectivityReport(
- new Network(0),
- TIMESTAMP,
- new LinkProperties(),
- new NetworkCapabilities(),
- bundle));
- }
-
- @Test
- public void testConnectivityReportParcelUnparcel() {
- assertParcelSane(createSampleConnectivityReport(), 5);
- }
-
- private DataStallReport createSampleDataStallReport() {
- final LinkProperties linkProperties = new LinkProperties();
- linkProperties.setInterfaceName(INTERFACE_NAME);
-
- final PersistableBundle bundle = new PersistableBundle();
- bundle.putString(BUNDLE_KEY, BUNDLE_VALUE);
-
- final NetworkCapabilities networkCapabilities = new NetworkCapabilities();
- networkCapabilities.addCapability(NetworkCapabilities.NET_CAPABILITY_IMS);
-
- return new DataStallReport(
- new Network(NET_ID),
- TIMESTAMP,
- DETECTION_METHOD,
- linkProperties,
- networkCapabilities,
- bundle);
- }
-
- private DataStallReport createDefaultDataStallReport() {
- return new DataStallReport(
- new Network(0),
- 0L,
- 0,
- new LinkProperties(),
- new NetworkCapabilities(),
- PersistableBundle.EMPTY);
- }
-
- @Test
- public void testDataStallReportEquals() {
- final DataStallReport defaultReport = createDefaultDataStallReport();
- final DataStallReport sampleReport = createSampleDataStallReport();
- assertEquals(sampleReport, createSampleDataStallReport());
- assertEquals(defaultReport, createDefaultDataStallReport());
-
- final LinkProperties linkProperties = sampleReport.getLinkProperties();
- final NetworkCapabilities networkCapabilities = sampleReport.getNetworkCapabilities();
- final PersistableBundle bundle = sampleReport.getStallDetails();
-
- assertNotEquals(
- defaultReport,
- new DataStallReport(
- new Network(NET_ID),
- 0L,
- 0,
- new LinkProperties(),
- new NetworkCapabilities(),
- PersistableBundle.EMPTY));
- assertNotEquals(
- defaultReport,
- new DataStallReport(
- new Network(0),
- TIMESTAMP,
- 0,
- new LinkProperties(),
- new NetworkCapabilities(),
- PersistableBundle.EMPTY));
- assertNotEquals(
- defaultReport,
- new DataStallReport(
- new Network(0),
- 0L,
- DETECTION_METHOD,
- new LinkProperties(),
- new NetworkCapabilities(),
- PersistableBundle.EMPTY));
- assertNotEquals(
- defaultReport,
- new DataStallReport(
- new Network(0),
- 0L,
- 0,
- linkProperties,
- new NetworkCapabilities(),
- PersistableBundle.EMPTY));
- assertNotEquals(
- defaultReport,
- new DataStallReport(
- new Network(0),
- 0L,
- 0,
- new LinkProperties(),
- networkCapabilities,
- PersistableBundle.EMPTY));
- assertNotEquals(
- defaultReport,
- new DataStallReport(
- new Network(0),
- 0L,
- 0,
- new LinkProperties(),
- new NetworkCapabilities(),
- bundle));
- }
-
- @Test
- public void testDataStallReportParcelUnparcel() {
- assertParcelSane(createSampleDataStallReport(), 6);
- }
-
- @Test
- public void testConnectivityDiagnosticsCallbackOnConnectivityReportAvailable() {
- mBinder.onConnectivityReportAvailable(createSampleConnectivityReport());
-
- // The callback will be invoked synchronously by inline executor. Immediately check the
- // latch without waiting.
- verify(mCb).onConnectivityReportAvailable(eq(createSampleConnectivityReport()));
- }
-
- @Test
- public void testConnectivityDiagnosticsCallbackOnDataStallSuspected() {
- mBinder.onDataStallSuspected(createSampleDataStallReport());
-
- // The callback will be invoked synchronously by inline executor. Immediately check the
- // latch without waiting.
- verify(mCb).onDataStallSuspected(eq(createSampleDataStallReport()));
- }
-
- @Test
- public void testConnectivityDiagnosticsCallbackOnNetworkConnectivityReported() {
- final Network n = new Network(NET_ID);
- final boolean connectivity = true;
-
- mBinder.onNetworkConnectivityReported(n, connectivity);
-
- // The callback will be invoked synchronously by inline executor. Immediately check the
- // latch without waiting.
- verify(mCb).onNetworkConnectivityReported(eq(n), eq(connectivity));
- }
-
- @Test
- public void testRegisterConnectivityDiagnosticsCallback() throws Exception {
- final NetworkRequest request = new NetworkRequest.Builder().build();
-
- mManager.registerConnectivityDiagnosticsCallback(request, INLINE_EXECUTOR, mCb);
-
- verify(mService).registerConnectivityDiagnosticsCallback(
- any(ConnectivityDiagnosticsBinder.class), eq(request), eq(mPackageName));
- assertTrue(ConnectivityDiagnosticsManager.sCallbacks.containsKey(mCb));
- }
-
- @Test
- public void testRegisterDuplicateConnectivityDiagnosticsCallback() throws Exception {
- final NetworkRequest request = new NetworkRequest.Builder().build();
-
- mManager.registerConnectivityDiagnosticsCallback(request, INLINE_EXECUTOR, mCb);
-
- try {
- mManager.registerConnectivityDiagnosticsCallback(request, INLINE_EXECUTOR, mCb);
- fail("Duplicate callback registration should fail");
- } catch (IllegalArgumentException expected) {
- }
- }
-
- @Test
- public void testUnregisterConnectivityDiagnosticsCallback() throws Exception {
- final NetworkRequest request = new NetworkRequest.Builder().build();
- mManager.registerConnectivityDiagnosticsCallback(request, INLINE_EXECUTOR, mCb);
-
- mManager.unregisterConnectivityDiagnosticsCallback(mCb);
-
- verify(mService).unregisterConnectivityDiagnosticsCallback(
- any(ConnectivityDiagnosticsBinder.class));
- assertFalse(ConnectivityDiagnosticsManager.sCallbacks.containsKey(mCb));
-
- // verify that re-registering is successful
- mManager.registerConnectivityDiagnosticsCallback(request, INLINE_EXECUTOR, mCb);
- verify(mService, times(2)).registerConnectivityDiagnosticsCallback(
- any(ConnectivityDiagnosticsBinder.class), eq(request), eq(mPackageName));
- assertTrue(ConnectivityDiagnosticsManager.sCallbacks.containsKey(mCb));
- }
-
- @Test
- public void testUnregisterUnknownConnectivityDiagnosticsCallback() throws Exception {
- mManager.unregisterConnectivityDiagnosticsCallback(mCb);
-
- verifyNoMoreInteractions(mService);
- }
-}
diff --git a/tests/net/java/android/net/ConnectivityManagerTest.java b/tests/net/java/android/net/ConnectivityManagerTest.java
deleted file mode 100644
index 591e0cc3504e..000000000000
--- a/tests/net/java/android/net/ConnectivityManagerTest.java
+++ /dev/null
@@ -1,430 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-import static android.net.ConnectivityManager.TYPE_NONE;
-import static android.net.NetworkCapabilities.NET_CAPABILITY_CBS;
-import static android.net.NetworkCapabilities.NET_CAPABILITY_DUN;
-import static android.net.NetworkCapabilities.NET_CAPABILITY_FOTA;
-import static android.net.NetworkCapabilities.NET_CAPABILITY_IMS;
-import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET;
-import static android.net.NetworkCapabilities.NET_CAPABILITY_MMS;
-import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED;
-import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VPN;
-import static android.net.NetworkCapabilities.NET_CAPABILITY_SUPL;
-import static android.net.NetworkCapabilities.NET_CAPABILITY_TRUSTED;
-import static android.net.NetworkCapabilities.NET_CAPABILITY_WIFI_P2P;
-import static android.net.NetworkCapabilities.TRANSPORT_BLUETOOTH;
-import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
-import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET;
-import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
-import static android.net.NetworkRequest.Type.BACKGROUND_REQUEST;
-import static android.net.NetworkRequest.Type.REQUEST;
-import static android.net.NetworkRequest.Type.TRACK_DEFAULT;
-import static android.net.NetworkRequest.Type.TRACK_SYSTEM_DEFAULT;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.ArgumentMatchers.anyBoolean;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.ArgumentMatchers.nullable;
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.anyInt;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.reset;
-import static org.mockito.Mockito.timeout;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.app.PendingIntent;
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.net.ConnectivityManager.NetworkCallback;
-import android.os.Build.VERSION_CODES;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.os.Messenger;
-import android.os.Process;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class ConnectivityManagerTest {
-
- @Mock Context mCtx;
- @Mock IConnectivityManager mService;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- }
-
- static NetworkCapabilities verifyNetworkCapabilities(
- int legacyType, int transportType, int... capabilities) {
- final NetworkCapabilities nc = ConnectivityManager.networkCapabilitiesForType(legacyType);
- assertNotNull(nc);
- assertTrue(nc.hasTransport(transportType));
- for (int capability : capabilities) {
- assertTrue(nc.hasCapability(capability));
- }
-
- return nc;
- }
-
- static void verifyUnrestrictedNetworkCapabilities(int legacyType, int transportType) {
- verifyNetworkCapabilities(
- legacyType,
- transportType,
- NET_CAPABILITY_INTERNET,
- NET_CAPABILITY_NOT_RESTRICTED,
- NET_CAPABILITY_NOT_VPN,
- NET_CAPABILITY_TRUSTED);
- }
-
- static void verifyRestrictedMobileNetworkCapabilities(int legacyType, int capability) {
- final NetworkCapabilities nc = verifyNetworkCapabilities(
- legacyType,
- TRANSPORT_CELLULAR,
- capability,
- NET_CAPABILITY_NOT_VPN,
- NET_CAPABILITY_TRUSTED);
-
- assertFalse(nc.hasCapability(NET_CAPABILITY_INTERNET));
- assertFalse(nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED));
- }
-
- @Test
- public void testNetworkCapabilitiesForTypeMobile() {
- verifyUnrestrictedNetworkCapabilities(
- ConnectivityManager.TYPE_MOBILE, TRANSPORT_CELLULAR);
- }
-
- @Test
- public void testNetworkCapabilitiesForTypeMobileCbs() {
- verifyRestrictedMobileNetworkCapabilities(
- ConnectivityManager.TYPE_MOBILE_CBS, NET_CAPABILITY_CBS);
- }
-
- @Test
- public void testNetworkCapabilitiesForTypeMobileDun() {
- verifyRestrictedMobileNetworkCapabilities(
- ConnectivityManager.TYPE_MOBILE_DUN, NET_CAPABILITY_DUN);
- }
-
- @Test
- public void testNetworkCapabilitiesForTypeMobileFota() {
- verifyRestrictedMobileNetworkCapabilities(
- ConnectivityManager.TYPE_MOBILE_FOTA, NET_CAPABILITY_FOTA);
- }
-
- @Test
- public void testNetworkCapabilitiesForTypeMobileHipri() {
- verifyUnrestrictedNetworkCapabilities(
- ConnectivityManager.TYPE_MOBILE_HIPRI, TRANSPORT_CELLULAR);
- }
-
- @Test
- public void testNetworkCapabilitiesForTypeMobileIms() {
- verifyRestrictedMobileNetworkCapabilities(
- ConnectivityManager.TYPE_MOBILE_IMS, NET_CAPABILITY_IMS);
- }
-
- @Test
- public void testNetworkCapabilitiesForTypeMobileMms() {
- final NetworkCapabilities nc = verifyNetworkCapabilities(
- ConnectivityManager.TYPE_MOBILE_MMS,
- TRANSPORT_CELLULAR,
- NET_CAPABILITY_MMS,
- NET_CAPABILITY_NOT_VPN,
- NET_CAPABILITY_TRUSTED);
-
- assertFalse(nc.hasCapability(NET_CAPABILITY_INTERNET));
- }
-
- @Test
- public void testNetworkCapabilitiesForTypeMobileSupl() {
- final NetworkCapabilities nc = verifyNetworkCapabilities(
- ConnectivityManager.TYPE_MOBILE_SUPL,
- TRANSPORT_CELLULAR,
- NET_CAPABILITY_SUPL,
- NET_CAPABILITY_NOT_VPN,
- NET_CAPABILITY_TRUSTED);
-
- assertFalse(nc.hasCapability(NET_CAPABILITY_INTERNET));
- }
-
- @Test
- public void testNetworkCapabilitiesForTypeWifi() {
- verifyUnrestrictedNetworkCapabilities(
- ConnectivityManager.TYPE_WIFI, TRANSPORT_WIFI);
- }
-
- @Test
- public void testNetworkCapabilitiesForTypeWifiP2p() {
- final NetworkCapabilities nc = verifyNetworkCapabilities(
- ConnectivityManager.TYPE_WIFI_P2P,
- TRANSPORT_WIFI,
- NET_CAPABILITY_NOT_RESTRICTED, NET_CAPABILITY_NOT_VPN,
- NET_CAPABILITY_TRUSTED, NET_CAPABILITY_WIFI_P2P);
-
- assertFalse(nc.hasCapability(NET_CAPABILITY_INTERNET));
- }
-
- @Test
- public void testNetworkCapabilitiesForTypeBluetooth() {
- verifyUnrestrictedNetworkCapabilities(
- ConnectivityManager.TYPE_BLUETOOTH, TRANSPORT_BLUETOOTH);
- }
-
- @Test
- public void testNetworkCapabilitiesForTypeEthernet() {
- verifyUnrestrictedNetworkCapabilities(
- ConnectivityManager.TYPE_ETHERNET, TRANSPORT_ETHERNET);
- }
-
- @Test
- public void testCallbackRelease() throws Exception {
- ConnectivityManager manager = new ConnectivityManager(mCtx, mService);
- NetworkRequest request = makeRequest(1);
- NetworkCallback callback = mock(ConnectivityManager.NetworkCallback.class);
- Handler handler = new Handler(Looper.getMainLooper());
- ArgumentCaptor<Messenger> captor = ArgumentCaptor.forClass(Messenger.class);
-
- // register callback
- when(mService.requestNetwork(anyInt(), any(), anyInt(), captor.capture(), anyInt(), any(),
- anyInt(), anyInt(), any(), nullable(String.class))).thenReturn(request);
- manager.requestNetwork(request, callback, handler);
-
- // callback triggers
- captor.getValue().send(makeMessage(request, ConnectivityManager.CALLBACK_AVAILABLE));
- verify(callback, timeout(500).times(1)).onAvailable(any(Network.class),
- any(NetworkCapabilities.class), any(LinkProperties.class), anyBoolean());
-
- // unregister callback
- manager.unregisterNetworkCallback(callback);
- verify(mService, times(1)).releaseNetworkRequest(request);
-
- // callback does not trigger anymore.
- captor.getValue().send(makeMessage(request, ConnectivityManager.CALLBACK_LOSING));
- verify(callback, timeout(500).times(0)).onLosing(any(), anyInt());
- }
-
- @Test
- public void testCallbackRecycling() throws Exception {
- ConnectivityManager manager = new ConnectivityManager(mCtx, mService);
- NetworkRequest req1 = makeRequest(1);
- NetworkRequest req2 = makeRequest(2);
- NetworkCallback callback = mock(ConnectivityManager.NetworkCallback.class);
- Handler handler = new Handler(Looper.getMainLooper());
- ArgumentCaptor<Messenger> captor = ArgumentCaptor.forClass(Messenger.class);
-
- // register callback
- when(mService.requestNetwork(anyInt(), any(), anyInt(), captor.capture(), anyInt(), any(),
- anyInt(), anyInt(), any(), nullable(String.class))).thenReturn(req1);
- manager.requestNetwork(req1, callback, handler);
-
- // callback triggers
- captor.getValue().send(makeMessage(req1, ConnectivityManager.CALLBACK_AVAILABLE));
- verify(callback, timeout(100).times(1)).onAvailable(any(Network.class),
- any(NetworkCapabilities.class), any(LinkProperties.class), anyBoolean());
-
- // unregister callback
- manager.unregisterNetworkCallback(callback);
- verify(mService, times(1)).releaseNetworkRequest(req1);
-
- // callback does not trigger anymore.
- captor.getValue().send(makeMessage(req1, ConnectivityManager.CALLBACK_LOSING));
- verify(callback, timeout(100).times(0)).onLosing(any(), anyInt());
-
- // callback can be registered again
- when(mService.requestNetwork(anyInt(), any(), anyInt(), captor.capture(), anyInt(), any(),
- anyInt(), anyInt(), any(), nullable(String.class))).thenReturn(req2);
- manager.requestNetwork(req2, callback, handler);
-
- // callback triggers
- captor.getValue().send(makeMessage(req2, ConnectivityManager.CALLBACK_LOST));
- verify(callback, timeout(100).times(1)).onLost(any());
-
- // unregister callback
- manager.unregisterNetworkCallback(callback);
- verify(mService, times(1)).releaseNetworkRequest(req2);
- }
-
- // TODO: turn on this test when request callback 1:1 mapping is enforced
- //@Test
- private void noDoubleCallbackRegistration() throws Exception {
- ConnectivityManager manager = new ConnectivityManager(mCtx, mService);
- NetworkRequest request = makeRequest(1);
- NetworkCallback callback = new ConnectivityManager.NetworkCallback();
- ApplicationInfo info = new ApplicationInfo();
- // TODO: update version when starting to enforce 1:1 mapping
- info.targetSdkVersion = VERSION_CODES.N_MR1 + 1;
-
- when(mCtx.getApplicationInfo()).thenReturn(info);
- when(mService.requestNetwork(anyInt(), any(), anyInt(), any(), anyInt(), any(), anyInt(),
- anyInt(), any(), nullable(String.class))).thenReturn(request);
-
- Handler handler = new Handler(Looper.getMainLooper());
- manager.requestNetwork(request, callback, handler);
-
- // callback is already registered, reregistration should fail.
- Class<IllegalArgumentException> wantException = IllegalArgumentException.class;
- expectThrowable(() -> manager.requestNetwork(request, callback), wantException);
-
- manager.unregisterNetworkCallback(callback);
- verify(mService, times(1)).releaseNetworkRequest(request);
-
- // unregistering the callback should make it registrable again.
- manager.requestNetwork(request, callback);
- }
-
- @Test
- public void testArgumentValidation() throws Exception {
- ConnectivityManager manager = new ConnectivityManager(mCtx, mService);
-
- NetworkRequest request = mock(NetworkRequest.class);
- NetworkCallback callback = mock(NetworkCallback.class);
- Handler handler = mock(Handler.class);
- NetworkCallback nullCallback = null;
- PendingIntent nullIntent = null;
-
- mustFail(() -> { manager.requestNetwork(null, callback); });
- mustFail(() -> { manager.requestNetwork(request, nullCallback); });
- mustFail(() -> { manager.requestNetwork(request, callback, null); });
- mustFail(() -> { manager.requestNetwork(request, callback, -1); });
- mustFail(() -> { manager.requestNetwork(request, nullIntent); });
-
- mustFail(() -> { manager.registerNetworkCallback(null, callback, handler); });
- mustFail(() -> { manager.registerNetworkCallback(request, null, handler); });
- mustFail(() -> { manager.registerNetworkCallback(request, callback, null); });
- mustFail(() -> { manager.registerNetworkCallback(request, nullIntent); });
-
- mustFail(() -> { manager.registerDefaultNetworkCallback(null, handler); });
- mustFail(() -> { manager.registerDefaultNetworkCallback(callback, null); });
-
- mustFail(() -> { manager.registerSystemDefaultNetworkCallback(null, handler); });
- mustFail(() -> { manager.registerSystemDefaultNetworkCallback(callback, null); });
-
- mustFail(() -> { manager.unregisterNetworkCallback(nullCallback); });
- mustFail(() -> { manager.unregisterNetworkCallback(nullIntent); });
- mustFail(() -> { manager.releaseNetworkRequest(nullIntent); });
- }
-
- static void mustFail(Runnable fn) {
- try {
- fn.run();
- fail();
- } catch (Exception expected) {
- }
- }
-
- @Test
- public void testRequestType() throws Exception {
- final String testPkgName = "MyPackage";
- final String testAttributionTag = "MyTag";
- final ConnectivityManager manager = new ConnectivityManager(mCtx, mService);
- when(mCtx.getOpPackageName()).thenReturn(testPkgName);
- when(mCtx.getAttributionTag()).thenReturn(testAttributionTag);
- final NetworkRequest request = makeRequest(1);
- final NetworkCallback callback = new ConnectivityManager.NetworkCallback();
-
- manager.requestNetwork(request, callback);
- verify(mService).requestNetwork(eq(Process.INVALID_UID), eq(request.networkCapabilities),
- eq(REQUEST.ordinal()), any(), anyInt(), any(), eq(TYPE_NONE), anyInt(),
- eq(testPkgName), eq(testAttributionTag));
- reset(mService);
-
- // Verify that register network callback does not calls requestNetwork at all.
- manager.registerNetworkCallback(request, callback);
- verify(mService, never()).requestNetwork(anyInt(), any(), anyInt(), any(), anyInt(), any(),
- anyInt(), anyInt(), any(), any());
- verify(mService).listenForNetwork(eq(request.networkCapabilities), any(), any(), anyInt(),
- eq(testPkgName), eq(testAttributionTag));
- reset(mService);
-
- Handler handler = new Handler(ConnectivityThread.getInstanceLooper());
-
- manager.registerDefaultNetworkCallback(callback);
- verify(mService).requestNetwork(eq(Process.INVALID_UID), eq(null),
- eq(TRACK_DEFAULT.ordinal()), any(), anyInt(), any(), eq(TYPE_NONE), anyInt(),
- eq(testPkgName), eq(testAttributionTag));
- reset(mService);
-
- manager.registerDefaultNetworkCallbackForUid(42, callback, handler);
- verify(mService).requestNetwork(eq(42), eq(null),
- eq(TRACK_DEFAULT.ordinal()), any(), anyInt(), any(), eq(TYPE_NONE), anyInt(),
- eq(testPkgName), eq(testAttributionTag));
-
- manager.requestBackgroundNetwork(request, callback, handler);
- verify(mService).requestNetwork(eq(Process.INVALID_UID), eq(request.networkCapabilities),
- eq(BACKGROUND_REQUEST.ordinal()), any(), anyInt(), any(), eq(TYPE_NONE), anyInt(),
- eq(testPkgName), eq(testAttributionTag));
- reset(mService);
-
- manager.registerSystemDefaultNetworkCallback(callback, handler);
- verify(mService).requestNetwork(eq(Process.INVALID_UID), eq(null),
- eq(TRACK_SYSTEM_DEFAULT.ordinal()), any(), anyInt(), any(), eq(TYPE_NONE), anyInt(),
- eq(testPkgName), eq(testAttributionTag));
- reset(mService);
- }
-
- static Message makeMessage(NetworkRequest req, int messageType) {
- Bundle bundle = new Bundle();
- bundle.putParcelable(NetworkRequest.class.getSimpleName(), req);
- // Pass default objects as we don't care which get passed here
- bundle.putParcelable(Network.class.getSimpleName(), new Network(1));
- bundle.putParcelable(NetworkCapabilities.class.getSimpleName(), new NetworkCapabilities());
- bundle.putParcelable(LinkProperties.class.getSimpleName(), new LinkProperties());
- Message msg = Message.obtain();
- msg.what = messageType;
- msg.setData(bundle);
- return msg;
- }
-
- static NetworkRequest makeRequest(int requestId) {
- NetworkRequest request = new NetworkRequest.Builder().clearCapabilities().build();
- return new NetworkRequest(request.networkCapabilities, ConnectivityManager.TYPE_NONE,
- requestId, NetworkRequest.Type.NONE);
- }
-
- static void expectThrowable(Runnable block, Class<? extends Throwable> throwableType) {
- try {
- block.run();
- } catch (Throwable t) {
- if (t.getClass().equals(throwableType)) {
- return;
- }
- fail("expected exception of type " + throwableType + ", but was " + t.getClass());
- }
- fail("expected exception of type " + throwableType);
- }
-}
diff --git a/tests/net/java/android/net/Ikev2VpnProfileTest.java b/tests/net/java/android/net/Ikev2VpnProfileTest.java
deleted file mode 100644
index 1abd39a32bdf..000000000000
--- a/tests/net/java/android/net/Ikev2VpnProfileTest.java
+++ /dev/null
@@ -1,439 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import android.test.mock.MockContext;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.internal.net.VpnProfile;
-import com.android.net.module.util.ProxyUtils;
-import com.android.internal.org.bouncycastle.x509.X509V1CertificateGenerator;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.math.BigInteger;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.PrivateKey;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
-import javax.security.auth.x500.X500Principal;
-
-/** Unit tests for {@link Ikev2VpnProfile.Builder}. */
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class Ikev2VpnProfileTest {
- private static final String SERVER_ADDR_STRING = "1.2.3.4";
- private static final String IDENTITY_STRING = "Identity";
- private static final String USERNAME_STRING = "username";
- private static final String PASSWORD_STRING = "pa55w0rd";
- private static final String EXCL_LIST = "exclList";
- private static final byte[] PSK_BYTES = "preSharedKey".getBytes();
- private static final int TEST_MTU = 1300;
-
- private final MockContext mMockContext =
- new MockContext() {
- @Override
- public String getOpPackageName() {
- return "fooPackage";
- }
- };
- private final ProxyInfo mProxy = ProxyInfo.buildDirectProxy(
- SERVER_ADDR_STRING, -1, ProxyUtils.exclusionStringAsList(EXCL_LIST));
-
- private X509Certificate mUserCert;
- private X509Certificate mServerRootCa;
- private PrivateKey mPrivateKey;
-
- @Before
- public void setUp() throws Exception {
- mServerRootCa = generateRandomCertAndKeyPair().cert;
-
- final CertificateAndKey userCertKey = generateRandomCertAndKeyPair();
- mUserCert = userCertKey.cert;
- mPrivateKey = userCertKey.key;
- }
-
- private Ikev2VpnProfile.Builder getBuilderWithDefaultOptions() {
- final Ikev2VpnProfile.Builder builder =
- new Ikev2VpnProfile.Builder(SERVER_ADDR_STRING, IDENTITY_STRING);
-
- builder.setBypassable(true);
- builder.setProxy(mProxy);
- builder.setMaxMtu(TEST_MTU);
- builder.setMetered(true);
-
- return builder;
- }
-
- @Test
- public void testBuildValidProfileWithOptions() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
-
- builder.setAuthUsernamePassword(USERNAME_STRING, PASSWORD_STRING, mServerRootCa);
- final Ikev2VpnProfile profile = builder.build();
- assertNotNull(profile);
-
- // Check non-auth parameters correctly stored
- assertEquals(SERVER_ADDR_STRING, profile.getServerAddr());
- assertEquals(IDENTITY_STRING, profile.getUserIdentity());
- assertEquals(mProxy, profile.getProxyInfo());
- assertTrue(profile.isBypassable());
- assertTrue(profile.isMetered());
- assertEquals(TEST_MTU, profile.getMaxMtu());
- assertEquals(Ikev2VpnProfile.DEFAULT_ALGORITHMS, profile.getAllowedAlgorithms());
- }
-
- @Test
- public void testBuildUsernamePasswordProfile() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
-
- builder.setAuthUsernamePassword(USERNAME_STRING, PASSWORD_STRING, mServerRootCa);
- final Ikev2VpnProfile profile = builder.build();
- assertNotNull(profile);
-
- assertEquals(USERNAME_STRING, profile.getUsername());
- assertEquals(PASSWORD_STRING, profile.getPassword());
- assertEquals(mServerRootCa, profile.getServerRootCaCert());
-
- assertNull(profile.getPresharedKey());
- assertNull(profile.getRsaPrivateKey());
- assertNull(profile.getUserCert());
- }
-
- @Test
- public void testBuildDigitalSignatureProfile() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
-
- builder.setAuthDigitalSignature(mUserCert, mPrivateKey, mServerRootCa);
- final Ikev2VpnProfile profile = builder.build();
- assertNotNull(profile);
-
- assertEquals(profile.getUserCert(), mUserCert);
- assertEquals(mPrivateKey, profile.getRsaPrivateKey());
- assertEquals(profile.getServerRootCaCert(), mServerRootCa);
-
- assertNull(profile.getPresharedKey());
- assertNull(profile.getUsername());
- assertNull(profile.getPassword());
- }
-
- @Test
- public void testBuildPresharedKeyProfile() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
-
- builder.setAuthPsk(PSK_BYTES);
- final Ikev2VpnProfile profile = builder.build();
- assertNotNull(profile);
-
- assertArrayEquals(PSK_BYTES, profile.getPresharedKey());
-
- assertNull(profile.getServerRootCaCert());
- assertNull(profile.getUsername());
- assertNull(profile.getPassword());
- assertNull(profile.getRsaPrivateKey());
- assertNull(profile.getUserCert());
- }
-
- @Test
- public void testBuildWithAllowedAlgorithmsAead() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
- builder.setAuthPsk(PSK_BYTES);
-
- List<String> allowedAlgorithms = Arrays.asList(IpSecAlgorithm.AUTH_CRYPT_AES_GCM);
- builder.setAllowedAlgorithms(allowedAlgorithms);
-
- final Ikev2VpnProfile profile = builder.build();
- assertEquals(allowedAlgorithms, profile.getAllowedAlgorithms());
- }
-
- @Test
- public void testBuildWithAllowedAlgorithmsNormal() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
- builder.setAuthPsk(PSK_BYTES);
-
- List<String> allowedAlgorithms =
- Arrays.asList(IpSecAlgorithm.AUTH_HMAC_SHA512, IpSecAlgorithm.CRYPT_AES_CBC);
- builder.setAllowedAlgorithms(allowedAlgorithms);
-
- final Ikev2VpnProfile profile = builder.build();
- assertEquals(allowedAlgorithms, profile.getAllowedAlgorithms());
- }
-
- @Test
- public void testSetAllowedAlgorithmsEmptyList() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
-
- try {
- builder.setAllowedAlgorithms(new ArrayList<>());
- fail("Expected exception due to no valid algorithm set");
- } catch (IllegalArgumentException expected) {
- }
- }
-
- @Test
- public void testSetAllowedAlgorithmsInvalidList() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
- List<String> allowedAlgorithms = new ArrayList<>();
-
- try {
- builder.setAllowedAlgorithms(Arrays.asList(IpSecAlgorithm.AUTH_HMAC_SHA256));
- fail("Expected exception due to missing encryption");
- } catch (IllegalArgumentException expected) {
- }
-
- try {
- builder.setAllowedAlgorithms(Arrays.asList(IpSecAlgorithm.CRYPT_AES_CBC));
- fail("Expected exception due to missing authentication");
- } catch (IllegalArgumentException expected) {
- }
- }
-
- @Test
- public void testSetAllowedAlgorithmsInsecureAlgorithm() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
- List<String> allowedAlgorithms = new ArrayList<>();
-
- try {
- builder.setAllowedAlgorithms(Arrays.asList(IpSecAlgorithm.AUTH_HMAC_MD5));
- fail("Expected exception due to insecure algorithm");
- } catch (IllegalArgumentException expected) {
- }
-
- try {
- builder.setAllowedAlgorithms(Arrays.asList(IpSecAlgorithm.AUTH_HMAC_SHA1));
- fail("Expected exception due to insecure algorithm");
- } catch (IllegalArgumentException expected) {
- }
- }
-
- @Test
- public void testBuildNoAuthMethodSet() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
-
- try {
- builder.build();
- fail("Expected exception due to lack of auth method");
- } catch (IllegalArgumentException expected) {
- }
- }
-
- @Test
- public void testBuildInvalidMtu() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
-
- try {
- builder.setMaxMtu(500);
- fail("Expected exception due to too-small MTU");
- } catch (IllegalArgumentException expected) {
- }
- }
-
- private void verifyVpnProfileCommon(VpnProfile profile) {
- assertEquals(SERVER_ADDR_STRING, profile.server);
- assertEquals(IDENTITY_STRING, profile.ipsecIdentifier);
- assertEquals(mProxy, profile.proxy);
- assertTrue(profile.isBypassable);
- assertTrue(profile.isMetered);
- assertEquals(TEST_MTU, profile.maxMtu);
- }
-
- @Test
- public void testPskConvertToVpnProfile() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
-
- builder.setAuthPsk(PSK_BYTES);
- final VpnProfile profile = builder.build().toVpnProfile();
-
- verifyVpnProfileCommon(profile);
- assertEquals(Ikev2VpnProfile.encodeForIpsecSecret(PSK_BYTES), profile.ipsecSecret);
-
- // Check nothing else is set
- assertEquals("", profile.username);
- assertEquals("", profile.password);
- assertEquals("", profile.ipsecUserCert);
- assertEquals("", profile.ipsecCaCert);
- }
-
- @Test
- public void testUsernamePasswordConvertToVpnProfile() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
-
- builder.setAuthUsernamePassword(USERNAME_STRING, PASSWORD_STRING, mServerRootCa);
- final VpnProfile profile = builder.build().toVpnProfile();
-
- verifyVpnProfileCommon(profile);
- assertEquals(USERNAME_STRING, profile.username);
- assertEquals(PASSWORD_STRING, profile.password);
- assertEquals(Ikev2VpnProfile.certificateToPemString(mServerRootCa), profile.ipsecCaCert);
-
- // Check nothing else is set
- assertEquals("", profile.ipsecUserCert);
- assertEquals("", profile.ipsecSecret);
- }
-
- @Test
- public void testRsaConvertToVpnProfile() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
-
- builder.setAuthDigitalSignature(mUserCert, mPrivateKey, mServerRootCa);
- final VpnProfile profile = builder.build().toVpnProfile();
-
- final String expectedSecret = Ikev2VpnProfile.PREFIX_INLINE
- + Ikev2VpnProfile.encodeForIpsecSecret(mPrivateKey.getEncoded());
- verifyVpnProfileCommon(profile);
- assertEquals(Ikev2VpnProfile.certificateToPemString(mUserCert), profile.ipsecUserCert);
- assertEquals(
- expectedSecret,
- profile.ipsecSecret);
- assertEquals(Ikev2VpnProfile.certificateToPemString(mServerRootCa), profile.ipsecCaCert);
-
- // Check nothing else is set
- assertEquals("", profile.username);
- assertEquals("", profile.password);
- }
-
- @Test
- public void testPskFromVpnProfileDiscardsIrrelevantValues() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
-
- builder.setAuthPsk(PSK_BYTES);
- final VpnProfile profile = builder.build().toVpnProfile();
- profile.username = USERNAME_STRING;
- profile.password = PASSWORD_STRING;
- profile.ipsecCaCert = Ikev2VpnProfile.certificateToPemString(mServerRootCa);
- profile.ipsecUserCert = Ikev2VpnProfile.certificateToPemString(mUserCert);
-
- final Ikev2VpnProfile result = Ikev2VpnProfile.fromVpnProfile(profile);
- assertNull(result.getUsername());
- assertNull(result.getPassword());
- assertNull(result.getUserCert());
- assertNull(result.getRsaPrivateKey());
- assertNull(result.getServerRootCaCert());
- }
-
- @Test
- public void testUsernamePasswordFromVpnProfileDiscardsIrrelevantValues() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
-
- builder.setAuthUsernamePassword(USERNAME_STRING, PASSWORD_STRING, mServerRootCa);
- final VpnProfile profile = builder.build().toVpnProfile();
- profile.ipsecSecret = new String(PSK_BYTES);
- profile.ipsecUserCert = Ikev2VpnProfile.certificateToPemString(mUserCert);
-
- final Ikev2VpnProfile result = Ikev2VpnProfile.fromVpnProfile(profile);
- assertNull(result.getPresharedKey());
- assertNull(result.getUserCert());
- assertNull(result.getRsaPrivateKey());
- }
-
- @Test
- public void testRsaFromVpnProfileDiscardsIrrelevantValues() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
-
- builder.setAuthDigitalSignature(mUserCert, mPrivateKey, mServerRootCa);
- final VpnProfile profile = builder.build().toVpnProfile();
- profile.username = USERNAME_STRING;
- profile.password = PASSWORD_STRING;
-
- final Ikev2VpnProfile result = Ikev2VpnProfile.fromVpnProfile(profile);
- assertNull(result.getUsername());
- assertNull(result.getPassword());
- assertNull(result.getPresharedKey());
- }
-
- @Test
- public void testPskConversionIsLossless() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
-
- builder.setAuthPsk(PSK_BYTES);
- final Ikev2VpnProfile ikeProfile = builder.build();
-
- assertEquals(ikeProfile, Ikev2VpnProfile.fromVpnProfile(ikeProfile.toVpnProfile()));
- }
-
- @Test
- public void testUsernamePasswordConversionIsLossless() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
-
- builder.setAuthUsernamePassword(USERNAME_STRING, PASSWORD_STRING, mServerRootCa);
- final Ikev2VpnProfile ikeProfile = builder.build();
-
- assertEquals(ikeProfile, Ikev2VpnProfile.fromVpnProfile(ikeProfile.toVpnProfile()));
- }
-
- @Test
- public void testRsaConversionIsLossless() throws Exception {
- final Ikev2VpnProfile.Builder builder = getBuilderWithDefaultOptions();
-
- builder.setAuthDigitalSignature(mUserCert, mPrivateKey, mServerRootCa);
- final Ikev2VpnProfile ikeProfile = builder.build();
-
- assertEquals(ikeProfile, Ikev2VpnProfile.fromVpnProfile(ikeProfile.toVpnProfile()));
- }
-
- private static class CertificateAndKey {
- public final X509Certificate cert;
- public final PrivateKey key;
-
- CertificateAndKey(X509Certificate cert, PrivateKey key) {
- this.cert = cert;
- this.key = key;
- }
- }
-
- private static CertificateAndKey generateRandomCertAndKeyPair() throws Exception {
- final Date validityBeginDate =
- new Date(System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1L));
- final Date validityEndDate =
- new Date(System.currentTimeMillis() + TimeUnit.DAYS.toMillis(1L));
-
- // Generate a keypair
- final KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
- keyPairGenerator.initialize(512);
- final KeyPair keyPair = keyPairGenerator.generateKeyPair();
-
- final X500Principal dnName = new X500Principal("CN=test.android.com");
- final X509V1CertificateGenerator certGen = new X509V1CertificateGenerator();
- certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));
- certGen.setSubjectDN(dnName);
- certGen.setIssuerDN(dnName);
- certGen.setNotBefore(validityBeginDate);
- certGen.setNotAfter(validityEndDate);
- certGen.setPublicKey(keyPair.getPublic());
- certGen.setSignatureAlgorithm("SHA256WithRSAEncryption");
-
- final X509Certificate cert = certGen.generate(keyPair.getPrivate(), "AndroidOpenSSL");
- return new CertificateAndKey(cert, keyPair.getPrivate());
- }
-}
diff --git a/tests/net/java/android/net/IpMemoryStoreTest.java b/tests/net/java/android/net/IpMemoryStoreTest.java
deleted file mode 100644
index 0b13800bc5c9..000000000000
--- a/tests/net/java/android/net/IpMemoryStoreTest.java
+++ /dev/null
@@ -1,332 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.eq;
-import static org.mockito.Mockito.inOrder;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
-import android.content.Context;
-import android.net.ipmemorystore.Blob;
-import android.net.ipmemorystore.IOnStatusListener;
-import android.net.ipmemorystore.NetworkAttributes;
-import android.net.ipmemorystore.NetworkAttributesParcelable;
-import android.net.ipmemorystore.Status;
-import android.net.networkstack.ModuleNetworkStackClient;
-import android.os.RemoteException;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.InOrder;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.net.UnknownHostException;
-import java.util.Arrays;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class IpMemoryStoreTest {
- private static final String TAG = IpMemoryStoreTest.class.getSimpleName();
- private static final String TEST_CLIENT_ID = "testClientId";
- private static final String TEST_DATA_NAME = "testData";
- private static final String TEST_OTHER_DATA_NAME = TEST_DATA_NAME + "Other";
- private static final byte[] TEST_BLOB_DATA = new byte[] { -3, 6, 8, -9, 12,
- -128, 0, 89, 112, 91, -34 };
- private static final NetworkAttributes TEST_NETWORK_ATTRIBUTES = buildTestNetworkAttributes(
- "hint", 219);
-
- @Mock
- Context mMockContext;
- @Mock
- ModuleNetworkStackClient mModuleNetworkStackClient;
- @Mock
- IIpMemoryStore mMockService;
- @Mock
- IOnStatusListener mIOnStatusListener;
- IpMemoryStore mStore;
-
- @Captor
- ArgumentCaptor<IIpMemoryStoreCallbacks> mCbCaptor;
- @Captor
- ArgumentCaptor<NetworkAttributesParcelable> mNapCaptor;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- }
-
- private void startIpMemoryStore(boolean supplyService) {
- if (supplyService) {
- doAnswer(invocation -> {
- ((IIpMemoryStoreCallbacks) invocation.getArgument(0))
- .onIpMemoryStoreFetched(mMockService);
- return null;
- }).when(mModuleNetworkStackClient).fetchIpMemoryStore(any());
- } else {
- doNothing().when(mModuleNetworkStackClient).fetchIpMemoryStore(mCbCaptor.capture());
- }
- mStore = new IpMemoryStore(mMockContext) {
- @Override
- protected ModuleNetworkStackClient getModuleNetworkStackClient(Context ctx) {
- return mModuleNetworkStackClient;
- }
- };
- }
-
- private static NetworkAttributes buildTestNetworkAttributes(String hint, int mtu) {
- return new NetworkAttributes.Builder()
- .setCluster(hint)
- .setMtu(mtu)
- .build();
- }
-
- @Test
- public void testNetworkAttributes() throws Exception {
- startIpMemoryStore(true /* supplyService */);
- final String l2Key = "fakeKey";
-
- mStore.storeNetworkAttributes(l2Key, TEST_NETWORK_ATTRIBUTES,
- status -> assertTrue("Store not successful : " + status.resultCode,
- status.isSuccess()));
- verify(mMockService, times(1)).storeNetworkAttributes(eq(l2Key),
- mNapCaptor.capture(), any());
- assertEquals(TEST_NETWORK_ATTRIBUTES, new NetworkAttributes(mNapCaptor.getValue()));
-
- mStore.retrieveNetworkAttributes(l2Key,
- (status, key, attr) -> {
- assertTrue("Retrieve network attributes not successful : "
- + status.resultCode, status.isSuccess());
- assertEquals(l2Key, key);
- assertEquals(TEST_NETWORK_ATTRIBUTES, attr);
- });
-
- verify(mMockService, times(1)).retrieveNetworkAttributes(eq(l2Key), any());
- }
-
- @Test
- public void testPrivateData() throws RemoteException {
- startIpMemoryStore(true /* supplyService */);
- final Blob b = new Blob();
- b.data = TEST_BLOB_DATA;
- final String l2Key = "fakeKey";
-
- mStore.storeBlob(l2Key, TEST_CLIENT_ID, TEST_DATA_NAME, b,
- status -> {
- assertTrue("Store not successful : " + status.resultCode, status.isSuccess());
- });
- verify(mMockService, times(1)).storeBlob(eq(l2Key), eq(TEST_CLIENT_ID), eq(TEST_DATA_NAME),
- eq(b), any());
-
- mStore.retrieveBlob(l2Key, TEST_CLIENT_ID, TEST_OTHER_DATA_NAME,
- (status, key, name, data) -> {
- assertTrue("Retrieve blob status not successful : " + status.resultCode,
- status.isSuccess());
- assertEquals(l2Key, key);
- assertEquals(name, TEST_DATA_NAME);
- assertTrue(Arrays.equals(b.data, data.data));
- });
- verify(mMockService, times(1)).retrieveBlob(eq(l2Key), eq(TEST_CLIENT_ID),
- eq(TEST_OTHER_DATA_NAME), any());
- }
-
- @Test
- public void testFindL2Key()
- throws UnknownHostException, RemoteException, Exception {
- startIpMemoryStore(true /* supplyService */);
- final String l2Key = "fakeKey";
-
- mStore.findL2Key(TEST_NETWORK_ATTRIBUTES,
- (status, key) -> {
- assertTrue("Retrieve network sameness not successful : " + status.resultCode,
- status.isSuccess());
- assertEquals(l2Key, key);
- });
- verify(mMockService, times(1)).findL2Key(mNapCaptor.capture(), any());
- assertEquals(TEST_NETWORK_ATTRIBUTES, new NetworkAttributes(mNapCaptor.getValue()));
- }
-
- @Test
- public void testIsSameNetwork() throws UnknownHostException, RemoteException {
- startIpMemoryStore(true /* supplyService */);
- final String l2Key1 = "fakeKey1";
- final String l2Key2 = "fakeKey2";
-
- mStore.isSameNetwork(l2Key1, l2Key2,
- (status, answer) -> {
- assertFalse("Retrieve network sameness suspiciously successful : "
- + status.resultCode, status.isSuccess());
- assertEquals(Status.ERROR_ILLEGAL_ARGUMENT, status.resultCode);
- assertNull(answer);
- });
- verify(mMockService, times(1)).isSameNetwork(eq(l2Key1), eq(l2Key2), any());
- }
-
- @Test
- public void testEnqueuedIpMsRequests() throws Exception {
- startIpMemoryStore(false /* supplyService */);
-
- final Blob b = new Blob();
- b.data = TEST_BLOB_DATA;
- final String l2Key = "fakeKey";
-
- // enqueue multiple ipms requests
- mStore.storeNetworkAttributes(l2Key, TEST_NETWORK_ATTRIBUTES,
- status -> assertTrue("Store not successful : " + status.resultCode,
- status.isSuccess()));
- mStore.retrieveNetworkAttributes(l2Key,
- (status, key, attr) -> {
- assertTrue("Retrieve network attributes not successful : "
- + status.resultCode, status.isSuccess());
- assertEquals(l2Key, key);
- assertEquals(TEST_NETWORK_ATTRIBUTES, attr);
- });
- mStore.storeBlob(l2Key, TEST_CLIENT_ID, TEST_DATA_NAME, b,
- status -> assertTrue("Store not successful : " + status.resultCode,
- status.isSuccess()));
- mStore.retrieveBlob(l2Key, TEST_CLIENT_ID, TEST_OTHER_DATA_NAME,
- (status, key, name, data) -> {
- assertTrue("Retrieve blob status not successful : " + status.resultCode,
- status.isSuccess());
- assertEquals(l2Key, key);
- assertEquals(name, TEST_DATA_NAME);
- assertTrue(Arrays.equals(b.data, data.data));
- });
-
- // get ipms service ready
- mCbCaptor.getValue().onIpMemoryStoreFetched(mMockService);
-
- InOrder inOrder = inOrder(mMockService);
-
- inOrder.verify(mMockService).storeNetworkAttributes(eq(l2Key), mNapCaptor.capture(), any());
- inOrder.verify(mMockService).retrieveNetworkAttributes(eq(l2Key), any());
- inOrder.verify(mMockService).storeBlob(eq(l2Key), eq(TEST_CLIENT_ID), eq(TEST_DATA_NAME),
- eq(b), any());
- inOrder.verify(mMockService).retrieveBlob(eq(l2Key), eq(TEST_CLIENT_ID),
- eq(TEST_OTHER_DATA_NAME), any());
- assertEquals(TEST_NETWORK_ATTRIBUTES, new NetworkAttributes(mNapCaptor.getValue()));
- }
-
- @Test
- public void testEnqueuedIpMsRequestsWithException() throws Exception {
- startIpMemoryStore(true /* supplyService */);
- doThrow(RemoteException.class).when(mMockService).retrieveNetworkAttributes(any(), any());
-
- final Blob b = new Blob();
- b.data = TEST_BLOB_DATA;
- final String l2Key = "fakeKey";
-
- // enqueue multiple ipms requests
- mStore.storeNetworkAttributes(l2Key, TEST_NETWORK_ATTRIBUTES,
- status -> assertTrue("Store not successful : " + status.resultCode,
- status.isSuccess()));
- mStore.retrieveNetworkAttributes(l2Key,
- (status, key, attr) -> {
- assertTrue("Retrieve network attributes not successful : "
- + status.resultCode, status.isSuccess());
- assertEquals(l2Key, key);
- assertEquals(TEST_NETWORK_ATTRIBUTES, attr);
- });
- mStore.storeBlob(l2Key, TEST_CLIENT_ID, TEST_DATA_NAME, b,
- status -> assertTrue("Store not successful : " + status.resultCode,
- status.isSuccess()));
- mStore.retrieveBlob(l2Key, TEST_CLIENT_ID, TEST_OTHER_DATA_NAME,
- (status, key, name, data) -> {
- assertTrue("Retrieve blob status not successful : " + status.resultCode,
- status.isSuccess());
- assertEquals(l2Key, key);
- assertEquals(name, TEST_DATA_NAME);
- assertTrue(Arrays.equals(b.data, data.data));
- });
-
- // verify the rest of the queue is still processed in order even if the remote exception
- // occurs when calling one or more requests
- InOrder inOrder = inOrder(mMockService);
-
- inOrder.verify(mMockService).storeNetworkAttributes(eq(l2Key), mNapCaptor.capture(), any());
- inOrder.verify(mMockService).storeBlob(eq(l2Key), eq(TEST_CLIENT_ID), eq(TEST_DATA_NAME),
- eq(b), any());
- inOrder.verify(mMockService).retrieveBlob(eq(l2Key), eq(TEST_CLIENT_ID),
- eq(TEST_OTHER_DATA_NAME), any());
- assertEquals(TEST_NETWORK_ATTRIBUTES, new NetworkAttributes(mNapCaptor.getValue()));
- }
-
- @Test
- public void testEnqueuedIpMsRequestsCallbackFunctionWithException() throws Exception {
- startIpMemoryStore(true /* supplyService */);
-
- final Blob b = new Blob();
- b.data = TEST_BLOB_DATA;
- final String l2Key = "fakeKey";
-
- // enqueue multiple ipms requests
- mStore.storeNetworkAttributes(l2Key, TEST_NETWORK_ATTRIBUTES,
- status -> assertTrue("Store not successful : " + status.resultCode,
- status.isSuccess()));
- mStore.retrieveNetworkAttributes(l2Key,
- (status, key, attr) -> {
- throw new RuntimeException("retrieveNetworkAttributes test");
- });
- mStore.storeBlob(l2Key, TEST_CLIENT_ID, TEST_DATA_NAME, b,
- status -> {
- throw new RuntimeException("storeBlob test");
- });
- mStore.retrieveBlob(l2Key, TEST_CLIENT_ID, TEST_OTHER_DATA_NAME,
- (status, key, name, data) -> {
- assertTrue("Retrieve blob status not successful : " + status.resultCode,
- status.isSuccess());
- assertEquals(l2Key, key);
- assertEquals(name, TEST_DATA_NAME);
- assertTrue(Arrays.equals(b.data, data.data));
- });
-
- // verify the rest of the queue is still processed in order even if when one or more
- // callback throw the remote exception
- InOrder inOrder = inOrder(mMockService);
-
- inOrder.verify(mMockService).storeNetworkAttributes(eq(l2Key), mNapCaptor.capture(),
- any());
- inOrder.verify(mMockService).retrieveNetworkAttributes(eq(l2Key), any());
- inOrder.verify(mMockService).storeBlob(eq(l2Key), eq(TEST_CLIENT_ID), eq(TEST_DATA_NAME),
- eq(b), any());
- inOrder.verify(mMockService).retrieveBlob(eq(l2Key), eq(TEST_CLIENT_ID),
- eq(TEST_OTHER_DATA_NAME), any());
- assertEquals(TEST_NETWORK_ATTRIBUTES, new NetworkAttributes(mNapCaptor.getValue()));
- }
-
- @Test
- public void testFactoryReset() throws RemoteException {
- startIpMemoryStore(true /* supplyService */);
- mStore.factoryReset();
- verify(mMockService, times(1)).factoryReset();
- }
-}
diff --git a/tests/net/java/android/net/IpSecAlgorithmTest.java b/tests/net/java/android/net/IpSecAlgorithmTest.java
deleted file mode 100644
index 5bd221477412..000000000000
--- a/tests/net/java/android/net/IpSecAlgorithmTest.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-import static android.net.IpSecAlgorithm.ALGO_TO_REQUIRED_FIRST_SDK;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-
-import android.content.res.Resources;
-import android.os.Build;
-import android.os.Parcel;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.internal.util.CollectionUtils;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.AbstractMap.SimpleEntry;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Map.Entry;
-import java.util.Random;
-import java.util.Set;
-
-/** Unit tests for {@link IpSecAlgorithm}. */
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class IpSecAlgorithmTest {
- private static final byte[] KEY_MATERIAL;
-
- private final Resources mMockResources = mock(Resources.class);
-
- static {
- KEY_MATERIAL = new byte[128];
- new Random().nextBytes(KEY_MATERIAL);
- };
-
- private static byte[] generateKey(int keyLenInBits) {
- return Arrays.copyOf(KEY_MATERIAL, keyLenInBits / 8);
- }
-
- @Test
- public void testNoTruncLen() throws Exception {
- Entry<String, Integer>[] authAndAeadList =
- new Entry[] {
- new SimpleEntry<>(IpSecAlgorithm.AUTH_HMAC_MD5, 128),
- new SimpleEntry<>(IpSecAlgorithm.AUTH_HMAC_SHA1, 160),
- new SimpleEntry<>(IpSecAlgorithm.AUTH_HMAC_SHA256, 256),
- new SimpleEntry<>(IpSecAlgorithm.AUTH_HMAC_SHA384, 384),
- new SimpleEntry<>(IpSecAlgorithm.AUTH_HMAC_SHA512, 512),
- new SimpleEntry<>(IpSecAlgorithm.AUTH_CRYPT_AES_GCM, 224),
- };
-
- // Expect auth and aead algorithms to throw errors if trunclen is omitted.
- for (Entry<String, Integer> algData : authAndAeadList) {
- try {
- new IpSecAlgorithm(
- algData.getKey(), Arrays.copyOf(KEY_MATERIAL, algData.getValue() / 8));
- fail("Expected exception on unprovided auth trunclen");
- } catch (IllegalArgumentException expected) {
- }
- }
-
- // Ensure crypt works with no truncation length supplied.
- new IpSecAlgorithm(IpSecAlgorithm.CRYPT_AES_CBC, Arrays.copyOf(KEY_MATERIAL, 256 / 8));
- }
-
- private void checkAuthKeyAndTruncLenValidation(String algoName, int keyLen, int truncLen)
- throws Exception {
- new IpSecAlgorithm(algoName, generateKey(keyLen), truncLen);
-
- try {
- new IpSecAlgorithm(algoName, generateKey(keyLen));
- fail("Expected exception on unprovided auth trunclen");
- } catch (IllegalArgumentException pass) {
- }
-
- try {
- new IpSecAlgorithm(algoName, generateKey(keyLen + 8), truncLen);
- fail("Invalid key length not validated");
- } catch (IllegalArgumentException pass) {
- }
-
- try {
- new IpSecAlgorithm(algoName, generateKey(keyLen), truncLen + 1);
- fail("Invalid truncation length not validated");
- } catch (IllegalArgumentException pass) {
- }
- }
-
- private void checkCryptKeyLenValidation(String algoName, int keyLen) throws Exception {
- new IpSecAlgorithm(algoName, generateKey(keyLen));
-
- try {
- new IpSecAlgorithm(algoName, generateKey(keyLen + 8));
- fail("Invalid key length not validated");
- } catch (IllegalArgumentException pass) {
- }
- }
-
- @Test
- public void testValidationForAlgosAddedInS() throws Exception {
- if (Build.VERSION.DEVICE_INITIAL_SDK_INT <= Build.VERSION_CODES.R) {
- return;
- }
-
- for (int len : new int[] {160, 224, 288}) {
- checkCryptKeyLenValidation(IpSecAlgorithm.CRYPT_AES_CTR, len);
- }
- checkAuthKeyAndTruncLenValidation(IpSecAlgorithm.AUTH_AES_XCBC, 128, 96);
- checkAuthKeyAndTruncLenValidation(IpSecAlgorithm.AUTH_AES_CMAC, 128, 96);
- checkAuthKeyAndTruncLenValidation(IpSecAlgorithm.AUTH_CRYPT_CHACHA20_POLY1305, 288, 128);
- }
-
- @Test
- public void testTruncLenValidation() throws Exception {
- for (int truncLen : new int[] {256, 512}) {
- new IpSecAlgorithm(
- IpSecAlgorithm.AUTH_HMAC_SHA512,
- Arrays.copyOf(KEY_MATERIAL, 512 / 8),
- truncLen);
- }
-
- for (int truncLen : new int[] {255, 513}) {
- try {
- new IpSecAlgorithm(
- IpSecAlgorithm.AUTH_HMAC_SHA512,
- Arrays.copyOf(KEY_MATERIAL, 512 / 8),
- truncLen);
- fail("Invalid truncation length not validated");
- } catch (IllegalArgumentException pass) {
- }
- }
- }
-
- @Test
- public void testLenValidation() throws Exception {
- for (int len : new int[] {128, 192, 256}) {
- new IpSecAlgorithm(IpSecAlgorithm.CRYPT_AES_CBC, Arrays.copyOf(KEY_MATERIAL, len / 8));
- }
- try {
- new IpSecAlgorithm(IpSecAlgorithm.CRYPT_AES_CBC, Arrays.copyOf(KEY_MATERIAL, 384 / 8));
- fail("Invalid key length not validated");
- } catch (IllegalArgumentException pass) {
- }
- }
-
- @Test
- public void testAlgoNameValidation() throws Exception {
- try {
- new IpSecAlgorithm("rot13", Arrays.copyOf(KEY_MATERIAL, 128 / 8));
- fail("Invalid algorithm name not validated");
- } catch (IllegalArgumentException pass) {
- }
- }
-
- @Test
- public void testParcelUnparcel() throws Exception {
- IpSecAlgorithm init =
- new IpSecAlgorithm(
- IpSecAlgorithm.AUTH_HMAC_SHA512, Arrays.copyOf(KEY_MATERIAL, 512 / 8), 256);
-
- Parcel p = Parcel.obtain();
- p.setDataPosition(0);
- init.writeToParcel(p, 0);
-
- p.setDataPosition(0);
- IpSecAlgorithm fin = IpSecAlgorithm.CREATOR.createFromParcel(p);
- assertTrue("Parcel/Unparcel failed!", IpSecAlgorithm.equals(init, fin));
- p.recycle();
- }
-
- private static Set<String> getMandatoryAlgos() {
- return CollectionUtils.filter(
- ALGO_TO_REQUIRED_FIRST_SDK.keySet(),
- i -> Build.VERSION.DEVICE_INITIAL_SDK_INT >= ALGO_TO_REQUIRED_FIRST_SDK.get(i));
- }
-
- private static Set<String> getOptionalAlgos() {
- return CollectionUtils.filter(
- ALGO_TO_REQUIRED_FIRST_SDK.keySet(),
- i -> Build.VERSION.DEVICE_INITIAL_SDK_INT < ALGO_TO_REQUIRED_FIRST_SDK.get(i));
- }
-
- @Test
- public void testGetSupportedAlgorithms() throws Exception {
- assertTrue(IpSecAlgorithm.getSupportedAlgorithms().containsAll(getMandatoryAlgos()));
- assertTrue(ALGO_TO_REQUIRED_FIRST_SDK.keySet().containsAll(
- IpSecAlgorithm.getSupportedAlgorithms()));
- }
-
- @Test
- public void testLoadAlgos() throws Exception {
- final Set<String> optionalAlgoSet = getOptionalAlgos();
- final String[] optionalAlgos = optionalAlgoSet.toArray(new String[0]);
-
- doReturn(optionalAlgos).when(mMockResources)
- .getStringArray(com.android.internal.R.array.config_optionalIpSecAlgorithms);
-
- final Set<String> enabledAlgos = new HashSet<>(IpSecAlgorithm.loadAlgos(mMockResources));
- final Set<String> expectedAlgos = ALGO_TO_REQUIRED_FIRST_SDK.keySet();
-
- assertEquals(expectedAlgos, enabledAlgos);
- }
-}
diff --git a/tests/net/java/android/net/IpSecConfigTest.java b/tests/net/java/android/net/IpSecConfigTest.java
deleted file mode 100644
index 25e225ef303a..000000000000
--- a/tests/net/java/android/net/IpSecConfigTest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-import static com.android.testutils.ParcelUtils.assertParcelSane;
-import static com.android.testutils.ParcelUtils.assertParcelingIsLossless;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertNull;
-
-import androidx.test.filters.SmallTest;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/** Unit tests for {@link IpSecConfig}. */
-@SmallTest
-@RunWith(JUnit4.class)
-public class IpSecConfigTest {
-
- @Test
- public void testDefaults() throws Exception {
- IpSecConfig c = new IpSecConfig();
- assertEquals(IpSecTransform.MODE_TRANSPORT, c.getMode());
- assertEquals("", c.getSourceAddress());
- assertEquals("", c.getDestinationAddress());
- assertNull(c.getNetwork());
- assertEquals(IpSecTransform.ENCAP_NONE, c.getEncapType());
- assertEquals(IpSecManager.INVALID_RESOURCE_ID, c.getEncapSocketResourceId());
- assertEquals(0, c.getEncapRemotePort());
- assertEquals(0, c.getNattKeepaliveInterval());
- assertNull(c.getEncryption());
- assertNull(c.getAuthentication());
- assertEquals(IpSecManager.INVALID_RESOURCE_ID, c.getSpiResourceId());
- assertEquals(0, c.getXfrmInterfaceId());
- }
-
- private IpSecConfig getSampleConfig() {
- IpSecConfig c = new IpSecConfig();
- c.setMode(IpSecTransform.MODE_TUNNEL);
- c.setSourceAddress("0.0.0.0");
- c.setDestinationAddress("1.2.3.4");
- c.setSpiResourceId(1984);
- c.setEncryption(
- new IpSecAlgorithm(
- IpSecAlgorithm.CRYPT_AES_CBC,
- new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF}));
- c.setAuthentication(
- new IpSecAlgorithm(
- IpSecAlgorithm.AUTH_HMAC_MD5,
- new byte[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF, 0},
- 128));
- c.setAuthenticatedEncryption(
- new IpSecAlgorithm(
- IpSecAlgorithm.AUTH_CRYPT_AES_GCM,
- new byte[] {
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF, 0, 1, 2, 3, 4
- },
- 128));
- c.setEncapType(android.system.OsConstants.UDP_ENCAP_ESPINUDP);
- c.setEncapSocketResourceId(7);
- c.setEncapRemotePort(22);
- c.setNattKeepaliveInterval(42);
- c.setMarkValue(12);
- c.setMarkMask(23);
- c.setXfrmInterfaceId(34);
-
- return c;
- }
-
- @Test
- public void testCopyConstructor() {
- IpSecConfig original = getSampleConfig();
- IpSecConfig copy = new IpSecConfig(original);
-
- assertEquals(original, copy);
- assertNotSame(original, copy);
- }
-
- @Test
- public void testParcelUnparcel() {
- assertParcelingIsLossless(new IpSecConfig());
-
- IpSecConfig c = getSampleConfig();
- assertParcelSane(c, 15);
- }
-}
diff --git a/tests/net/java/android/net/IpSecManagerTest.java b/tests/net/java/android/net/IpSecManagerTest.java
deleted file mode 100644
index 730e2d56bd78..000000000000
--- a/tests/net/java/android/net/IpSecManagerTest.java
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-import static android.system.OsConstants.AF_INET;
-import static android.system.OsConstants.IPPROTO_UDP;
-import static android.system.OsConstants.SOCK_DGRAM;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyObject;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.system.Os;
-import android.test.mock.MockContext;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.server.IpSecService;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.net.InetAddress;
-import java.net.Socket;
-import java.net.UnknownHostException;
-
-/** Unit tests for {@link IpSecManager}. */
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class IpSecManagerTest {
-
- private static final int TEST_UDP_ENCAP_PORT = 34567;
- private static final int DROID_SPI = 0xD1201D;
- private static final int DUMMY_RESOURCE_ID = 0x1234;
-
- private static final InetAddress GOOGLE_DNS_4;
- private static final String VTI_INTF_NAME = "ipsec_test";
- private static final InetAddress VTI_LOCAL_ADDRESS;
- private static final LinkAddress VTI_INNER_ADDRESS = new LinkAddress("10.0.1.1/24");
-
- static {
- try {
- // Google Public DNS Addresses;
- GOOGLE_DNS_4 = InetAddress.getByName("8.8.8.8");
- VTI_LOCAL_ADDRESS = InetAddress.getByName("8.8.4.4");
- } catch (UnknownHostException e) {
- throw new RuntimeException("Could not resolve DNS Addresses", e);
- }
- }
-
- private IpSecService mMockIpSecService;
- private IpSecManager mIpSecManager;
- private MockContext mMockContext = new MockContext() {
- @Override
- public String getOpPackageName() {
- return "fooPackage";
- }
- };
-
- @Before
- public void setUp() throws Exception {
- mMockIpSecService = mock(IpSecService.class);
- mIpSecManager = new IpSecManager(mMockContext, mMockIpSecService);
- }
-
- /*
- * Allocate a specific SPI
- * Close SPIs
- */
- @Test
- public void testAllocSpi() throws Exception {
- IpSecSpiResponse spiResp =
- new IpSecSpiResponse(IpSecManager.Status.OK, DUMMY_RESOURCE_ID, DROID_SPI);
- when(mMockIpSecService.allocateSecurityParameterIndex(
- eq(GOOGLE_DNS_4.getHostAddress()),
- eq(DROID_SPI),
- anyObject()))
- .thenReturn(spiResp);
-
- IpSecManager.SecurityParameterIndex droidSpi =
- mIpSecManager.allocateSecurityParameterIndex(GOOGLE_DNS_4, DROID_SPI);
- assertEquals(DROID_SPI, droidSpi.getSpi());
-
- droidSpi.close();
-
- verify(mMockIpSecService).releaseSecurityParameterIndex(DUMMY_RESOURCE_ID);
- }
-
- @Test
- public void testAllocRandomSpi() throws Exception {
- IpSecSpiResponse spiResp =
- new IpSecSpiResponse(IpSecManager.Status.OK, DUMMY_RESOURCE_ID, DROID_SPI);
- when(mMockIpSecService.allocateSecurityParameterIndex(
- eq(GOOGLE_DNS_4.getHostAddress()),
- eq(IpSecManager.INVALID_SECURITY_PARAMETER_INDEX),
- anyObject()))
- .thenReturn(spiResp);
-
- IpSecManager.SecurityParameterIndex randomSpi =
- mIpSecManager.allocateSecurityParameterIndex(GOOGLE_DNS_4);
-
- assertEquals(DROID_SPI, randomSpi.getSpi());
-
- randomSpi.close();
-
- verify(mMockIpSecService).releaseSecurityParameterIndex(DUMMY_RESOURCE_ID);
- }
-
- /*
- * Throws resource unavailable exception
- */
- @Test
- public void testAllocSpiResUnavailableException() throws Exception {
- IpSecSpiResponse spiResp =
- new IpSecSpiResponse(IpSecManager.Status.RESOURCE_UNAVAILABLE, 0, 0);
- when(mMockIpSecService.allocateSecurityParameterIndex(
- anyString(), anyInt(), anyObject()))
- .thenReturn(spiResp);
-
- try {
- mIpSecManager.allocateSecurityParameterIndex(GOOGLE_DNS_4);
- fail("ResourceUnavailableException was not thrown");
- } catch (IpSecManager.ResourceUnavailableException e) {
- }
- }
-
- /*
- * Throws spi unavailable exception
- */
- @Test
- public void testAllocSpiSpiUnavailableException() throws Exception {
- IpSecSpiResponse spiResp = new IpSecSpiResponse(IpSecManager.Status.SPI_UNAVAILABLE, 0, 0);
- when(mMockIpSecService.allocateSecurityParameterIndex(
- anyString(), anyInt(), anyObject()))
- .thenReturn(spiResp);
-
- try {
- mIpSecManager.allocateSecurityParameterIndex(GOOGLE_DNS_4);
- fail("ResourceUnavailableException was not thrown");
- } catch (IpSecManager.ResourceUnavailableException e) {
- }
- }
-
- /*
- * Should throw exception when request spi 0 in IpSecManager
- */
- @Test
- public void testRequestAllocInvalidSpi() throws Exception {
- try {
- mIpSecManager.allocateSecurityParameterIndex(GOOGLE_DNS_4, 0);
- fail("Able to allocate invalid spi");
- } catch (IllegalArgumentException e) {
- }
- }
-
- @Test
- public void testOpenEncapsulationSocket() throws Exception {
- IpSecUdpEncapResponse udpEncapResp =
- new IpSecUdpEncapResponse(
- IpSecManager.Status.OK,
- DUMMY_RESOURCE_ID,
- TEST_UDP_ENCAP_PORT,
- Os.socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP));
- when(mMockIpSecService.openUdpEncapsulationSocket(eq(TEST_UDP_ENCAP_PORT), anyObject()))
- .thenReturn(udpEncapResp);
-
- IpSecManager.UdpEncapsulationSocket encapSocket =
- mIpSecManager.openUdpEncapsulationSocket(TEST_UDP_ENCAP_PORT);
- assertNotNull(encapSocket.getFileDescriptor());
- assertEquals(TEST_UDP_ENCAP_PORT, encapSocket.getPort());
-
- encapSocket.close();
-
- verify(mMockIpSecService).closeUdpEncapsulationSocket(DUMMY_RESOURCE_ID);
- }
-
- @Test
- public void testApplyTransportModeTransformEnsuresSocketCreation() throws Exception {
- Socket socket = new Socket();
- IpSecConfig dummyConfig = new IpSecConfig();
- IpSecTransform dummyTransform = new IpSecTransform(null, dummyConfig);
-
- // Even if underlying SocketImpl is not initalized, this should force the init, and
- // thereby succeed.
- mIpSecManager.applyTransportModeTransform(
- socket, IpSecManager.DIRECTION_IN, dummyTransform);
-
- // Check to make sure the FileDescriptor is non-null
- assertNotNull(socket.getFileDescriptor$());
- }
-
- @Test
- public void testRemoveTransportModeTransformsForcesSocketCreation() throws Exception {
- Socket socket = new Socket();
-
- // Even if underlying SocketImpl is not initalized, this should force the init, and
- // thereby succeed.
- mIpSecManager.removeTransportModeTransforms(socket);
-
- // Check to make sure the FileDescriptor is non-null
- assertNotNull(socket.getFileDescriptor$());
- }
-
- @Test
- public void testOpenEncapsulationSocketOnRandomPort() throws Exception {
- IpSecUdpEncapResponse udpEncapResp =
- new IpSecUdpEncapResponse(
- IpSecManager.Status.OK,
- DUMMY_RESOURCE_ID,
- TEST_UDP_ENCAP_PORT,
- Os.socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP));
-
- when(mMockIpSecService.openUdpEncapsulationSocket(eq(0), anyObject()))
- .thenReturn(udpEncapResp);
-
- IpSecManager.UdpEncapsulationSocket encapSocket =
- mIpSecManager.openUdpEncapsulationSocket();
-
- assertNotNull(encapSocket.getFileDescriptor());
- assertEquals(TEST_UDP_ENCAP_PORT, encapSocket.getPort());
-
- encapSocket.close();
-
- verify(mMockIpSecService).closeUdpEncapsulationSocket(DUMMY_RESOURCE_ID);
- }
-
- @Test
- public void testOpenEncapsulationSocketWithInvalidPort() throws Exception {
- try {
- mIpSecManager.openUdpEncapsulationSocket(IpSecManager.INVALID_SECURITY_PARAMETER_INDEX);
- fail("IllegalArgumentException was not thrown");
- } catch (IllegalArgumentException e) {
- }
- }
-
- // TODO: add test when applicable transform builder interface is available
-
- private IpSecManager.IpSecTunnelInterface createAndValidateVti(int resourceId, String intfName)
- throws Exception {
- IpSecTunnelInterfaceResponse dummyResponse =
- new IpSecTunnelInterfaceResponse(IpSecManager.Status.OK, resourceId, intfName);
- when(mMockIpSecService.createTunnelInterface(
- eq(VTI_LOCAL_ADDRESS.getHostAddress()), eq(GOOGLE_DNS_4.getHostAddress()),
- anyObject(), anyObject(), anyString()))
- .thenReturn(dummyResponse);
-
- IpSecManager.IpSecTunnelInterface tunnelIntf = mIpSecManager.createIpSecTunnelInterface(
- VTI_LOCAL_ADDRESS, GOOGLE_DNS_4, mock(Network.class));
-
- assertNotNull(tunnelIntf);
- return tunnelIntf;
- }
-
- @Test
- public void testCreateVti() throws Exception {
- IpSecManager.IpSecTunnelInterface tunnelIntf =
- createAndValidateVti(DUMMY_RESOURCE_ID, VTI_INTF_NAME);
-
- assertEquals(VTI_INTF_NAME, tunnelIntf.getInterfaceName());
-
- tunnelIntf.close();
- verify(mMockIpSecService).deleteTunnelInterface(eq(DUMMY_RESOURCE_ID), anyString());
- }
-
- @Test
- public void testAddRemoveAddressesFromVti() throws Exception {
- IpSecManager.IpSecTunnelInterface tunnelIntf =
- createAndValidateVti(DUMMY_RESOURCE_ID, VTI_INTF_NAME);
-
- tunnelIntf.addAddress(VTI_INNER_ADDRESS.getAddress(),
- VTI_INNER_ADDRESS.getPrefixLength());
- verify(mMockIpSecService)
- .addAddressToTunnelInterface(
- eq(DUMMY_RESOURCE_ID), eq(VTI_INNER_ADDRESS), anyString());
-
- tunnelIntf.removeAddress(VTI_INNER_ADDRESS.getAddress(),
- VTI_INNER_ADDRESS.getPrefixLength());
- verify(mMockIpSecService)
- .addAddressToTunnelInterface(
- eq(DUMMY_RESOURCE_ID), eq(VTI_INNER_ADDRESS), anyString());
- }
-}
diff --git a/tests/net/java/android/net/IpSecTransformTest.java b/tests/net/java/android/net/IpSecTransformTest.java
deleted file mode 100644
index 424f23dbbaf6..000000000000
--- a/tests/net/java/android/net/IpSecTransformTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-
-import androidx.test.filters.SmallTest;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/** Unit tests for {@link IpSecTransform}. */
-@SmallTest
-@RunWith(JUnit4.class)
-public class IpSecTransformTest {
-
- @Test
- public void testCreateTransformCopiesConfig() {
- // Create a config with a few parameters to make sure it's not empty
- IpSecConfig config = new IpSecConfig();
- config.setSourceAddress("0.0.0.0");
- config.setDestinationAddress("1.2.3.4");
- config.setSpiResourceId(1984);
-
- IpSecTransform preModification = new IpSecTransform(null, config);
-
- config.setSpiResourceId(1985);
- IpSecTransform postModification = new IpSecTransform(null, config);
-
- assertNotEquals(preModification, postModification);
- }
-
- @Test
- public void testCreateTransformsWithSameConfigEqual() {
- // Create a config with a few parameters to make sure it's not empty
- IpSecConfig config = new IpSecConfig();
- config.setSourceAddress("0.0.0.0");
- config.setDestinationAddress("1.2.3.4");
- config.setSpiResourceId(1984);
-
- IpSecTransform config1 = new IpSecTransform(null, config);
- IpSecTransform config2 = new IpSecTransform(null, config);
-
- assertEquals(config1, config2);
- }
-}
diff --git a/tests/net/java/android/net/KeepalivePacketDataUtilTest.java b/tests/net/java/android/net/KeepalivePacketDataUtilTest.java
deleted file mode 100644
index fc739fbfac61..000000000000
--- a/tests/net/java/android/net/KeepalivePacketDataUtilTest.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-import static com.android.testutils.ParcelUtils.assertParcelingIsLossless;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import android.net.util.KeepalivePacketDataUtil;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-import java.net.InetAddress;
-import java.nio.ByteBuffer;
-
-@RunWith(JUnit4.class)
-public final class KeepalivePacketDataUtilTest {
- private static final byte[] IPV4_KEEPALIVE_SRC_ADDR = {10, 0, 0, 1};
- private static final byte[] IPV4_KEEPALIVE_DST_ADDR = {10, 0, 0, 5};
-
- @Before
- public void setUp() {}
-
- @Test
- public void testFromTcpKeepaliveStableParcelable() throws Exception {
- final int srcPort = 1234;
- final int dstPort = 4321;
- final int seq = 0x11111111;
- final int ack = 0x22222222;
- final int wnd = 8000;
- final int wndScale = 2;
- final int tos = 4;
- final int ttl = 64;
- TcpKeepalivePacketData resultData = null;
- final TcpKeepalivePacketDataParcelable testInfo = new TcpKeepalivePacketDataParcelable();
- testInfo.srcAddress = IPV4_KEEPALIVE_SRC_ADDR;
- testInfo.srcPort = srcPort;
- testInfo.dstAddress = IPV4_KEEPALIVE_DST_ADDR;
- testInfo.dstPort = dstPort;
- testInfo.seq = seq;
- testInfo.ack = ack;
- testInfo.rcvWnd = wnd;
- testInfo.rcvWndScale = wndScale;
- testInfo.tos = tos;
- testInfo.ttl = ttl;
- try {
- resultData = KeepalivePacketDataUtil.fromStableParcelable(testInfo);
- } catch (InvalidPacketException e) {
- fail("InvalidPacketException: " + e);
- }
-
- assertEquals(InetAddress.getByAddress(testInfo.srcAddress), resultData.getSrcAddress());
- assertEquals(InetAddress.getByAddress(testInfo.dstAddress), resultData.getDstAddress());
- assertEquals(testInfo.srcPort, resultData.getSrcPort());
- assertEquals(testInfo.dstPort, resultData.getDstPort());
- assertEquals(testInfo.seq, resultData.tcpSeq);
- assertEquals(testInfo.ack, resultData.tcpAck);
- assertEquals(testInfo.rcvWnd, resultData.tcpWindow);
- assertEquals(testInfo.rcvWndScale, resultData.tcpWindowScale);
- assertEquals(testInfo.tos, resultData.ipTos);
- assertEquals(testInfo.ttl, resultData.ipTtl);
-
- assertParcelingIsLossless(resultData);
-
- final byte[] packet = resultData.getPacket();
- // IP version and IHL
- assertEquals(packet[0], 0x45);
- // TOS
- assertEquals(packet[1], tos);
- // TTL
- assertEquals(packet[8], ttl);
- // Source IP address.
- byte[] ip = new byte[4];
- ByteBuffer buf = ByteBuffer.wrap(packet, 12, 4);
- buf.get(ip);
- assertArrayEquals(ip, IPV4_KEEPALIVE_SRC_ADDR);
- // Destination IP address.
- buf = ByteBuffer.wrap(packet, 16, 4);
- buf.get(ip);
- assertArrayEquals(ip, IPV4_KEEPALIVE_DST_ADDR);
-
- buf = ByteBuffer.wrap(packet, 20, 12);
- // Source port.
- assertEquals(buf.getShort(), srcPort);
- // Destination port.
- assertEquals(buf.getShort(), dstPort);
- // Sequence number.
- assertEquals(buf.getInt(), seq);
- // Ack.
- assertEquals(buf.getInt(), ack);
- // Window size.
- buf = ByteBuffer.wrap(packet, 34, 2);
- assertEquals(buf.getShort(), wnd >> wndScale);
- }
-
- //TODO: add ipv6 test when ipv6 supported
-
- @Test
- public void testToTcpKeepaliveStableParcelable() throws Exception {
- final int srcPort = 1234;
- final int dstPort = 4321;
- final int sequence = 0x11111111;
- final int ack = 0x22222222;
- final int wnd = 48_000;
- final int wndScale = 2;
- final int tos = 4;
- final int ttl = 64;
- final TcpKeepalivePacketDataParcelable testInfo = new TcpKeepalivePacketDataParcelable();
- testInfo.srcAddress = IPV4_KEEPALIVE_SRC_ADDR;
- testInfo.srcPort = srcPort;
- testInfo.dstAddress = IPV4_KEEPALIVE_DST_ADDR;
- testInfo.dstPort = dstPort;
- testInfo.seq = sequence;
- testInfo.ack = ack;
- testInfo.rcvWnd = wnd;
- testInfo.rcvWndScale = wndScale;
- testInfo.tos = tos;
- testInfo.ttl = ttl;
- TcpKeepalivePacketData testData = null;
- TcpKeepalivePacketDataParcelable resultData = null;
- testData = KeepalivePacketDataUtil.fromStableParcelable(testInfo);
- resultData = KeepalivePacketDataUtil.toStableParcelable(testData);
- assertArrayEquals(resultData.srcAddress, IPV4_KEEPALIVE_SRC_ADDR);
- assertArrayEquals(resultData.dstAddress, IPV4_KEEPALIVE_DST_ADDR);
- assertEquals(resultData.srcPort, srcPort);
- assertEquals(resultData.dstPort, dstPort);
- assertEquals(resultData.seq, sequence);
- assertEquals(resultData.ack, ack);
- assertEquals(resultData.rcvWnd, wnd);
- assertEquals(resultData.rcvWndScale, wndScale);
- assertEquals(resultData.tos, tos);
- assertEquals(resultData.ttl, ttl);
-
- final String expected = ""
- + "android.net.TcpKeepalivePacketDataParcelable{srcAddress: [10, 0, 0, 1],"
- + " srcPort: 1234, dstAddress: [10, 0, 0, 5], dstPort: 4321, seq: 286331153,"
- + " ack: 572662306, rcvWnd: 48000, rcvWndScale: 2, tos: 4, ttl: 64}";
- assertEquals(expected, resultData.toString());
- }
-
- @Test
- public void testParseTcpKeepalivePacketData() throws Exception {
- final int srcPort = 1234;
- final int dstPort = 4321;
- final int sequence = 0x11111111;
- final int ack = 0x22222222;
- final int wnd = 4800;
- final int wndScale = 2;
- final int tos = 4;
- final int ttl = 64;
- final TcpKeepalivePacketDataParcelable testParcel = new TcpKeepalivePacketDataParcelable();
- testParcel.srcAddress = IPV4_KEEPALIVE_SRC_ADDR;
- testParcel.srcPort = srcPort;
- testParcel.dstAddress = IPV4_KEEPALIVE_DST_ADDR;
- testParcel.dstPort = dstPort;
- testParcel.seq = sequence;
- testParcel.ack = ack;
- testParcel.rcvWnd = wnd;
- testParcel.rcvWndScale = wndScale;
- testParcel.tos = tos;
- testParcel.ttl = ttl;
-
- final KeepalivePacketData testData =
- KeepalivePacketDataUtil.fromStableParcelable(testParcel);
- final TcpKeepalivePacketDataParcelable parsedParcelable =
- KeepalivePacketDataUtil.parseTcpKeepalivePacketData(testData);
- final TcpKeepalivePacketData roundTripData =
- KeepalivePacketDataUtil.fromStableParcelable(parsedParcelable);
-
- // Generated packet is the same, but rcvWnd / wndScale will differ if scale is non-zero
- assertTrue(testData.getPacket().length > 0);
- assertArrayEquals(testData.getPacket(), roundTripData.getPacket());
-
- testParcel.rcvWndScale = 0;
- final KeepalivePacketData noScaleTestData =
- KeepalivePacketDataUtil.fromStableParcelable(testParcel);
- final TcpKeepalivePacketDataParcelable noScaleParsedParcelable =
- KeepalivePacketDataUtil.parseTcpKeepalivePacketData(noScaleTestData);
- final TcpKeepalivePacketData noScaleRoundTripData =
- KeepalivePacketDataUtil.fromStableParcelable(noScaleParsedParcelable);
- assertEquals(noScaleTestData, noScaleRoundTripData);
- assertTrue(noScaleTestData.getPacket().length > 0);
- assertArrayEquals(noScaleTestData.getPacket(), noScaleRoundTripData.getPacket());
- }
-}
diff --git a/tests/net/java/android/net/MacAddressTest.java b/tests/net/java/android/net/MacAddressTest.java
deleted file mode 100644
index 6de31f6b4be1..000000000000
--- a/tests/net/java/android/net/MacAddressTest.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * Copyright 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.net.module.util.MacAddressUtils;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.net.Inet6Address;
-import java.util.Arrays;
-import java.util.Random;
-
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class MacAddressTest {
-
- static class AddrTypeTestCase {
- byte[] addr;
- int expectedType;
-
- static AddrTypeTestCase of(int expectedType, int... addr) {
- AddrTypeTestCase t = new AddrTypeTestCase();
- t.expectedType = expectedType;
- t.addr = toByteArray(addr);
- return t;
- }
- }
-
- @Test
- public void testMacAddrTypes() {
- AddrTypeTestCase[] testcases = {
- AddrTypeTestCase.of(MacAddress.TYPE_UNKNOWN),
- AddrTypeTestCase.of(MacAddress.TYPE_UNKNOWN, 0),
- AddrTypeTestCase.of(MacAddress.TYPE_UNKNOWN, 1, 2, 3, 4, 5),
- AddrTypeTestCase.of(MacAddress.TYPE_UNKNOWN, 1, 2, 3, 4, 5, 6, 7),
- AddrTypeTestCase.of(MacAddress.TYPE_UNICAST, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0),
- AddrTypeTestCase.of(MacAddress.TYPE_BROADCAST, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff),
- AddrTypeTestCase.of(MacAddress.TYPE_MULTICAST, 1, 2, 3, 4, 5, 6),
- AddrTypeTestCase.of(MacAddress.TYPE_MULTICAST, 11, 22, 33, 44, 55, 66),
- AddrTypeTestCase.of(MacAddress.TYPE_MULTICAST, 33, 33, 0xaa, 0xbb, 0xcc, 0xdd)
- };
-
- for (AddrTypeTestCase t : testcases) {
- int got = MacAddress.macAddressType(t.addr);
- String msg = String.format("expected type of %s to be %s, but got %s",
- Arrays.toString(t.addr), t.expectedType, got);
- assertEquals(msg, t.expectedType, got);
-
- if (got != MacAddress.TYPE_UNKNOWN) {
- assertEquals(got, MacAddress.fromBytes(t.addr).getAddressType());
- }
- }
- }
-
- @Test
- public void testToOuiString() {
- String[][] macs = {
- {"07:00:d3:56:8a:c4", "07:00:d3"},
- {"33:33:aa:bb:cc:dd", "33:33:aa"},
- {"06:00:00:00:00:00", "06:00:00"},
- {"07:00:d3:56:8a:c4", "07:00:d3"}
- };
-
- for (String[] pair : macs) {
- String mac = pair[0];
- String expected = pair[1];
- assertEquals(expected, MacAddress.fromString(mac).toOuiString());
- }
- }
-
- @Test
- public void testHexPaddingWhenPrinting() {
- String[] macs = {
- "07:00:d3:56:8a:c4",
- "33:33:aa:bb:cc:dd",
- "06:00:00:00:00:00",
- "07:00:d3:56:8a:c4"
- };
-
- for (String mac : macs) {
- assertEquals(mac, MacAddress.fromString(mac).toString());
- assertEquals(mac,
- MacAddress.stringAddrFromByteAddr(MacAddress.byteAddrFromStringAddr(mac)));
- }
- }
-
- @Test
- public void testIsMulticastAddress() {
- MacAddress[] multicastAddresses = {
- MacAddress.BROADCAST_ADDRESS,
- MacAddress.fromString("07:00:d3:56:8a:c4"),
- MacAddress.fromString("33:33:aa:bb:cc:dd"),
- };
- MacAddress[] unicastAddresses = {
- MacAddress.ALL_ZEROS_ADDRESS,
- MacAddress.fromString("00:01:44:55:66:77"),
- MacAddress.fromString("08:00:22:33:44:55"),
- MacAddress.fromString("06:00:00:00:00:00"),
- };
-
- for (MacAddress mac : multicastAddresses) {
- String msg = mac.toString() + " expected to be a multicast address";
- assertTrue(msg, MacAddressUtils.isMulticastAddress(mac));
- }
- for (MacAddress mac : unicastAddresses) {
- String msg = mac.toString() + " expected not to be a multicast address";
- assertFalse(msg, MacAddressUtils.isMulticastAddress(mac));
- }
- }
-
- @Test
- public void testIsLocallyAssignedAddress() {
- MacAddress[] localAddresses = {
- MacAddress.fromString("06:00:00:00:00:00"),
- MacAddress.fromString("07:00:d3:56:8a:c4"),
- MacAddress.fromString("33:33:aa:bb:cc:dd"),
- };
- MacAddress[] universalAddresses = {
- MacAddress.fromString("00:01:44:55:66:77"),
- MacAddress.fromString("08:00:22:33:44:55"),
- };
-
- for (MacAddress mac : localAddresses) {
- String msg = mac.toString() + " expected to be a locally assigned address";
- assertTrue(msg, mac.isLocallyAssigned());
- }
- for (MacAddress mac : universalAddresses) {
- String msg = mac.toString() + " expected not to be globally unique address";
- assertFalse(msg, mac.isLocallyAssigned());
- }
- }
-
- @Test
- public void testMacAddressConversions() {
- final int iterations = 10000;
- for (int i = 0; i < iterations; i++) {
- MacAddress mac = MacAddressUtils.createRandomUnicastAddress();
-
- String stringRepr = mac.toString();
- byte[] bytesRepr = mac.toByteArray();
-
- assertEquals(mac, MacAddress.fromString(stringRepr));
- assertEquals(mac, MacAddress.fromBytes(bytesRepr));
-
- assertEquals(mac, MacAddress.fromString(MacAddress.stringAddrFromByteAddr(bytesRepr)));
- assertEquals(mac, MacAddress.fromBytes(MacAddress.byteAddrFromStringAddr(stringRepr)));
- }
- }
-
- @Test
- public void testMacAddressRandomGeneration() {
- final int iterations = 1000;
- final String expectedAndroidOui = "da:a1:19";
- for (int i = 0; i < iterations; i++) {
- MacAddress mac = MacAddress.createRandomUnicastAddressWithGoogleBase();
- String stringRepr = mac.toString();
-
- assertTrue(stringRepr + " expected to be a locally assigned address",
- mac.isLocallyAssigned());
- assertTrue(stringRepr + " expected to begin with " + expectedAndroidOui,
- stringRepr.startsWith(expectedAndroidOui));
- }
-
- final Random r = new Random();
- final String anotherOui = "24:5f:78";
- final String expectedLocalOui = "26:5f:78";
- final MacAddress base = MacAddress.fromString(anotherOui + ":0:0:0");
- for (int i = 0; i < iterations; i++) {
- MacAddress mac = MacAddressUtils.createRandomUnicastAddress(base, r);
- String stringRepr = mac.toString();
-
- assertTrue(stringRepr + " expected to be a locally assigned address",
- mac.isLocallyAssigned());
- assertEquals(MacAddress.TYPE_UNICAST, mac.getAddressType());
- assertTrue(stringRepr + " expected to begin with " + expectedLocalOui,
- stringRepr.startsWith(expectedLocalOui));
- }
-
- for (int i = 0; i < iterations; i++) {
- MacAddress mac = MacAddressUtils.createRandomUnicastAddress();
- String stringRepr = mac.toString();
-
- assertTrue(stringRepr + " expected to be a locally assigned address",
- mac.isLocallyAssigned());
- assertEquals(MacAddress.TYPE_UNICAST, mac.getAddressType());
- }
- }
-
- @Test
- public void testConstructorInputValidation() {
- String[] invalidStringAddresses = {
- "",
- "abcd",
- "1:2:3:4:5",
- "1:2:3:4:5:6:7",
- "10000:2:3:4:5:6",
- };
-
- for (String s : invalidStringAddresses) {
- try {
- MacAddress mac = MacAddress.fromString(s);
- fail("MacAddress.fromString(" + s + ") should have failed, but returned " + mac);
- } catch (IllegalArgumentException excepted) {
- }
- }
-
- try {
- MacAddress mac = MacAddress.fromString(null);
- fail("MacAddress.fromString(null) should have failed, but returned " + mac);
- } catch (NullPointerException excepted) {
- }
-
- byte[][] invalidBytesAddresses = {
- {},
- {1,2,3,4,5},
- {1,2,3,4,5,6,7},
- };
-
- for (byte[] b : invalidBytesAddresses) {
- try {
- MacAddress mac = MacAddress.fromBytes(b);
- fail("MacAddress.fromBytes(" + Arrays.toString(b)
- + ") should have failed, but returned " + mac);
- } catch (IllegalArgumentException excepted) {
- }
- }
-
- try {
- MacAddress mac = MacAddress.fromBytes(null);
- fail("MacAddress.fromBytes(null) should have failed, but returned " + mac);
- } catch (NullPointerException excepted) {
- }
- }
-
- @Test
- public void testMatches() {
- // match 4 bytes prefix
- assertTrue(MacAddress.fromString("aa:bb:cc:dd:ee:11").matches(
- MacAddress.fromString("aa:bb:cc:dd:00:00"),
- MacAddress.fromString("ff:ff:ff:ff:00:00")));
-
- // match bytes 0,1,2 and 5
- assertTrue(MacAddress.fromString("aa:bb:cc:dd:ee:11").matches(
- MacAddress.fromString("aa:bb:cc:00:00:11"),
- MacAddress.fromString("ff:ff:ff:00:00:ff")));
-
- // match 34 bit prefix
- assertTrue(MacAddress.fromString("aa:bb:cc:dd:ee:11").matches(
- MacAddress.fromString("aa:bb:cc:dd:c0:00"),
- MacAddress.fromString("ff:ff:ff:ff:c0:00")));
-
- // fail to match 36 bit prefix
- assertFalse(MacAddress.fromString("aa:bb:cc:dd:ee:11").matches(
- MacAddress.fromString("aa:bb:cc:dd:40:00"),
- MacAddress.fromString("ff:ff:ff:ff:f0:00")));
-
- // match all 6 bytes
- assertTrue(MacAddress.fromString("aa:bb:cc:dd:ee:11").matches(
- MacAddress.fromString("aa:bb:cc:dd:ee:11"),
- MacAddress.fromString("ff:ff:ff:ff:ff:ff")));
-
- // match none of 6 bytes
- assertTrue(MacAddress.fromString("aa:bb:cc:dd:ee:11").matches(
- MacAddress.fromString("00:00:00:00:00:00"),
- MacAddress.fromString("00:00:00:00:00:00")));
- }
-
- /**
- * Tests that link-local address generation from MAC is valid.
- */
- @Test
- public void testLinkLocalFromMacGeneration() {
- MacAddress mac = MacAddress.fromString("52:74:f2:b1:a8:7f");
- byte[] inet6ll = {(byte) 0xfe, (byte) 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x74,
- (byte) 0xf2, (byte) 0xff, (byte) 0xfe, (byte) 0xb1, (byte) 0xa8, 0x7f};
- Inet6Address llv6 = mac.getLinkLocalIpv6FromEui48Mac();
- assertTrue(llv6.isLinkLocalAddress());
- assertArrayEquals(inet6ll, llv6.getAddress());
- }
-
- static byte[] toByteArray(int... in) {
- byte[] out = new byte[in.length];
- for (int i = 0; i < in.length; i++) {
- out[i] = (byte) in[i];
- }
- return out;
- }
-}
diff --git a/tests/net/java/android/net/NetworkIdentityTest.kt b/tests/net/java/android/net/NetworkIdentityTest.kt
deleted file mode 100644
index eb2b85c14578..000000000000
--- a/tests/net/java/android/net/NetworkIdentityTest.kt
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net
-
-import android.net.NetworkIdentity.OEM_NONE
-import android.net.NetworkIdentity.OEM_PAID
-import android.net.NetworkIdentity.OEM_PRIVATE
-import android.net.NetworkIdentity.getOemBitfield
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
-import kotlin.test.assertEquals
-
-@RunWith(JUnit4::class)
-class NetworkIdentityTest {
- @Test
- fun testGetOemBitfield() {
- val oemNone = NetworkCapabilities().apply {
- setCapability(NetworkCapabilities.NET_CAPABILITY_OEM_PAID, false)
- setCapability(NetworkCapabilities.NET_CAPABILITY_OEM_PRIVATE, false)
- }
- val oemPaid = NetworkCapabilities().apply {
- setCapability(NetworkCapabilities.NET_CAPABILITY_OEM_PAID, true)
- setCapability(NetworkCapabilities.NET_CAPABILITY_OEM_PRIVATE, false)
- }
- val oemPrivate = NetworkCapabilities().apply {
- setCapability(NetworkCapabilities.NET_CAPABILITY_OEM_PAID, false)
- setCapability(NetworkCapabilities.NET_CAPABILITY_OEM_PRIVATE, true)
- }
- val oemAll = NetworkCapabilities().apply {
- setCapability(NetworkCapabilities.NET_CAPABILITY_OEM_PAID, true)
- setCapability(NetworkCapabilities.NET_CAPABILITY_OEM_PRIVATE, true)
- }
-
- assertEquals(getOemBitfield(oemNone), OEM_NONE)
- assertEquals(getOemBitfield(oemPaid), OEM_PAID)
- assertEquals(getOemBitfield(oemPrivate), OEM_PRIVATE)
- assertEquals(getOemBitfield(oemAll), OEM_PAID or OEM_PRIVATE)
- }
-}
diff --git a/tests/net/java/android/net/NetworkStatsTest.java b/tests/net/java/android/net/NetworkStatsTest.java
deleted file mode 100644
index 23d5a7e5d5f8..000000000000
--- a/tests/net/java/android/net/NetworkStatsTest.java
+++ /dev/null
@@ -1,1024 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-import static android.net.NetworkStats.DEFAULT_NETWORK_ALL;
-import static android.net.NetworkStats.DEFAULT_NETWORK_NO;
-import static android.net.NetworkStats.DEFAULT_NETWORK_YES;
-import static android.net.NetworkStats.IFACE_ALL;
-import static android.net.NetworkStats.INTERFACES_ALL;
-import static android.net.NetworkStats.METERED_ALL;
-import static android.net.NetworkStats.METERED_NO;
-import static android.net.NetworkStats.METERED_YES;
-import static android.net.NetworkStats.ROAMING_ALL;
-import static android.net.NetworkStats.ROAMING_NO;
-import static android.net.NetworkStats.ROAMING_YES;
-import static android.net.NetworkStats.SET_ALL;
-import static android.net.NetworkStats.SET_DBG_VPN_IN;
-import static android.net.NetworkStats.SET_DBG_VPN_OUT;
-import static android.net.NetworkStats.SET_DEFAULT;
-import static android.net.NetworkStats.SET_FOREGROUND;
-import static android.net.NetworkStats.TAG_ALL;
-import static android.net.NetworkStats.TAG_NONE;
-import static android.net.NetworkStats.UID_ALL;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import android.os.Process;
-import android.util.ArrayMap;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.google.android.collect.Sets;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.Arrays;
-import java.util.HashSet;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class NetworkStatsTest {
-
- private static final String TEST_IFACE = "test0";
- private static final String TEST_IFACE2 = "test2";
- private static final int TEST_UID = 1001;
- private static final long TEST_START = 1194220800000L;
-
- @Test
- public void testFindIndex() throws Exception {
- final NetworkStats stats = new NetworkStats(TEST_START, 5)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_YES, 1024L, 8L, 0L, 0L, 10)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 0L, 0L, 1024L, 8L, 11)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO,
- DEFAULT_NETWORK_YES, 0L, 0L, 1024L, 8L, 11)
- .insertEntry(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 1024L, 8L, 1024L, 8L, 12)
- .insertEntry(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_YES,
- DEFAULT_NETWORK_YES, 1024L, 8L, 1024L, 8L, 12);
-
- assertEquals(4, stats.findIndex(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, METERED_YES,
- ROAMING_YES, DEFAULT_NETWORK_YES));
- assertEquals(3, stats.findIndex(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO));
- assertEquals(2, stats.findIndex(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_YES,
- ROAMING_NO, DEFAULT_NETWORK_YES));
- assertEquals(1, stats.findIndex(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO));
- assertEquals(0, stats.findIndex(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_YES));
- assertEquals(-1, stats.findIndex(TEST_IFACE, 6, SET_DEFAULT, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO));
- assertEquals(-1, stats.findIndex(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO));
- }
-
- @Test
- public void testFindIndexHinted() {
- final NetworkStats stats = new NetworkStats(TEST_START, 3)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_YES, 1024L, 8L, 0L, 0L, 10)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 0L, 0L, 1024L, 8L, 11)
- .insertEntry(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_YES, 1024L, 8L, 1024L, 8L, 12)
- .insertEntry(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 1024L, 8L, 0L, 0L, 10)
- .insertEntry(TEST_IFACE2, 101, SET_DEFAULT, 0xF00D, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_YES, 0L, 0L, 1024L, 8L, 11)
- .insertEntry(TEST_IFACE2, 101, SET_DEFAULT, 0xF00D, METERED_YES, ROAMING_NO,
- DEFAULT_NETWORK_NO, 0L, 0L, 1024L, 8L, 11)
- .insertEntry(TEST_IFACE2, 102, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_YES, 1024L, 8L, 1024L, 8L, 12)
- .insertEntry(TEST_IFACE2, 102, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_YES,
- DEFAULT_NETWORK_NO, 1024L, 8L, 1024L, 8L, 12);
-
- // verify that we correctly find across regardless of hinting
- for (int hint = 0; hint < stats.size(); hint++) {
- assertEquals(0, stats.findIndexHinted(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE,
- METERED_NO, ROAMING_NO, DEFAULT_NETWORK_YES, hint));
- assertEquals(1, stats.findIndexHinted(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE,
- METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, hint));
- assertEquals(2, stats.findIndexHinted(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE,
- METERED_NO, ROAMING_NO, DEFAULT_NETWORK_YES, hint));
- assertEquals(3, stats.findIndexHinted(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE,
- METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, hint));
- assertEquals(4, stats.findIndexHinted(TEST_IFACE2, 101, SET_DEFAULT, 0xF00D,
- METERED_NO, ROAMING_NO, DEFAULT_NETWORK_YES, hint));
- assertEquals(5, stats.findIndexHinted(TEST_IFACE2, 101, SET_DEFAULT, 0xF00D,
- METERED_YES, ROAMING_NO, DEFAULT_NETWORK_NO, hint));
- assertEquals(6, stats.findIndexHinted(TEST_IFACE2, 102, SET_DEFAULT, TAG_NONE,
- METERED_NO, ROAMING_NO, DEFAULT_NETWORK_YES, hint));
- assertEquals(7, stats.findIndexHinted(TEST_IFACE2, 102, SET_DEFAULT, TAG_NONE,
- METERED_YES, ROAMING_YES, DEFAULT_NETWORK_NO, hint));
- assertEquals(-1, stats.findIndexHinted(TEST_IFACE, 6, SET_DEFAULT, TAG_NONE,
- METERED_NO, ROAMING_NO, DEFAULT_NETWORK_YES, hint));
- assertEquals(-1, stats.findIndexHinted(TEST_IFACE2, 102, SET_DEFAULT, TAG_NONE,
- METERED_YES, ROAMING_YES, DEFAULT_NETWORK_YES, hint));
- }
- }
-
- @Test
- public void testAddEntryGrow() throws Exception {
- final NetworkStats stats = new NetworkStats(TEST_START, 4);
-
- assertEquals(0, stats.size());
- assertEquals(4, stats.internalSize());
-
- stats.insertEntry(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_YES, 1L, 1L, 2L, 2L, 3);
- stats.insertEntry(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 2L, 2L, 2L, 2L, 4);
- stats.insertEntry(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_YES,
- DEFAULT_NETWORK_YES, 3L, 3L, 2L, 2L, 5);
- stats.insertEntry(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_YES,
- DEFAULT_NETWORK_NO, 3L, 3L, 2L, 2L, 5);
-
- assertEquals(4, stats.size());
- assertEquals(4, stats.internalSize());
-
- stats.insertEntry(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 4L, 40L, 4L, 40L, 7);
- stats.insertEntry(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_YES, 5L, 50L, 4L, 40L, 8);
- stats.insertEntry(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 6L, 60L, 5L, 50L, 10);
- stats.insertEntry(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_YES,
- DEFAULT_NETWORK_YES, 7L, 70L, 5L, 50L, 11);
- stats.insertEntry(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_YES,
- DEFAULT_NETWORK_NO, 7L, 70L, 5L, 50L, 11);
-
- assertEquals(9, stats.size());
- assertTrue(stats.internalSize() >= 9);
-
- assertValues(stats, 0, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_YES, 1L, 1L, 2L, 2L, 3);
- assertValues(stats, 1, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 2L, 2L, 2L, 2L, 4);
- assertValues(stats, 2, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_YES,
- DEFAULT_NETWORK_YES, 3L, 3L, 2L, 2L, 5);
- assertValues(stats, 3, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_YES,
- ROAMING_YES, DEFAULT_NETWORK_NO, 3L, 3L, 2L, 2L, 5);
- assertValues(stats, 4, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 4L, 40L, 4L, 40L, 7);
- assertValues(stats, 5, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_YES, 5L, 50L, 4L, 40L, 8);
- assertValues(stats, 6, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 6L, 60L, 5L, 50L, 10);
- assertValues(stats, 7, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_YES,
- DEFAULT_NETWORK_YES, 7L, 70L, 5L, 50L, 11);
- assertValues(stats, 8, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_YES,
- ROAMING_YES, DEFAULT_NETWORK_NO, 7L, 70L, 5L, 50L, 11);
- }
-
- @Test
- public void testCombineExisting() throws Exception {
- final NetworkStats stats = new NetworkStats(TEST_START, 10);
-
- stats.insertEntry(TEST_IFACE, 1001, SET_DEFAULT, TAG_NONE, 512L, 4L, 256L, 2L, 10);
- stats.insertEntry(TEST_IFACE, 1001, SET_DEFAULT, 0xff, 128L, 1L, 128L, 1L, 2);
- stats.combineValues(TEST_IFACE, 1001, SET_DEFAULT, TAG_NONE, -128L, -1L,
- -128L, -1L, -1);
-
- assertValues(stats, 0, TEST_IFACE, 1001, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 384L, 3L, 128L, 1L, 9);
- assertValues(stats, 1, TEST_IFACE, 1001, SET_DEFAULT, 0xff, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 128L, 1L, 128L, 1L, 2);
-
- // now try combining that should create row
- stats.combineValues(TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 128L, 1L, 128L, 1L, 3);
- assertValues(stats, 2, TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 128L, 1L, 128L, 1L, 3);
- stats.combineValues(TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 128L, 1L, 128L, 1L, 3);
- assertValues(stats, 2, TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 256L, 2L, 256L, 2L, 6);
- }
-
- @Test
- public void testSubtractIdenticalData() throws Exception {
- final NetworkStats before = new NetworkStats(TEST_START, 2)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
-
- final NetworkStats after = new NetworkStats(TEST_START, 2)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
-
- final NetworkStats result = after.subtract(before);
-
- // identical data should result in zero delta
- assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 0L, 0L, 0L, 0L, 0);
- assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 0L, 0L, 0L, 0L, 0);
- }
-
- @Test
- public void testSubtractIdenticalRows() throws Exception {
- final NetworkStats before = new NetworkStats(TEST_START, 2)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
-
- final NetworkStats after = new NetworkStats(TEST_START, 2)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1025L, 9L, 2L, 1L, 15)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 3L, 1L, 1028L, 9L, 20);
-
- final NetworkStats result = after.subtract(before);
-
- // expect delta between measurements
- assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 1L, 1L, 2L, 1L, 4);
- assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 3L, 1L, 4L, 1L, 8);
- }
-
- @Test
- public void testSubtractNewRows() throws Exception {
- final NetworkStats before = new NetworkStats(TEST_START, 2)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
-
- final NetworkStats after = new NetworkStats(TEST_START, 3)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12)
- .insertEntry(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 20);
-
- final NetworkStats result = after.subtract(before);
-
- // its okay to have new rows
- assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 0L, 0L, 0L, 0L, 0);
- assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 0L, 0L, 0L, 0L, 0);
- assertValues(result, 2, TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 1024L, 8L, 1024L, 8L, 20);
- }
-
- @Test
- public void testSubtractMissingRows() throws Exception {
- final NetworkStats before = new NetworkStats(TEST_START, 2)
- .insertEntry(TEST_IFACE, UID_ALL, SET_DEFAULT, TAG_NONE, 1024L, 0L, 0L, 0L, 0)
- .insertEntry(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 2048L, 0L, 0L, 0L, 0);
-
- final NetworkStats after = new NetworkStats(TEST_START, 1)
- .insertEntry(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 2049L, 2L, 3L, 4L, 0);
-
- final NetworkStats result = after.subtract(before);
-
- // should silently drop omitted rows
- assertEquals(1, result.size());
- assertValues(result, 0, TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 1L, 2L, 3L, 4L, 0);
- assertEquals(4L, result.getTotalBytes());
- }
-
- @Test
- public void testTotalBytes() throws Exception {
- final NetworkStats iface = new NetworkStats(TEST_START, 2)
- .insertEntry(TEST_IFACE, UID_ALL, SET_DEFAULT, TAG_NONE, 128L, 0L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 256L, 0L, 0L, 0L, 0L);
- assertEquals(384L, iface.getTotalBytes());
-
- final NetworkStats uidSet = new NetworkStats(TEST_START, 3)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_FOREGROUND, TAG_NONE, 32L, 0L, 0L, 0L, 0L);
- assertEquals(96L, uidSet.getTotalBytes());
-
- final NetworkStats uidTag = new NetworkStats(TEST_START, 6)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 16L, 0L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 16L, 0L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, 8L, 0L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, 16L, 0L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 16L, 0L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 8L, 0L, 0L, 0L, 0L);
- assertEquals(64L, uidTag.getTotalBytes());
-
- final NetworkStats uidMetered = new NetworkStats(TEST_START, 3)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_YES, 32L, 0L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO,
- DEFAULT_NETWORK_NO, 32L, 0L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO,
- DEFAULT_NETWORK_YES, 32L, 0L, 0L, 0L, 0L);
- assertEquals(96L, uidMetered.getTotalBytes());
-
- final NetworkStats uidRoaming = new NetworkStats(TEST_START, 3)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_YES, 32L, 0L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO,
- DEFAULT_NETWORK_NO, 32L, 0L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_YES,
- DEFAULT_NETWORK_YES, 32L, 0L, 0L, 0L, 0L);
- assertEquals(96L, uidRoaming.getTotalBytes());
- }
-
- @Test
- public void testGroupedByIfaceEmpty() throws Exception {
- final NetworkStats uidStats = new NetworkStats(TEST_START, 3);
- final NetworkStats grouped = uidStats.groupedByIface();
-
- assertEquals(0, uidStats.size());
- assertEquals(0, grouped.size());
- }
-
- @Test
- public void testGroupedByIfaceAll() throws Exception {
- final NetworkStats uidStats = new NetworkStats(TEST_START, 3)
- .insertEntry(IFACE_ALL, 100, SET_ALL, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_YES, 128L, 8L, 0L, 2L, 20L)
- .insertEntry(IFACE_ALL, 101, SET_FOREGROUND, TAG_NONE, METERED_YES, ROAMING_NO,
- DEFAULT_NETWORK_NO, 128L, 8L, 0L, 2L, 20L)
- .insertEntry(IFACE_ALL, 101, SET_ALL, TAG_NONE, METERED_NO, ROAMING_YES,
- DEFAULT_NETWORK_YES, 128L, 8L, 0L, 2L, 20L);
- final NetworkStats grouped = uidStats.groupedByIface();
-
- assertEquals(3, uidStats.size());
- assertEquals(1, grouped.size());
-
- assertValues(grouped, 0, IFACE_ALL, UID_ALL, SET_ALL, TAG_NONE, METERED_ALL, ROAMING_ALL,
- DEFAULT_NETWORK_ALL, 384L, 24L, 0L, 6L, 0L);
- }
-
- @Test
- public void testGroupedByIface() throws Exception {
- final NetworkStats uidStats = new NetworkStats(TEST_START, 7)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_YES, 128L, 8L, 0L, 2L, 20L)
- .insertEntry(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 512L, 32L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_YES, 64L, 4L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 512L, 32L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_YES, 128L, 8L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, METERED_YES, ROAMING_NO,
- DEFAULT_NETWORK_NO, 128L, 8L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_YES,
- DEFAULT_NETWORK_YES, 128L, 8L, 0L, 0L, 0L);
-
- final NetworkStats grouped = uidStats.groupedByIface();
-
- assertEquals(7, uidStats.size());
-
- assertEquals(2, grouped.size());
- assertValues(grouped, 0, TEST_IFACE, UID_ALL, SET_ALL, TAG_NONE, METERED_ALL, ROAMING_ALL,
- DEFAULT_NETWORK_ALL, 384L, 24L, 0L, 2L, 0L);
- assertValues(grouped, 1, TEST_IFACE2, UID_ALL, SET_ALL, TAG_NONE, METERED_ALL, ROAMING_ALL,
- DEFAULT_NETWORK_ALL, 1024L, 64L, 0L, 0L, 0L);
- }
-
- @Test
- public void testAddAllValues() {
- final NetworkStats first = new NetworkStats(TEST_START, 5)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO,
- DEFAULT_NETWORK_YES, 32L, 0L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 32L, 0L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, METERED_YES, ROAMING_YES,
- DEFAULT_NETWORK_YES, 32L, 0L, 0L, 0L, 0L);
-
- final NetworkStats second = new NetworkStats(TEST_START, 2)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO,
- DEFAULT_NETWORK_YES, 32L, 0L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 32L, 0L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, METERED_YES, ROAMING_YES,
- DEFAULT_NETWORK_YES, 32L, 0L, 0L, 0L, 0L);
-
- first.combineAllValues(second);
-
- assertEquals(4, first.size());
- assertValues(first, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO,
- DEFAULT_NETWORK_YES, 64L, 0L, 0L, 0L, 0L);
- assertValues(first, 1, TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 32L, 0L, 0L, 0L, 0L);
- assertValues(first, 2, TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, METERED_YES, ROAMING_YES,
- DEFAULT_NETWORK_YES, 64L, 0L, 0L, 0L, 0L);
- assertValues(first, 3, TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 32L, 0L, 0L, 0L, 0L);
- }
-
- @Test
- public void testGetTotal() {
- final NetworkStats stats = new NetworkStats(TEST_START, 7)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_YES, 128L, 8L, 0L, 2L, 20L)
- .insertEntry(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 512L, 32L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_YES, 64L, 4L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 512L,32L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO,
- DEFAULT_NETWORK_YES, 128L, 8L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 128L, 8L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_YES,
- DEFAULT_NETWORK_NO, 128L, 8L, 0L, 0L, 0L);
-
- assertValues(stats.getTotal(null), 1408L, 88L, 0L, 2L, 20L);
- assertValues(stats.getTotal(null, 100), 1280L, 80L, 0L, 2L, 20L);
- assertValues(stats.getTotal(null, 101), 128L, 8L, 0L, 0L, 0L);
-
- final HashSet<String> ifaces = Sets.newHashSet();
- assertValues(stats.getTotal(null, ifaces), 0L, 0L, 0L, 0L, 0L);
-
- ifaces.add(TEST_IFACE2);
- assertValues(stats.getTotal(null, ifaces), 1024L, 64L, 0L, 0L, 0L);
- }
-
- @Test
- public void testRemoveUids() throws Exception {
- final NetworkStats before = new NetworkStats(TEST_START, 3);
-
- // Test 0 item stats.
- NetworkStats after = before.clone();
- after.removeUids(new int[0]);
- assertEquals(0, after.size());
- after.removeUids(new int[] {100});
- assertEquals(0, after.size());
-
- // Test 1 item stats.
- before.insertEntry(TEST_IFACE, 99, SET_DEFAULT, TAG_NONE, 1L, 128L, 0L, 2L, 20L);
- after = before.clone();
- after.removeUids(new int[0]);
- assertEquals(1, after.size());
- assertValues(after, 0, TEST_IFACE, 99, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 1L, 128L, 0L, 2L, 20L);
- after.removeUids(new int[] {99});
- assertEquals(0, after.size());
-
- // Append remaining test items.
- before.insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 2L, 64L, 0L, 2L, 20L)
- .insertEntry(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 4L, 32L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, 8L, 16L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, 16L, 8L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 32L, 4L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 64L, 2L, 0L, 0L, 0L);
- assertEquals(7, before.size());
-
- // Test remove with empty uid list.
- after = before.clone();
- after.removeUids(new int[0]);
- assertValues(after.getTotalIncludingTags(null), 127L, 254L, 0L, 4L, 40L);
-
- // Test remove uids don't exist in stats.
- after.removeUids(new int[] {98, 0, Integer.MIN_VALUE, Integer.MAX_VALUE});
- assertValues(after.getTotalIncludingTags(null), 127L, 254L, 0L, 4L, 40L);
-
- // Test remove all uids.
- after.removeUids(new int[] {99, 100, 100, 101});
- assertEquals(0, after.size());
-
- // Test remove in the middle.
- after = before.clone();
- after.removeUids(new int[] {100});
- assertEquals(3, after.size());
- assertValues(after, 0, TEST_IFACE, 99, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 1L, 128L, 0L, 2L, 20L);
- assertValues(after, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 32L, 4L, 0L, 0L, 0L);
- assertValues(after, 2, TEST_IFACE, 101, SET_DEFAULT, 0xF00D, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 64L, 2L, 0L, 0L, 0L);
- }
-
- @Test
- public void testRemoveEmptyEntries() throws Exception {
- // Test empty stats.
- final NetworkStats statsEmpty = new NetworkStats(TEST_START, 3);
- assertEquals(0, statsEmpty.removeEmptyEntries().size());
-
- // Test stats with non-zero entry.
- final NetworkStats statsNonZero = new NetworkStats(TEST_START, 1)
- .insertEntry(TEST_IFACE, 99, SET_DEFAULT, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 1L, 128L, 0L, 2L, 20L);
- assertEquals(1, statsNonZero.size());
- final NetworkStats expectedNonZero = statsNonZero.removeEmptyEntries();
- assertEquals(1, expectedNonZero.size());
- assertValues(expectedNonZero, 0, TEST_IFACE, 99, SET_DEFAULT, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 1L, 128L, 0L, 2L, 20L);
-
- // Test stats with empty entry.
- final NetworkStats statsZero = new NetworkStats(TEST_START, 1)
- .insertEntry(TEST_IFACE, 99, SET_DEFAULT, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 0L, 0L, 0L, 0L, 0L);
- assertEquals(1, statsZero.size());
- final NetworkStats expectedZero = statsZero.removeEmptyEntries();
- assertEquals(1, statsZero.size()); // Assert immutable.
- assertEquals(0, expectedZero.size());
-
- // Test stats with multiple entries.
- final NetworkStats statsMultiple = new NetworkStats(TEST_START, 0)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 2L, 64L, 0L, 2L, 20L)
- .insertEntry(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 4L, 32L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 0L, 0L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 0L, 0L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, 8L, 0L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, 0L, 8L, 0L, 0L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 4L, 0L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 0L, 0L, 0L, 2L, 0L)
- .insertEntry(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 0L, 0L, 0L, 0L, 1L);
- assertEquals(9, statsMultiple.size());
- final NetworkStats expectedMultiple = statsMultiple.removeEmptyEntries();
- assertEquals(9, statsMultiple.size()); // Assert immutable.
- assertEquals(7, expectedMultiple.size());
- assertValues(expectedMultiple.getTotalIncludingTags(null), 14L, 104L, 4L, 4L, 21L);
-
- // Test stats with multiple empty entries.
- assertEquals(statsMultiple.size(), statsMultiple.subtract(statsMultiple).size());
- assertEquals(0, statsMultiple.subtract(statsMultiple).removeEmptyEntries().size());
- }
-
- @Test
- public void testClone() throws Exception {
- final NetworkStats original = new NetworkStats(TEST_START, 5)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 2L, 20L)
- .insertEntry(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 512L, 32L, 0L, 0L, 0L);
-
- // make clone and mutate original
- final NetworkStats clone = original.clone();
- original.insertEntry(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 0L, 0L);
-
- assertEquals(3, original.size());
- assertEquals(2, clone.size());
-
- assertEquals(128L + 512L + 128L, original.getTotalBytes());
- assertEquals(128L + 512L, clone.getTotalBytes());
- }
-
- @Test
- public void testAddWhenEmpty() throws Exception {
- final NetworkStats red = new NetworkStats(TEST_START, -1);
- final NetworkStats blue = new NetworkStats(TEST_START, 5)
- .insertEntry(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 2L, 20L)
- .insertEntry(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 512L, 32L, 0L, 0L, 0L);
-
- // We're mostly checking that we don't crash
- red.combineAllValues(blue);
- }
-
- @Test
- public void testMigrateTun() throws Exception {
- final int tunUid = 10030;
- final String tunIface = "tun0";
- final String underlyingIface = "wlan0";
- final int testTag1 = 8888;
- NetworkStats delta = new NetworkStats(TEST_START, 17)
- .insertEntry(tunIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 39605L, 46L, 12259L, 55L, 0L)
- .insertEntry(tunIface, 10100, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 0L, 0L, 0L, 0L, 0L)
- .insertEntry(tunIface, 10120, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 72667L, 197L, 43909L, 241L, 0L)
- .insertEntry(tunIface, 10120, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 9297L, 17L, 4128L, 21L, 0L)
- // VPN package also uses some traffic through unprotected network.
- .insertEntry(tunIface, tunUid, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 4983L, 10L, 1801L, 12L, 0L)
- .insertEntry(tunIface, tunUid, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 0L, 0L, 0L, 0L, 0L)
- // Tag entries
- .insertEntry(tunIface, 10120, SET_DEFAULT, testTag1, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 21691L, 41L, 13820L, 51L, 0L)
- .insertEntry(tunIface, 10120, SET_FOREGROUND, testTag1, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 1281L, 2L, 665L, 2L, 0L)
- // Irrelevant entries
- .insertEntry(TEST_IFACE, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 1685L, 5L, 2070L, 6L, 0L)
- // Underlying Iface entries
- .insertEntry(underlyingIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 5178L, 8L, 2139L, 11L, 0L)
- .insertEntry(underlyingIface, 10100, SET_FOREGROUND, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 0L, 0L, 0L, 0L, 0L)
- .insertEntry(underlyingIface, tunUid, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 149873L, 287L, 59217L /* smaller than sum(tun0) */,
- 299L /* smaller than sum(tun0) */, 0L)
- .insertEntry(underlyingIface, tunUid, SET_FOREGROUND, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 0L, 0L, 0L, 0L, 0L);
-
- delta.migrateTun(tunUid, tunIface, Arrays.asList(underlyingIface));
- assertEquals(20, delta.size());
-
- // tunIface and TEST_IFACE entries are not changed.
- assertValues(delta, 0, tunIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 39605L, 46L, 12259L, 55L, 0L);
- assertValues(delta, 1, tunIface, 10100, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 0L, 0L, 0L, 0L, 0L);
- assertValues(delta, 2, tunIface, 10120, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 72667L, 197L, 43909L, 241L, 0L);
- assertValues(delta, 3, tunIface, 10120, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 9297L, 17L, 4128L, 21L, 0L);
- assertValues(delta, 4, tunIface, tunUid, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 4983L, 10L, 1801L, 12L, 0L);
- assertValues(delta, 5, tunIface, tunUid, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 0L, 0L, 0L, 0L, 0L);
- assertValues(delta, 6, tunIface, 10120, SET_DEFAULT, testTag1, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 21691L, 41L, 13820L, 51L, 0L);
- assertValues(delta, 7, tunIface, 10120, SET_FOREGROUND, testTag1, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 1281L, 2L, 665L, 2L, 0L);
- assertValues(delta, 8, TEST_IFACE, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 1685L, 5L, 2070L, 6L, 0L);
-
- // Existing underlying Iface entries are updated
- assertValues(delta, 9, underlyingIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 44783L, 54L, 14178L, 62L, 0L);
- assertValues(delta, 10, underlyingIface, 10100, SET_FOREGROUND, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 0L, 0L, 0L, 0L, 0L);
-
- // VPN underlying Iface entries are updated
- assertValues(delta, 11, underlyingIface, tunUid, SET_DEFAULT, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 28304L, 27L, 1L, 2L, 0L);
- assertValues(delta, 12, underlyingIface, tunUid, SET_FOREGROUND, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 0L, 0L, 0L, 0L, 0L);
-
- // New entries are added for new application's underlying Iface traffic
- assertContains(delta, underlyingIface, 10120, SET_DEFAULT, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 72667L, 197L, 43123L, 227L, 0L);
- assertContains(delta, underlyingIface, 10120, SET_FOREGROUND, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 9297L, 17L, 4054, 19L, 0L);
- assertContains(delta, underlyingIface, 10120, SET_DEFAULT, testTag1, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 21691L, 41L, 13572L, 48L, 0L);
- assertContains(delta, underlyingIface, 10120, SET_FOREGROUND, testTag1, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 1281L, 2L, 653L, 1L, 0L);
-
- // New entries are added for debug purpose
- assertContains(delta, underlyingIface, 10100, SET_DBG_VPN_IN, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 39605L, 46L, 12039, 51, 0);
- assertContains(delta, underlyingIface, 10120, SET_DBG_VPN_IN, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 81964, 214, 47177, 246, 0);
- assertContains(delta, underlyingIface, tunUid, SET_DBG_VPN_OUT, TAG_NONE, METERED_ALL,
- ROAMING_ALL, DEFAULT_NETWORK_ALL, 121569, 260, 59216, 297, 0);
-
- }
-
- // Tests a case where all of the data received by the tun0 interface is echo back into the tun0
- // interface by the vpn app before it's sent out of the underlying interface. The VPN app should
- // not be charged for the echoed data but it should still be charged for any extra data it sends
- // via the underlying interface.
- @Test
- public void testMigrateTun_VpnAsLoopback() {
- final int tunUid = 10030;
- final String tunIface = "tun0";
- final String underlyingIface = "wlan0";
- NetworkStats delta = new NetworkStats(TEST_START, 9)
- // 2 different apps sent/receive data via tun0.
- .insertEntry(tunIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L)
- .insertEntry(tunIface, 20100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 500L, 2L, 200L, 5L, 0L)
- // VPN package resends data through the tunnel (with exaggerated overhead)
- .insertEntry(tunIface, tunUid, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 240000, 100L, 120000L, 60L, 0L)
- // 1 app already has some traffic on the underlying interface, the other doesn't yet
- .insertEntry(underlyingIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 1000L, 10L, 2000L, 20L, 0L)
- // Traffic through the underlying interface via the vpn app.
- // This test should redistribute this data correctly.
- .insertEntry(underlyingIface, tunUid, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 75500L, 37L, 130000L, 70L, 0L);
-
- delta.migrateTun(tunUid, tunIface, Arrays.asList(underlyingIface));
- assertEquals(9, delta.size());
-
- // tunIface entries should not be changed.
- assertValues(delta, 0, tunIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
- assertValues(delta, 1, tunIface, 20100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 500L, 2L, 200L, 5L, 0L);
- assertValues(delta, 2, tunIface, tunUid, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 240000L, 100L, 120000L, 60L, 0L);
-
- // Existing underlying Iface entries are updated
- assertValues(delta, 3, underlyingIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 51000L, 35L, 102000L, 70L, 0L);
-
- // VPN underlying Iface entries are updated
- assertValues(delta, 4, underlyingIface, tunUid, SET_DEFAULT, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 25000L, 10L, 29800L, 15L, 0L);
-
- // New entries are added for new application's underlying Iface traffic
- assertContains(delta, underlyingIface, 20100, SET_DEFAULT, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 500L, 2L, 200L, 5L, 0L);
-
- // New entries are added for debug purpose
- assertContains(delta, underlyingIface, 10100, SET_DBG_VPN_IN, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
- assertContains(delta, underlyingIface, 20100, SET_DBG_VPN_IN, TAG_NONE, METERED_NO,
- ROAMING_NO, DEFAULT_NETWORK_NO, 500, 2L, 200L, 5L, 0L);
- assertContains(delta, underlyingIface, tunUid, SET_DBG_VPN_OUT, TAG_NONE, METERED_ALL,
- ROAMING_ALL, DEFAULT_NETWORK_ALL, 50500L, 27L, 100200L, 55, 0);
- }
-
- @Test
- public void testFilter_NoFilter() {
- NetworkStats.Entry entry1 = new NetworkStats.Entry(
- "test1", 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
-
- NetworkStats.Entry entry2 = new NetworkStats.Entry(
- "test2", 10101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
-
- NetworkStats.Entry entry3 = new NetworkStats.Entry(
- "test2", 10101, SET_DEFAULT, 123, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
-
- NetworkStats stats = new NetworkStats(TEST_START, 3)
- .insertEntry(entry1)
- .insertEntry(entry2)
- .insertEntry(entry3);
-
- stats.filter(UID_ALL, INTERFACES_ALL, TAG_ALL);
- assertEquals(3, stats.size());
- assertEquals(entry1, stats.getValues(0, null));
- assertEquals(entry2, stats.getValues(1, null));
- assertEquals(entry3, stats.getValues(2, null));
- }
-
- @Test
- public void testFilter_UidFilter() {
- final int testUid = 10101;
- NetworkStats.Entry entry1 = new NetworkStats.Entry(
- "test1", 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
-
- NetworkStats.Entry entry2 = new NetworkStats.Entry(
- "test2", testUid, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
-
- NetworkStats.Entry entry3 = new NetworkStats.Entry(
- "test2", testUid, SET_DEFAULT, 123, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
-
- NetworkStats stats = new NetworkStats(TEST_START, 3)
- .insertEntry(entry1)
- .insertEntry(entry2)
- .insertEntry(entry3);
-
- stats.filter(testUid, INTERFACES_ALL, TAG_ALL);
- assertEquals(2, stats.size());
- assertEquals(entry2, stats.getValues(0, null));
- assertEquals(entry3, stats.getValues(1, null));
- }
-
- @Test
- public void testFilter_InterfaceFilter() {
- final String testIf1 = "testif1";
- final String testIf2 = "testif2";
- NetworkStats.Entry entry1 = new NetworkStats.Entry(
- testIf1, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
-
- NetworkStats.Entry entry2 = new NetworkStats.Entry(
- "otherif", 10101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
-
- NetworkStats.Entry entry3 = new NetworkStats.Entry(
- testIf1, 10101, SET_DEFAULT, 123, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
-
- NetworkStats.Entry entry4 = new NetworkStats.Entry(
- testIf2, 10101, SET_DEFAULT, 123, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
-
- NetworkStats stats = new NetworkStats(TEST_START, 4)
- .insertEntry(entry1)
- .insertEntry(entry2)
- .insertEntry(entry3)
- .insertEntry(entry4);
-
- stats.filter(UID_ALL, new String[] { testIf1, testIf2 }, TAG_ALL);
- assertEquals(3, stats.size());
- assertEquals(entry1, stats.getValues(0, null));
- assertEquals(entry3, stats.getValues(1, null));
- assertEquals(entry4, stats.getValues(2, null));
- }
-
- @Test
- public void testFilter_EmptyInterfaceFilter() {
- NetworkStats.Entry entry1 = new NetworkStats.Entry(
- "if1", 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
-
- NetworkStats.Entry entry2 = new NetworkStats.Entry(
- "if2", 10101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
-
- NetworkStats stats = new NetworkStats(TEST_START, 3)
- .insertEntry(entry1)
- .insertEntry(entry2);
-
- stats.filter(UID_ALL, new String[] { }, TAG_ALL);
- assertEquals(0, stats.size());
- }
-
- @Test
- public void testFilter_TagFilter() {
- final int testTag = 123;
- final int otherTag = 456;
- NetworkStats.Entry entry1 = new NetworkStats.Entry(
- "test1", 10100, SET_DEFAULT, testTag, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
-
- NetworkStats.Entry entry2 = new NetworkStats.Entry(
- "test2", 10101, SET_DEFAULT, testTag, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
-
- NetworkStats.Entry entry3 = new NetworkStats.Entry(
- "test2", 10101, SET_DEFAULT, otherTag, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
-
- NetworkStats stats = new NetworkStats(TEST_START, 3)
- .insertEntry(entry1)
- .insertEntry(entry2)
- .insertEntry(entry3);
-
- stats.filter(UID_ALL, INTERFACES_ALL, testTag);
- assertEquals(2, stats.size());
- assertEquals(entry1, stats.getValues(0, null));
- assertEquals(entry2, stats.getValues(1, null));
- }
-
- @Test
- public void testFilterDebugEntries() {
- NetworkStats.Entry entry1 = new NetworkStats.Entry(
- "test1", 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
-
- NetworkStats.Entry entry2 = new NetworkStats.Entry(
- "test2", 10101, SET_DBG_VPN_IN, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
-
- NetworkStats.Entry entry3 = new NetworkStats.Entry(
- "test2", 10101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
-
- NetworkStats.Entry entry4 = new NetworkStats.Entry(
- "test2", 10101, SET_DBG_VPN_OUT, TAG_NONE, METERED_NO, ROAMING_NO,
- DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L);
-
- NetworkStats stats = new NetworkStats(TEST_START, 4)
- .insertEntry(entry1)
- .insertEntry(entry2)
- .insertEntry(entry3)
- .insertEntry(entry4);
-
- stats.filterDebugEntries();
-
- assertEquals(2, stats.size());
- assertEquals(entry1, stats.getValues(0, null));
- assertEquals(entry3, stats.getValues(1, null));
- }
-
- @Test
- public void testApply464xlatAdjustments() {
- final String v4Iface = "v4-wlan0";
- final String baseIface = "wlan0";
- final String otherIface = "other";
- final int appUid = 10001;
- final int rootUid = Process.ROOT_UID;
- ArrayMap<String, String> stackedIface = new ArrayMap<>();
- stackedIface.put(v4Iface, baseIface);
-
- // Ipv4 traffic sent/received by an app on stacked interface.
- final NetworkStats.Entry appEntry = new NetworkStats.Entry(
- v4Iface, appUid, SET_DEFAULT, TAG_NONE,
- 30501490 /* rxBytes */,
- 22401 /* rxPackets */,
- 876235 /* txBytes */,
- 13805 /* txPackets */,
- 0 /* operations */);
-
- // Traffic measured for the root uid on the base interface.
- final NetworkStats.Entry rootUidEntry = new NetworkStats.Entry(
- baseIface, rootUid, SET_DEFAULT, TAG_NONE,
- 163577 /* rxBytes */,
- 187 /* rxPackets */,
- 17607 /* txBytes */,
- 97 /* txPackets */,
- 0 /* operations */);
-
- final NetworkStats.Entry otherEntry = new NetworkStats.Entry(
- otherIface, appUid, SET_DEFAULT, TAG_NONE,
- 2600 /* rxBytes */,
- 2 /* rxPackets */,
- 3800 /* txBytes */,
- 3 /* txPackets */,
- 0 /* operations */);
-
- final NetworkStats stats = new NetworkStats(TEST_START, 3)
- .insertEntry(appEntry)
- .insertEntry(rootUidEntry)
- .insertEntry(otherEntry);
-
- stats.apply464xlatAdjustments(stackedIface);
-
- assertEquals(3, stats.size());
- final NetworkStats.Entry expectedAppUid = new NetworkStats.Entry(
- v4Iface, appUid, SET_DEFAULT, TAG_NONE,
- 30949510,
- 22401,
- 1152335,
- 13805,
- 0);
- final NetworkStats.Entry expectedRootUid = new NetworkStats.Entry(
- baseIface, 0, SET_DEFAULT, TAG_NONE,
- 163577,
- 187,
- 17607,
- 97,
- 0);
- assertEquals(expectedAppUid, stats.getValues(0, null));
- assertEquals(expectedRootUid, stats.getValues(1, null));
- assertEquals(otherEntry, stats.getValues(2, null));
- }
-
- @Test
- public void testApply464xlatAdjustments_noStackedIface() {
- NetworkStats.Entry firstEntry = new NetworkStats.Entry(
- "if1", 10002, SET_DEFAULT, TAG_NONE,
- 2600 /* rxBytes */,
- 2 /* rxPackets */,
- 3800 /* txBytes */,
- 3 /* txPackets */,
- 0 /* operations */);
- NetworkStats.Entry secondEntry = new NetworkStats.Entry(
- "if2", 10002, SET_DEFAULT, TAG_NONE,
- 5000 /* rxBytes */,
- 3 /* rxPackets */,
- 6000 /* txBytes */,
- 4 /* txPackets */,
- 0 /* operations */);
-
- NetworkStats stats = new NetworkStats(TEST_START, 2)
- .insertEntry(firstEntry)
- .insertEntry(secondEntry);
-
- // Empty map: no adjustment
- stats.apply464xlatAdjustments(new ArrayMap<>());
-
- assertEquals(2, stats.size());
- assertEquals(firstEntry, stats.getValues(0, null));
- assertEquals(secondEntry, stats.getValues(1, null));
- }
-
- private static void assertContains(NetworkStats stats, String iface, int uid, int set,
- int tag, int metered, int roaming, int defaultNetwork, long rxBytes, long rxPackets,
- long txBytes, long txPackets, long operations) {
- int index = stats.findIndex(iface, uid, set, tag, metered, roaming, defaultNetwork);
- assertTrue(index != -1);
- assertValues(stats, index, iface, uid, set, tag, metered, roaming, defaultNetwork,
- rxBytes, rxPackets, txBytes, txPackets, operations);
- }
-
- private static void assertValues(NetworkStats stats, int index, String iface, int uid, int set,
- int tag, int metered, int roaming, int defaultNetwork, long rxBytes, long rxPackets,
- long txBytes, long txPackets, long operations) {
- final NetworkStats.Entry entry = stats.getValues(index, null);
- assertValues(entry, iface, uid, set, tag, metered, roaming, defaultNetwork);
- assertValues(entry, rxBytes, rxPackets, txBytes, txPackets, operations);
- }
-
- private static void assertValues(
- NetworkStats.Entry entry, String iface, int uid, int set, int tag, int metered,
- int roaming, int defaultNetwork) {
- assertEquals(iface, entry.iface);
- assertEquals(uid, entry.uid);
- assertEquals(set, entry.set);
- assertEquals(tag, entry.tag);
- assertEquals(metered, entry.metered);
- assertEquals(roaming, entry.roaming);
- assertEquals(defaultNetwork, entry.defaultNetwork);
- }
-
- private static void assertValues(NetworkStats.Entry entry, long rxBytes, long rxPackets,
- long txBytes, long txPackets, long operations) {
- assertEquals(rxBytes, entry.rxBytes);
- assertEquals(rxPackets, entry.rxPackets);
- assertEquals(txBytes, entry.txBytes);
- assertEquals(txPackets, entry.txPackets);
- assertEquals(operations, entry.operations);
- }
-
-}
diff --git a/tests/net/java/android/net/NetworkTemplateTest.kt b/tests/net/java/android/net/NetworkTemplateTest.kt
deleted file mode 100644
index ab6b2f409867..000000000000
--- a/tests/net/java/android/net/NetworkTemplateTest.kt
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net
-
-import android.content.Context
-import android.net.ConnectivityManager.TYPE_MOBILE
-import android.net.ConnectivityManager.TYPE_WIFI
-import android.net.NetworkIdentity.SUBTYPE_COMBINED
-import android.net.NetworkIdentity.OEM_NONE
-import android.net.NetworkIdentity.OEM_PAID
-import android.net.NetworkIdentity.OEM_PRIVATE
-import android.net.NetworkIdentity.buildNetworkIdentity
-import android.net.NetworkStats.DEFAULT_NETWORK_ALL
-import android.net.NetworkStats.METERED_ALL
-import android.net.NetworkStats.ROAMING_ALL
-import android.net.NetworkTemplate.MATCH_MOBILE
-import android.net.NetworkTemplate.MATCH_MOBILE_WILDCARD
-import android.net.NetworkTemplate.MATCH_WIFI
-import android.net.NetworkTemplate.MATCH_WIFI_WILDCARD
-import android.net.NetworkTemplate.WIFI_NETWORKID_ALL
-import android.net.NetworkTemplate.NETWORK_TYPE_5G_NSA
-import android.net.NetworkTemplate.NETWORK_TYPE_ALL
-import android.net.NetworkTemplate.OEM_MANAGED_ALL
-import android.net.NetworkTemplate.OEM_MANAGED_NO
-import android.net.NetworkTemplate.OEM_MANAGED_YES
-import android.net.NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT
-import android.net.NetworkTemplate.buildTemplateWifi
-import android.net.NetworkTemplate.buildTemplateWifiWildcard
-import android.net.NetworkTemplate.buildTemplateCarrier
-import android.net.NetworkTemplate.buildTemplateMobileWithRatType
-import android.telephony.TelephonyManager
-import com.android.testutils.assertParcelSane
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
-import org.mockito.Mockito.mock
-import org.mockito.MockitoAnnotations
-import kotlin.test.assertEquals
-import kotlin.test.assertFalse
-import kotlin.test.assertNotEquals
-import kotlin.test.assertTrue
-
-private const val TEST_IMSI1 = "imsi1"
-private const val TEST_IMSI2 = "imsi2"
-private const val TEST_SSID1 = "ssid1"
-private const val TEST_SSID2 = "ssid2"
-
-@RunWith(JUnit4::class)
-class NetworkTemplateTest {
- private val mockContext = mock(Context::class.java)
-
- private fun buildMobileNetworkState(subscriberId: String): NetworkStateSnapshot =
- buildNetworkState(TYPE_MOBILE, subscriberId = subscriberId)
- private fun buildWifiNetworkState(subscriberId: String?, ssid: String?): NetworkStateSnapshot =
- buildNetworkState(TYPE_WIFI, subscriberId = subscriberId, ssid = ssid)
-
- private fun buildNetworkState(
- type: Int,
- subscriberId: String? = null,
- ssid: String? = null,
- oemManaged: Int = OEM_NONE
- ): NetworkStateSnapshot {
- val lp = LinkProperties()
- val caps = NetworkCapabilities().apply {
- setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED, false)
- setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, true)
- setSSID(ssid)
- setCapability(NetworkCapabilities.NET_CAPABILITY_OEM_PAID,
- (oemManaged and OEM_PAID) == OEM_PAID)
- setCapability(NetworkCapabilities.NET_CAPABILITY_OEM_PRIVATE,
- (oemManaged and OEM_PRIVATE) == OEM_PRIVATE)
- }
- return NetworkStateSnapshot(mock(Network::class.java), caps, lp, subscriberId, type)
- }
-
- private fun NetworkTemplate.assertMatches(ident: NetworkIdentity) =
- assertTrue(matches(ident), "$this does not match $ident")
-
- private fun NetworkTemplate.assertDoesNotMatch(ident: NetworkIdentity) =
- assertFalse(matches(ident), "$this should match $ident")
-
- @Before
- fun setup() {
- MockitoAnnotations.initMocks(this)
- }
-
- @Test
- fun testWifiWildcardMatches() {
- val templateWifiWildcard = buildTemplateWifiWildcard()
-
- val identMobileImsi1 = buildNetworkIdentity(mockContext,
- buildMobileNetworkState(TEST_IMSI1),
- false, TelephonyManager.NETWORK_TYPE_UMTS)
- val identWifiImsiNullSsid1 = buildNetworkIdentity(
- mockContext, buildWifiNetworkState(null, TEST_SSID1), true, 0)
- val identWifiImsi1Ssid1 = buildNetworkIdentity(
- mockContext, buildWifiNetworkState(TEST_IMSI1, TEST_SSID1), true, 0)
-
- templateWifiWildcard.assertDoesNotMatch(identMobileImsi1)
- templateWifiWildcard.assertMatches(identWifiImsiNullSsid1)
- templateWifiWildcard.assertMatches(identWifiImsi1Ssid1)
- }
-
- @Test
- fun testWifiMatches() {
- val templateWifiSsid1 = buildTemplateWifi(TEST_SSID1)
- val templateWifiSsid1ImsiNull = buildTemplateWifi(TEST_SSID1, null)
- val templateWifiSsid1Imsi1 = buildTemplateWifi(TEST_SSID1, TEST_IMSI1)
- val templateWifiSsidAllImsi1 = buildTemplateWifi(WIFI_NETWORKID_ALL, TEST_IMSI1)
-
- val identMobile1 = buildNetworkIdentity(mockContext, buildMobileNetworkState(TEST_IMSI1),
- false, TelephonyManager.NETWORK_TYPE_UMTS)
- val identWifiImsiNullSsid1 = buildNetworkIdentity(
- mockContext, buildWifiNetworkState(null, TEST_SSID1), true, 0)
- val identWifiImsi1Ssid1 = buildNetworkIdentity(
- mockContext, buildWifiNetworkState(TEST_IMSI1, TEST_SSID1), true, 0)
- val identWifiImsi2Ssid1 = buildNetworkIdentity(
- mockContext, buildWifiNetworkState(TEST_IMSI2, TEST_SSID1), true, 0)
- val identWifiImsi1Ssid2 = buildNetworkIdentity(
- mockContext, buildWifiNetworkState(TEST_IMSI1, TEST_SSID2), true, 0)
-
- // Verify that template with SSID only matches any subscriberId and specific SSID.
- templateWifiSsid1.assertDoesNotMatch(identMobile1)
- templateWifiSsid1.assertMatches(identWifiImsiNullSsid1)
- templateWifiSsid1.assertMatches(identWifiImsi1Ssid1)
- templateWifiSsid1.assertMatches(identWifiImsi2Ssid1)
- templateWifiSsid1.assertDoesNotMatch(identWifiImsi1Ssid2)
-
- // Verify that template with SSID1 and null imsi matches any network with
- // SSID1 and null imsi.
- templateWifiSsid1ImsiNull.assertDoesNotMatch(identMobile1)
- templateWifiSsid1ImsiNull.assertMatches(identWifiImsiNullSsid1)
- templateWifiSsid1ImsiNull.assertDoesNotMatch(identWifiImsi1Ssid1)
- templateWifiSsid1ImsiNull.assertDoesNotMatch(identWifiImsi2Ssid1)
- templateWifiSsid1ImsiNull.assertDoesNotMatch(identWifiImsi1Ssid2)
-
- // Verify that template with SSID1 and imsi1 matches any network with
- // SSID1 and imsi1.
- templateWifiSsid1Imsi1.assertDoesNotMatch(identMobile1)
- templateWifiSsid1Imsi1.assertDoesNotMatch(identWifiImsiNullSsid1)
- templateWifiSsid1Imsi1.assertMatches(identWifiImsi1Ssid1)
- templateWifiSsid1Imsi1.assertDoesNotMatch(identWifiImsi2Ssid1)
- templateWifiSsid1Imsi1.assertDoesNotMatch(identWifiImsi1Ssid2)
-
- // Verify that template with SSID all and imsi1 matches any network with
- // any SSID and imsi1.
- templateWifiSsidAllImsi1.assertDoesNotMatch(identMobile1)
- templateWifiSsidAllImsi1.assertDoesNotMatch(identWifiImsiNullSsid1)
- templateWifiSsidAllImsi1.assertMatches(identWifiImsi1Ssid1)
- templateWifiSsidAllImsi1.assertDoesNotMatch(identWifiImsi2Ssid1)
- templateWifiSsidAllImsi1.assertMatches(identWifiImsi1Ssid2)
- }
-
- @Test
- fun testCarrierMatches() {
- val templateCarrierImsi1 = buildTemplateCarrier(TEST_IMSI1)
-
- val identMobile1 = buildNetworkIdentity(mockContext, buildMobileNetworkState(TEST_IMSI1),
- false, TelephonyManager.NETWORK_TYPE_UMTS)
- val identMobile2 = buildNetworkIdentity(mockContext, buildMobileNetworkState(TEST_IMSI2),
- false, TelephonyManager.NETWORK_TYPE_UMTS)
- val identWifiSsid1 = buildNetworkIdentity(
- mockContext, buildWifiNetworkState(null, TEST_SSID1), true, 0)
- val identCarrierWifiImsi1 = buildNetworkIdentity(
- mockContext, buildWifiNetworkState(TEST_IMSI1, TEST_SSID1), true, 0)
- val identCarrierWifiImsi2 = buildNetworkIdentity(
- mockContext, buildWifiNetworkState(TEST_IMSI2, TEST_SSID1), true, 0)
-
- templateCarrierImsi1.assertMatches(identCarrierWifiImsi1)
- templateCarrierImsi1.assertDoesNotMatch(identCarrierWifiImsi2)
- templateCarrierImsi1.assertDoesNotMatch(identWifiSsid1)
- templateCarrierImsi1.assertMatches(identMobile1)
- templateCarrierImsi1.assertDoesNotMatch(identMobile2)
- }
-
- @Test
- fun testRatTypeGroupMatches() {
- val stateMobile = buildMobileNetworkState(TEST_IMSI1)
- // Build UMTS template that matches mobile identities with RAT in the same
- // group with any IMSI. See {@link NetworkTemplate#getCollapsedRatType}.
- val templateUmts = buildTemplateMobileWithRatType(null, TelephonyManager.NETWORK_TYPE_UMTS)
- // Build normal template that matches mobile identities with any RAT and IMSI.
- val templateAll = buildTemplateMobileWithRatType(null, NETWORK_TYPE_ALL)
- // Build template with UNKNOWN RAT that matches mobile identities with RAT that
- // cannot be determined.
- val templateUnknown =
- buildTemplateMobileWithRatType(null, TelephonyManager.NETWORK_TYPE_UNKNOWN)
-
- val identUmts = buildNetworkIdentity(
- mockContext, stateMobile, false, TelephonyManager.NETWORK_TYPE_UMTS)
- val identHsdpa = buildNetworkIdentity(
- mockContext, stateMobile, false, TelephonyManager.NETWORK_TYPE_HSDPA)
- val identLte = buildNetworkIdentity(
- mockContext, stateMobile, false, TelephonyManager.NETWORK_TYPE_LTE)
- val identCombined = buildNetworkIdentity(
- mockContext, stateMobile, false, SUBTYPE_COMBINED)
- val identImsi2 = buildNetworkIdentity(mockContext, buildMobileNetworkState(TEST_IMSI2),
- false, TelephonyManager.NETWORK_TYPE_UMTS)
- val identWifi = buildNetworkIdentity(
- mockContext, buildWifiNetworkState(null, TEST_SSID1), true, 0)
-
- // Assert that identity with the same RAT matches.
- templateUmts.assertMatches(identUmts)
- templateAll.assertMatches(identUmts)
- templateUnknown.assertDoesNotMatch(identUmts)
- // Assert that identity with the RAT within the same group matches.
- templateUmts.assertMatches(identHsdpa)
- templateAll.assertMatches(identHsdpa)
- templateUnknown.assertDoesNotMatch(identHsdpa)
- // Assert that identity with the RAT out of the same group only matches template with
- // NETWORK_TYPE_ALL.
- templateUmts.assertDoesNotMatch(identLte)
- templateAll.assertMatches(identLte)
- templateUnknown.assertDoesNotMatch(identLte)
- // Assert that identity with combined RAT only matches with template with NETWORK_TYPE_ALL
- // and NETWORK_TYPE_UNKNOWN.
- templateUmts.assertDoesNotMatch(identCombined)
- templateAll.assertMatches(identCombined)
- templateUnknown.assertMatches(identCombined)
- // Assert that identity with different IMSI matches.
- templateUmts.assertMatches(identImsi2)
- templateAll.assertMatches(identImsi2)
- templateUnknown.assertDoesNotMatch(identImsi2)
- // Assert that wifi identity does not match.
- templateUmts.assertDoesNotMatch(identWifi)
- templateAll.assertDoesNotMatch(identWifi)
- templateUnknown.assertDoesNotMatch(identWifi)
- }
-
- @Test
- fun testParcelUnparcel() {
- val templateMobile = NetworkTemplate(MATCH_MOBILE, TEST_IMSI1, null, null, METERED_ALL,
- ROAMING_ALL, DEFAULT_NETWORK_ALL, TelephonyManager.NETWORK_TYPE_LTE,
- OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT)
- val templateWifi = NetworkTemplate(MATCH_WIFI, null, null, TEST_SSID1, METERED_ALL,
- ROAMING_ALL, DEFAULT_NETWORK_ALL, 0, OEM_MANAGED_ALL,
- SUBSCRIBER_ID_MATCH_RULE_EXACT)
- val templateOem = NetworkTemplate(MATCH_MOBILE, null, null, null, METERED_ALL,
- ROAMING_ALL, DEFAULT_NETWORK_ALL, 0, OEM_MANAGED_YES,
- SUBSCRIBER_ID_MATCH_RULE_EXACT)
- assertParcelSane(templateMobile, 10)
- assertParcelSane(templateWifi, 10)
- assertParcelSane(templateOem, 10)
- }
-
- // Verify NETWORK_TYPE_* constants in NetworkTemplate do not conflict with
- // TelephonyManager#NETWORK_TYPE_* constants.
- @Test
- fun testNetworkTypeConstants() {
- for (ratType in TelephonyManager.getAllNetworkTypes()) {
- assertNotEquals(NETWORK_TYPE_ALL, ratType)
- assertNotEquals(NETWORK_TYPE_5G_NSA, ratType)
- }
- }
-
- @Test
- fun testOemNetworkConstants() {
- val constantValues = arrayOf(OEM_MANAGED_YES, OEM_MANAGED_ALL, OEM_MANAGED_NO,
- OEM_PAID, OEM_PRIVATE, OEM_PAID or OEM_PRIVATE)
-
- // Verify that "not OEM managed network" constants are equal.
- assertEquals(OEM_MANAGED_NO, OEM_NONE)
-
- // Verify the constants don't conflict.
- assertEquals(constantValues.size, constantValues.distinct().count())
- }
-
- /**
- * Helper to enumerate and assert OEM managed wifi and mobile {@code NetworkTemplate}s match
- * their the appropriate OEM managed {@code NetworkIdentity}s.
- *
- * @param networkType {@code TYPE_MOBILE} or {@code TYPE_WIFI}
- * @param matchType A match rule from {@code NetworkTemplate.MATCH_*} corresponding to the
- * networkType.
- * @param subscriberId To be populated with {@code TEST_IMSI*} only if networkType is
- * {@code TYPE_MOBILE}. May be left as null when matchType is
- * {@link NetworkTemplate.MATCH_MOBILE_WILDCARD}.
- * @param templateSsid Top be populated with {@code TEST_SSID*} only if networkType is
- * {@code TYPE_WIFI}. May be left as null when matchType is
- * {@link NetworkTemplate.MATCH_WIFI_WILDCARD}.
- * @param identSsid If networkType is {@code TYPE_WIFI}, this value must *NOT* be null. Provide
- * one of {@code TEST_SSID*}.
- */
- private fun matchOemManagedIdent(
- networkType: Int,
- matchType: Int,
- subscriberId: String? = null,
- templateSsid: String? = null,
- identSsid: String? = null
- ) {
- val oemManagedStates = arrayOf(OEM_NONE, OEM_PAID, OEM_PRIVATE, OEM_PAID or OEM_PRIVATE)
- val matchSubscriberIds = arrayOf(subscriberId)
-
- val templateOemYes = NetworkTemplate(matchType, subscriberId, matchSubscriberIds,
- templateSsid, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL,
- OEM_MANAGED_YES, SUBSCRIBER_ID_MATCH_RULE_EXACT)
- val templateOemAll = NetworkTemplate(matchType, subscriberId, matchSubscriberIds,
- templateSsid, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL,
- OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT)
-
- for (identityOemManagedState in oemManagedStates) {
- val ident = buildNetworkIdentity(mockContext, buildNetworkState(networkType,
- subscriberId, identSsid, identityOemManagedState), /*defaultNetwork=*/false,
- /*subType=*/0)
-
- // Create a template with each OEM managed type and match it against the NetworkIdentity
- for (templateOemManagedState in oemManagedStates) {
- val template = NetworkTemplate(matchType, subscriberId, matchSubscriberIds,
- templateSsid, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL,
- NETWORK_TYPE_ALL, templateOemManagedState, SUBSCRIBER_ID_MATCH_RULE_EXACT)
- if (identityOemManagedState == templateOemManagedState) {
- template.assertMatches(ident)
- } else {
- template.assertDoesNotMatch(ident)
- }
- }
- // OEM_MANAGED_ALL ignores OEM state.
- templateOemAll.assertMatches(ident)
- if (identityOemManagedState == OEM_NONE) {
- // OEM_MANAGED_YES matches everything except OEM_NONE.
- templateOemYes.assertDoesNotMatch(ident)
- } else {
- templateOemYes.assertMatches(ident)
- }
- }
- }
-
- @Test
- fun testOemManagedMatchesIdent() {
- matchOemManagedIdent(TYPE_MOBILE, MATCH_MOBILE, subscriberId = TEST_IMSI1)
- matchOemManagedIdent(TYPE_MOBILE, MATCH_MOBILE_WILDCARD)
- matchOemManagedIdent(TYPE_WIFI, MATCH_WIFI, templateSsid = TEST_SSID1,
- identSsid = TEST_SSID1)
- matchOemManagedIdent(TYPE_WIFI, MATCH_WIFI_WILDCARD, identSsid = TEST_SSID1)
- }
-}
diff --git a/tests/net/java/android/net/NetworkUtilsTest.java b/tests/net/java/android/net/NetworkUtilsTest.java
deleted file mode 100644
index 7748288aeb05..000000000000
--- a/tests/net/java/android/net/NetworkUtilsTest.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-import static junit.framework.Assert.assertEquals;
-
-import androidx.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.math.BigInteger;
-import java.util.TreeSet;
-
-@RunWith(AndroidJUnit4.class)
-@androidx.test.filters.SmallTest
-public class NetworkUtilsTest {
- @Test
- public void testRoutedIPv4AddressCount() {
- final TreeSet<IpPrefix> set = new TreeSet<>(IpPrefix.lengthComparator());
- // No routes routes to no addresses.
- assertEquals(0, NetworkUtils.routedIPv4AddressCount(set));
-
- set.add(new IpPrefix("0.0.0.0/0"));
- assertEquals(1l << 32, NetworkUtils.routedIPv4AddressCount(set));
-
- set.add(new IpPrefix("20.18.0.0/16"));
- set.add(new IpPrefix("20.18.0.0/24"));
- set.add(new IpPrefix("20.18.0.0/8"));
- // There is a default route, still covers everything
- assertEquals(1l << 32, NetworkUtils.routedIPv4AddressCount(set));
-
- set.clear();
- set.add(new IpPrefix("20.18.0.0/24"));
- set.add(new IpPrefix("20.18.0.0/8"));
- // The 8-length includes the 24-length prefix
- assertEquals(1l << 24, NetworkUtils.routedIPv4AddressCount(set));
-
- set.add(new IpPrefix("10.10.10.126/25"));
- // The 8-length does not include this 25-length prefix
- assertEquals((1l << 24) + (1 << 7), NetworkUtils.routedIPv4AddressCount(set));
-
- set.clear();
- set.add(new IpPrefix("1.2.3.4/32"));
- set.add(new IpPrefix("1.2.3.4/32"));
- set.add(new IpPrefix("1.2.3.4/32"));
- set.add(new IpPrefix("1.2.3.4/32"));
- assertEquals(1l, NetworkUtils.routedIPv4AddressCount(set));
-
- set.add(new IpPrefix("1.2.3.5/32"));
- set.add(new IpPrefix("1.2.3.6/32"));
-
- set.add(new IpPrefix("1.2.3.7/32"));
- set.add(new IpPrefix("1.2.3.8/32"));
- set.add(new IpPrefix("1.2.3.9/32"));
- set.add(new IpPrefix("1.2.3.0/32"));
- assertEquals(7l, NetworkUtils.routedIPv4AddressCount(set));
-
- // 1.2.3.4/30 eats 1.2.3.{4-7}/32
- set.add(new IpPrefix("1.2.3.4/30"));
- set.add(new IpPrefix("6.2.3.4/28"));
- set.add(new IpPrefix("120.2.3.4/16"));
- assertEquals(7l - 4 + 4 + 16 + 65536, NetworkUtils.routedIPv4AddressCount(set));
- }
-
- @Test
- public void testRoutedIPv6AddressCount() {
- final TreeSet<IpPrefix> set = new TreeSet<>(IpPrefix.lengthComparator());
- // No routes routes to no addresses.
- assertEquals(BigInteger.ZERO, NetworkUtils.routedIPv6AddressCount(set));
-
- set.add(new IpPrefix("::/0"));
- assertEquals(BigInteger.ONE.shiftLeft(128), NetworkUtils.routedIPv6AddressCount(set));
-
- set.add(new IpPrefix("1234:622a::18/64"));
- set.add(new IpPrefix("add4:f00:80:f7:1111::6adb/96"));
- set.add(new IpPrefix("add4:f00:80:f7:1111::6adb/8"));
- // There is a default route, still covers everything
- assertEquals(BigInteger.ONE.shiftLeft(128), NetworkUtils.routedIPv6AddressCount(set));
-
- set.clear();
- set.add(new IpPrefix("add4:f00:80:f7:1111::6adb/96"));
- set.add(new IpPrefix("add4:f00:80:f7:1111::6adb/8"));
- // The 8-length includes the 96-length prefix
- assertEquals(BigInteger.ONE.shiftLeft(120), NetworkUtils.routedIPv6AddressCount(set));
-
- set.add(new IpPrefix("10::26/64"));
- // The 8-length does not include this 64-length prefix
- assertEquals(BigInteger.ONE.shiftLeft(120).add(BigInteger.ONE.shiftLeft(64)),
- NetworkUtils.routedIPv6AddressCount(set));
-
- set.clear();
- set.add(new IpPrefix("add4:f00:80:f7:1111::6ad4/128"));
- set.add(new IpPrefix("add4:f00:80:f7:1111::6ad4/128"));
- set.add(new IpPrefix("add4:f00:80:f7:1111::6ad4/128"));
- set.add(new IpPrefix("add4:f00:80:f7:1111::6ad4/128"));
- assertEquals(BigInteger.ONE, NetworkUtils.routedIPv6AddressCount(set));
-
- set.add(new IpPrefix("add4:f00:80:f7:1111::6ad5/128"));
- set.add(new IpPrefix("add4:f00:80:f7:1111::6ad6/128"));
- set.add(new IpPrefix("add4:f00:80:f7:1111::6ad7/128"));
- set.add(new IpPrefix("add4:f00:80:f7:1111::6ad8/128"));
- set.add(new IpPrefix("add4:f00:80:f7:1111::6ad9/128"));
- set.add(new IpPrefix("add4:f00:80:f7:1111::6ad0/128"));
- assertEquals(BigInteger.valueOf(7), NetworkUtils.routedIPv6AddressCount(set));
-
- // add4:f00:80:f7:1111::6ad4/126 eats add4:f00:8[:f7:1111::6ad{4-7}/128
- set.add(new IpPrefix("add4:f00:80:f7:1111::6ad4/126"));
- set.add(new IpPrefix("d00d:f00:80:f7:1111::6ade/124"));
- set.add(new IpPrefix("f00b:a33::/112"));
- assertEquals(BigInteger.valueOf(7l - 4 + 4 + 16 + 65536),
- NetworkUtils.routedIPv6AddressCount(set));
- }
-}
diff --git a/tests/net/java/android/net/QosSocketFilterTest.java b/tests/net/java/android/net/QosSocketFilterTest.java
deleted file mode 100644
index ad58960eaadd..000000000000
--- a/tests/net/java/android/net/QosSocketFilterTest.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertTrue;
-
-import androidx.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-
-@RunWith(AndroidJUnit4.class)
-@androidx.test.filters.SmallTest
-public class QosSocketFilterTest {
-
- @Test
- public void testPortExactMatch() {
- final InetAddress addressA = InetAddresses.parseNumericAddress("1.2.3.4");
- final InetAddress addressB = InetAddresses.parseNumericAddress("1.2.3.4");
- assertTrue(QosSocketFilter.matchesLocalAddress(
- new InetSocketAddress(addressA, 10), addressB, 10, 10));
-
- }
-
- @Test
- public void testPortLessThanStart() {
- final InetAddress addressA = InetAddresses.parseNumericAddress("1.2.3.4");
- final InetAddress addressB = InetAddresses.parseNumericAddress("1.2.3.4");
- assertFalse(QosSocketFilter.matchesLocalAddress(
- new InetSocketAddress(addressA, 8), addressB, 10, 10));
- }
-
- @Test
- public void testPortGreaterThanEnd() {
- final InetAddress addressA = InetAddresses.parseNumericAddress("1.2.3.4");
- final InetAddress addressB = InetAddresses.parseNumericAddress("1.2.3.4");
- assertFalse(QosSocketFilter.matchesLocalAddress(
- new InetSocketAddress(addressA, 18), addressB, 10, 10));
- }
-
- @Test
- public void testPortBetweenStartAndEnd() {
- final InetAddress addressA = InetAddresses.parseNumericAddress("1.2.3.4");
- final InetAddress addressB = InetAddresses.parseNumericAddress("1.2.3.4");
- assertTrue(QosSocketFilter.matchesLocalAddress(
- new InetSocketAddress(addressA, 10), addressB, 8, 18));
- }
-
- @Test
- public void testAddressesDontMatch() {
- final InetAddress addressA = InetAddresses.parseNumericAddress("1.2.3.4");
- final InetAddress addressB = InetAddresses.parseNumericAddress("1.2.3.5");
- assertFalse(QosSocketFilter.matchesLocalAddress(
- new InetSocketAddress(addressA, 10), addressB, 10, 10));
- }
-}
-
diff --git a/tests/net/java/android/net/TelephonyNetworkSpecifierTest.java b/tests/net/java/android/net/TelephonyNetworkSpecifierTest.java
deleted file mode 100644
index 6714bb1abbe6..000000000000
--- a/tests/net/java/android/net/TelephonyNetworkSpecifierTest.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-import static com.android.testutils.ParcelUtils.assertParcelSane;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import android.net.wifi.WifiNetworkSpecifier;
-import android.telephony.SubscriptionManager;
-
-import androidx.test.filters.SmallTest;
-
-import org.junit.Test;
-
-/**
- * Unit test for {@link android.net.TelephonyNetworkSpecifier}.
- */
-@SmallTest
-public class TelephonyNetworkSpecifierTest {
- private static final int TEST_SUBID = 5;
- private static final String TEST_SSID = "Test123";
-
- /**
- * Validate that IllegalArgumentException will be thrown if build TelephonyNetworkSpecifier
- * without calling {@link TelephonyNetworkSpecifier.Builder#setSubscriptionId(int)}.
- */
- @Test
- public void testBuilderBuildWithDefault() {
- try {
- new TelephonyNetworkSpecifier.Builder().build();
- } catch (IllegalArgumentException iae) {
- // expected, test pass
- }
- }
-
- /**
- * Validate that no exception will be thrown even if pass invalid subscription id to
- * {@link TelephonyNetworkSpecifier.Builder#setSubscriptionId(int)}.
- */
- @Test
- public void testBuilderBuildWithInvalidSubId() {
- TelephonyNetworkSpecifier specifier = new TelephonyNetworkSpecifier.Builder()
- .setSubscriptionId(SubscriptionManager.INVALID_SUBSCRIPTION_ID)
- .build();
- assertEquals(specifier.getSubscriptionId(), SubscriptionManager.INVALID_SUBSCRIPTION_ID);
- }
-
- /**
- * Validate the correctness of TelephonyNetworkSpecifier when provide valid subId.
- */
- @Test
- public void testBuilderBuildWithValidSubId() {
- final TelephonyNetworkSpecifier specifier = new TelephonyNetworkSpecifier.Builder()
- .setSubscriptionId(TEST_SUBID)
- .build();
- assertEquals(TEST_SUBID, specifier.getSubscriptionId());
- }
-
- /**
- * Validate that parcel marshalling/unmarshalling works.
- */
- @Test
- public void testParcel() {
- TelephonyNetworkSpecifier specifier = new TelephonyNetworkSpecifier.Builder()
- .setSubscriptionId(TEST_SUBID)
- .build();
- assertParcelSane(specifier, 1 /* fieldCount */);
- }
-
- /**
- * Validate the behavior of method canBeSatisfiedBy().
- */
- @Test
- public void testCanBeSatisfiedBy() {
- final TelephonyNetworkSpecifier tns1 = new TelephonyNetworkSpecifier.Builder()
- .setSubscriptionId(TEST_SUBID)
- .build();
- final TelephonyNetworkSpecifier tns2 = new TelephonyNetworkSpecifier.Builder()
- .setSubscriptionId(TEST_SUBID)
- .build();
- final WifiNetworkSpecifier wns = new WifiNetworkSpecifier.Builder()
- .setSsid(TEST_SSID)
- .build();
- final MatchAllNetworkSpecifier mans = new MatchAllNetworkSpecifier();
-
- // Test equality
- assertEquals(tns1, tns2);
- assertTrue(tns1.canBeSatisfiedBy(tns1));
- assertTrue(tns1.canBeSatisfiedBy(tns2));
-
- // Test other edge cases.
- assertFalse(tns1.canBeSatisfiedBy(null));
- assertFalse(tns1.canBeSatisfiedBy(wns));
- assertTrue(tns1.canBeSatisfiedBy(mans));
- }
-}
diff --git a/tests/net/java/android/net/VpnManagerTest.java b/tests/net/java/android/net/VpnManagerTest.java
deleted file mode 100644
index c548e30761c9..000000000000
--- a/tests/net/java/android/net/VpnManagerTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.ComponentName;
-import android.content.Intent;
-import android.test.mock.MockContext;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.internal.net.VpnProfile;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-/** Unit tests for {@link VpnManager}. */
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class VpnManagerTest {
- private static final String PKG_NAME = "fooPackage";
-
- private static final String SESSION_NAME_STRING = "testSession";
- private static final String SERVER_ADDR_STRING = "1.2.3.4";
- private static final String IDENTITY_STRING = "Identity";
- private static final byte[] PSK_BYTES = "preSharedKey".getBytes();
-
- private IVpnManager mMockService;
- private VpnManager mVpnManager;
- private final MockContext mMockContext =
- new MockContext() {
- @Override
- public String getOpPackageName() {
- return PKG_NAME;
- }
- };
-
- @Before
- public void setUp() throws Exception {
- mMockService = mock(IVpnManager.class);
- mVpnManager = new VpnManager(mMockContext, mMockService);
- }
-
- @Test
- public void testProvisionVpnProfilePreconsented() throws Exception {
- final PlatformVpnProfile profile = getPlatformVpnProfile();
- when(mMockService.provisionVpnProfile(any(VpnProfile.class), eq(PKG_NAME)))
- .thenReturn(true);
-
- // Expect there to be no intent returned, as consent has already been granted.
- assertNull(mVpnManager.provisionVpnProfile(profile));
- verify(mMockService).provisionVpnProfile(eq(profile.toVpnProfile()), eq(PKG_NAME));
- }
-
- @Test
- public void testProvisionVpnProfileNeedsConsent() throws Exception {
- final PlatformVpnProfile profile = getPlatformVpnProfile();
- when(mMockService.provisionVpnProfile(any(VpnProfile.class), eq(PKG_NAME)))
- .thenReturn(false);
-
- // Expect intent to be returned, as consent has not already been granted.
- final Intent intent = mVpnManager.provisionVpnProfile(profile);
- assertNotNull(intent);
-
- final ComponentName expectedComponentName =
- ComponentName.unflattenFromString(
- "com.android.vpndialogs/com.android.vpndialogs.PlatformVpnConfirmDialog");
- assertEquals(expectedComponentName, intent.getComponent());
- verify(mMockService).provisionVpnProfile(eq(profile.toVpnProfile()), eq(PKG_NAME));
- }
-
- @Test
- public void testDeleteProvisionedVpnProfile() throws Exception {
- mVpnManager.deleteProvisionedVpnProfile();
- verify(mMockService).deleteVpnProfile(eq(PKG_NAME));
- }
-
- @Test
- public void testStartProvisionedVpnProfile() throws Exception {
- mVpnManager.startProvisionedVpnProfile();
- verify(mMockService).startVpnProfile(eq(PKG_NAME));
- }
-
- @Test
- public void testStopProvisionedVpnProfile() throws Exception {
- mVpnManager.stopProvisionedVpnProfile();
- verify(mMockService).stopVpnProfile(eq(PKG_NAME));
- }
-
- private Ikev2VpnProfile getPlatformVpnProfile() throws Exception {
- return new Ikev2VpnProfile.Builder(SERVER_ADDR_STRING, IDENTITY_STRING)
- .setBypassable(true)
- .setMaxMtu(1300)
- .setMetered(true)
- .setAuthPsk(PSK_BYTES)
- .build();
- }
-}
diff --git a/tests/net/java/android/net/VpnTransportInfoTest.java b/tests/net/java/android/net/VpnTransportInfoTest.java
deleted file mode 100644
index ccaa5cf7e9f7..000000000000
--- a/tests/net/java/android/net/VpnTransportInfoTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-import static android.net.NetworkCapabilities.REDACT_FOR_NETWORK_SETTINGS;
-import static android.net.NetworkCapabilities.REDACT_NONE;
-
-import static com.android.testutils.ParcelUtils.assertParcelSane;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class VpnTransportInfoTest {
-
- @Test
- public void testParceling() {
- VpnTransportInfo v = new VpnTransportInfo(VpnManager.TYPE_VPN_PLATFORM, "12345");
- assertParcelSane(v, 2 /* fieldCount */);
- }
-
- @Test
- public void testEqualsAndHashCode() {
- String session1 = "12345";
- String session2 = "6789";
- VpnTransportInfo v11 = new VpnTransportInfo(VpnManager.TYPE_VPN_PLATFORM, session1);
- VpnTransportInfo v12 = new VpnTransportInfo(VpnManager.TYPE_VPN_SERVICE, session1);
- VpnTransportInfo v13 = new VpnTransportInfo(VpnManager.TYPE_VPN_PLATFORM, session1);
- VpnTransportInfo v14 = new VpnTransportInfo(VpnManager.TYPE_VPN_LEGACY, session1);
- VpnTransportInfo v15 = new VpnTransportInfo(VpnManager.TYPE_VPN_OEM, session1);
- VpnTransportInfo v21 = new VpnTransportInfo(VpnManager.TYPE_VPN_LEGACY, session2);
-
- VpnTransportInfo v31 = v11.makeCopy(REDACT_FOR_NETWORK_SETTINGS);
- VpnTransportInfo v32 = v13.makeCopy(REDACT_FOR_NETWORK_SETTINGS);
-
- assertNotEquals(v11, v12);
- assertNotEquals(v13, v14);
- assertNotEquals(v14, v15);
- assertNotEquals(v14, v21);
-
- assertEquals(v11, v13);
- assertEquals(v31, v32);
- assertEquals(v11.hashCode(), v13.hashCode());
- assertEquals(REDACT_FOR_NETWORK_SETTINGS, v32.getApplicableRedactions());
- assertEquals(session1, v15.makeCopy(REDACT_NONE).getSessionId());
- }
-}
diff --git a/tests/net/java/android/net/ipmemorystore/ParcelableTests.java b/tests/net/java/android/net/ipmemorystore/ParcelableTests.java
deleted file mode 100644
index 603c87519532..000000000000
--- a/tests/net/java/android/net/ipmemorystore/ParcelableTests.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net.ipmemorystore;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import android.net.networkstack.aidl.quirks.IPv6ProvisioningLossQuirk;
-import android.net.networkstack.aidl.quirks.IPv6ProvisioningLossQuirkParcelable;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.lang.reflect.Modifier;
-import java.net.Inet4Address;
-import java.net.InetAddress;
-import java.util.Arrays;
-import java.util.Collections;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class ParcelableTests {
- @Test
- public void testNetworkAttributesParceling() throws Exception {
- final NetworkAttributes.Builder builder = new NetworkAttributes.Builder();
- NetworkAttributes in = builder.build();
- assertEquals(in, new NetworkAttributes(parcelingRoundTrip(in.toParcelable())));
-
- builder.setAssignedV4Address((Inet4Address) Inet4Address.getByName("1.2.3.4"));
- // lease will expire in two hours
- builder.setAssignedV4AddressExpiry(System.currentTimeMillis() + 7_200_000);
- // cluster stays null this time around
- builder.setDnsAddresses(Collections.emptyList());
- builder.setMtu(18);
- in = builder.build();
- assertEquals(in, new NetworkAttributes(parcelingRoundTrip(in.toParcelable())));
-
- builder.setAssignedV4Address((Inet4Address) Inet4Address.getByName("6.7.8.9"));
- builder.setAssignedV4AddressExpiry(System.currentTimeMillis() + 3_600_000);
- builder.setCluster("groupHint");
- builder.setDnsAddresses(Arrays.asList(
- InetAddress.getByName("ACA1:652B:0911:DE8F:1200:115E:913B:AA2A"),
- InetAddress.getByName("6.7.8.9")));
- builder.setMtu(1_000_000);
- in = builder.build();
- assertEquals(in, new NetworkAttributes(parcelingRoundTrip(in.toParcelable())));
-
- builder.setMtu(null);
- in = builder.build();
- assertEquals(in, new NetworkAttributes(parcelingRoundTrip(in.toParcelable())));
-
- // Verify that this test does not miss any new field added later.
- // If any field is added to NetworkAttributes it must be tested here for parceling
- // roundtrip.
- assertEquals(6, Arrays.stream(NetworkAttributes.class.getDeclaredFields())
- .filter(f -> !Modifier.isStatic(f.getModifiers())).count());
- }
-
- @Test
- public void testPrivateDataParceling() throws Exception {
- final Blob in = new Blob();
- in.data = new byte[] {89, 111, 108, 111};
- final Blob out = parcelingRoundTrip(in);
- // Object.equals on byte[] tests the references
- assertEquals(in.data.length, out.data.length);
- assertTrue(Arrays.equals(in.data, out.data));
- }
-
- @Test
- public void testSameL3NetworkResponseParceling() throws Exception {
- final SameL3NetworkResponseParcelable parcelable = new SameL3NetworkResponseParcelable();
- parcelable.l2Key1 = "key 1";
- parcelable.l2Key2 = "key 2";
- parcelable.confidence = 0.43f;
-
- final SameL3NetworkResponse in = new SameL3NetworkResponse(parcelable);
- assertEquals("key 1", in.l2Key1);
- assertEquals("key 2", in.l2Key2);
- assertEquals(0.43f, in.confidence, 0.01f /* delta */);
-
- final SameL3NetworkResponse out =
- new SameL3NetworkResponse(parcelingRoundTrip(in.toParcelable()));
-
- assertEquals(in, out);
- assertEquals(in.l2Key1, out.l2Key1);
- assertEquals(in.l2Key2, out.l2Key2);
- assertEquals(in.confidence, out.confidence, 0.01f /* delta */);
- }
-
- @Test
- public void testIPv6ProvisioningLossQuirkParceling() throws Exception {
- final NetworkAttributes.Builder builder = new NetworkAttributes.Builder();
- final IPv6ProvisioningLossQuirkParcelable parcelable =
- new IPv6ProvisioningLossQuirkParcelable();
- final long expiry = System.currentTimeMillis() + 7_200_000;
-
- parcelable.detectionCount = 3;
- parcelable.quirkExpiry = expiry; // quirk info will expire in two hours
- builder.setIpv6ProvLossQuirk(IPv6ProvisioningLossQuirk.fromStableParcelable(parcelable));
- final NetworkAttributes in = builder.build();
-
- final NetworkAttributes out = new NetworkAttributes(parcelingRoundTrip(in.toParcelable()));
- assertEquals(out.ipv6ProvisioningLossQuirk, in.ipv6ProvisioningLossQuirk);
- }
-
- private <T extends Parcelable> T parcelingRoundTrip(final T in) throws Exception {
- final Parcel p = Parcel.obtain();
- in.writeToParcel(p, /* flags */ 0);
- p.setDataPosition(0);
- final byte[] marshalledData = p.marshall();
- p.recycle();
-
- final Parcel q = Parcel.obtain();
- q.unmarshall(marshalledData, 0, marshalledData.length);
- q.setDataPosition(0);
-
- final Parcelable.Creator<T> creator = (Parcelable.Creator<T>)
- in.getClass().getField("CREATOR").get(null); // static object, so null receiver
- final T unmarshalled = (T) creator.createFromParcel(q);
- q.recycle();
- return unmarshalled;
- }
-}
diff --git a/tests/net/java/android/net/nsd/NsdManagerTest.java b/tests/net/java/android/net/nsd/NsdManagerTest.java
deleted file mode 100644
index b0a9b8a55322..000000000000
--- a/tests/net/java/android/net/nsd/NsdManagerTest.java
+++ /dev/null
@@ -1,388 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net.nsd;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.reset;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.timeout;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.Looper;
-import android.os.Message;
-import android.os.Messenger;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.internal.util.AsyncChannel;
-import com.android.testutils.HandlerUtils;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class NsdManagerTest {
-
- static final int PROTOCOL = NsdManager.PROTOCOL_DNS_SD;
-
- @Mock Context mContext;
- @Mock INsdManager mService;
- MockServiceHandler mServiceHandler;
-
- NsdManager mManager;
-
- long mTimeoutMs = 200; // non-final so that tests can adjust the value.
-
- @Before
- public void setUp() throws Exception {
- MockitoAnnotations.initMocks(this);
-
- mServiceHandler = spy(MockServiceHandler.create(mContext));
- when(mService.getMessenger()).thenReturn(new Messenger(mServiceHandler));
-
- mManager = makeManager();
- }
-
- @After
- public void tearDown() throws Exception {
- HandlerUtils.waitForIdle(mServiceHandler, mTimeoutMs);
- mServiceHandler.chan.disconnect();
- mServiceHandler.stop();
- if (mManager != null) {
- mManager.disconnect();
- }
- }
-
- @Test
- public void testResolveService() {
- NsdManager manager = mManager;
-
- NsdServiceInfo request = new NsdServiceInfo("a_name", "a_type");
- NsdServiceInfo reply = new NsdServiceInfo("resolved_name", "resolved_type");
- NsdManager.ResolveListener listener = mock(NsdManager.ResolveListener.class);
-
- manager.resolveService(request, listener);
- int key1 = verifyRequest(NsdManager.RESOLVE_SERVICE);
- int err = 33;
- sendResponse(NsdManager.RESOLVE_SERVICE_FAILED, err, key1, null);
- verify(listener, timeout(mTimeoutMs).times(1)).onResolveFailed(request, err);
-
- manager.resolveService(request, listener);
- int key2 = verifyRequest(NsdManager.RESOLVE_SERVICE);
- sendResponse(NsdManager.RESOLVE_SERVICE_SUCCEEDED, 0, key2, reply);
- verify(listener, timeout(mTimeoutMs).times(1)).onServiceResolved(reply);
- }
-
- @Test
- public void testParallelResolveService() {
- NsdManager manager = mManager;
-
- NsdServiceInfo request = new NsdServiceInfo("a_name", "a_type");
- NsdServiceInfo reply = new NsdServiceInfo("resolved_name", "resolved_type");
-
- NsdManager.ResolveListener listener1 = mock(NsdManager.ResolveListener.class);
- NsdManager.ResolveListener listener2 = mock(NsdManager.ResolveListener.class);
-
- manager.resolveService(request, listener1);
- int key1 = verifyRequest(NsdManager.RESOLVE_SERVICE);
-
- manager.resolveService(request, listener2);
- int key2 = verifyRequest(NsdManager.RESOLVE_SERVICE);
-
- sendResponse(NsdManager.RESOLVE_SERVICE_SUCCEEDED, 0, key2, reply);
- sendResponse(NsdManager.RESOLVE_SERVICE_SUCCEEDED, 0, key1, reply);
-
- verify(listener1, timeout(mTimeoutMs).times(1)).onServiceResolved(reply);
- verify(listener2, timeout(mTimeoutMs).times(1)).onServiceResolved(reply);
- }
-
- @Test
- public void testRegisterService() {
- NsdManager manager = mManager;
-
- NsdServiceInfo request1 = new NsdServiceInfo("a_name", "a_type");
- NsdServiceInfo request2 = new NsdServiceInfo("another_name", "another_type");
- request1.setPort(2201);
- request2.setPort(2202);
- NsdManager.RegistrationListener listener1 = mock(NsdManager.RegistrationListener.class);
- NsdManager.RegistrationListener listener2 = mock(NsdManager.RegistrationListener.class);
-
- // Register two services
- manager.registerService(request1, PROTOCOL, listener1);
- int key1 = verifyRequest(NsdManager.REGISTER_SERVICE);
-
- manager.registerService(request2, PROTOCOL, listener2);
- int key2 = verifyRequest(NsdManager.REGISTER_SERVICE);
-
- // First reques fails, second request succeeds
- sendResponse(NsdManager.REGISTER_SERVICE_SUCCEEDED, 0, key2, request2);
- verify(listener2, timeout(mTimeoutMs).times(1)).onServiceRegistered(request2);
-
- int err = 1;
- sendResponse(NsdManager.REGISTER_SERVICE_FAILED, err, key1, request1);
- verify(listener1, timeout(mTimeoutMs).times(1)).onRegistrationFailed(request1, err);
-
- // Client retries first request, it succeeds
- manager.registerService(request1, PROTOCOL, listener1);
- int key3 = verifyRequest(NsdManager.REGISTER_SERVICE);
-
- sendResponse(NsdManager.REGISTER_SERVICE_SUCCEEDED, 0, key3, request1);
- verify(listener1, timeout(mTimeoutMs).times(1)).onServiceRegistered(request1);
-
- // First request is unregistered, it succeeds
- manager.unregisterService(listener1);
- int key3again = verifyRequest(NsdManager.UNREGISTER_SERVICE);
- assertEquals(key3, key3again);
-
- sendResponse(NsdManager.UNREGISTER_SERVICE_SUCCEEDED, 0, key3again, null);
- verify(listener1, timeout(mTimeoutMs).times(1)).onServiceUnregistered(request1);
-
- // Second request is unregistered, it fails
- manager.unregisterService(listener2);
- int key2again = verifyRequest(NsdManager.UNREGISTER_SERVICE);
- assertEquals(key2, key2again);
-
- sendResponse(NsdManager.UNREGISTER_SERVICE_FAILED, err, key2again, null);
- verify(listener2, timeout(mTimeoutMs).times(1)).onUnregistrationFailed(request2, err);
-
- // TODO: do not unregister listener until service is unregistered
- // Client retries unregistration of second request, it succeeds
- //manager.unregisterService(listener2);
- //int key2yetAgain = verifyRequest(NsdManager.UNREGISTER_SERVICE);
- //assertEquals(key2, key2yetAgain);
-
- //sendResponse(NsdManager.UNREGISTER_SERVICE_SUCCEEDED, 0, key2yetAgain, null);
- //verify(listener2, timeout(mTimeoutMs).times(1)).onServiceUnregistered(request2);
- }
-
- @Test
- public void testDiscoverService() {
- NsdManager manager = mManager;
-
- NsdServiceInfo reply1 = new NsdServiceInfo("a_name", "a_type");
- NsdServiceInfo reply2 = new NsdServiceInfo("another_name", "a_type");
- NsdServiceInfo reply3 = new NsdServiceInfo("a_third_name", "a_type");
-
- NsdManager.DiscoveryListener listener = mock(NsdManager.DiscoveryListener.class);
-
- // Client registers for discovery, request fails
- manager.discoverServices("a_type", PROTOCOL, listener);
- int key1 = verifyRequest(NsdManager.DISCOVER_SERVICES);
-
- int err = 1;
- sendResponse(NsdManager.DISCOVER_SERVICES_FAILED, err, key1, null);
- verify(listener, timeout(mTimeoutMs).times(1)).onStartDiscoveryFailed("a_type", err);
-
- // Client retries, request succeeds
- manager.discoverServices("a_type", PROTOCOL, listener);
- int key2 = verifyRequest(NsdManager.DISCOVER_SERVICES);
-
- sendResponse(NsdManager.DISCOVER_SERVICES_STARTED, 0, key2, reply1);
- verify(listener, timeout(mTimeoutMs).times(1)).onDiscoveryStarted("a_type");
-
-
- // mdns notifies about services
- sendResponse(NsdManager.SERVICE_FOUND, 0, key2, reply1);
- verify(listener, timeout(mTimeoutMs).times(1)).onServiceFound(reply1);
-
- sendResponse(NsdManager.SERVICE_FOUND, 0, key2, reply2);
- verify(listener, timeout(mTimeoutMs).times(1)).onServiceFound(reply2);
-
- sendResponse(NsdManager.SERVICE_LOST, 0, key2, reply2);
- verify(listener, timeout(mTimeoutMs).times(1)).onServiceLost(reply2);
-
-
- // Client unregisters its listener
- manager.stopServiceDiscovery(listener);
- int key2again = verifyRequest(NsdManager.STOP_DISCOVERY);
- assertEquals(key2, key2again);
-
- // TODO: unregister listener immediately and stop notifying it about services
- // Notifications are still passed to the client's listener
- sendResponse(NsdManager.SERVICE_LOST, 0, key2, reply1);
- verify(listener, timeout(mTimeoutMs).times(1)).onServiceLost(reply1);
-
- // Client is notified of complete unregistration
- sendResponse(NsdManager.STOP_DISCOVERY_SUCCEEDED, 0, key2again, "a_type");
- verify(listener, timeout(mTimeoutMs).times(1)).onDiscoveryStopped("a_type");
-
- // Notifications are not passed to the client anymore
- sendResponse(NsdManager.SERVICE_FOUND, 0, key2, reply3);
- verify(listener, timeout(mTimeoutMs).times(0)).onServiceLost(reply3);
-
-
- // Client registers for service discovery
- reset(listener);
- manager.discoverServices("a_type", PROTOCOL, listener);
- int key3 = verifyRequest(NsdManager.DISCOVER_SERVICES);
-
- sendResponse(NsdManager.DISCOVER_SERVICES_STARTED, 0, key3, reply1);
- verify(listener, timeout(mTimeoutMs).times(1)).onDiscoveryStarted("a_type");
-
- // Client unregisters immediately, it fails
- manager.stopServiceDiscovery(listener);
- int key3again = verifyRequest(NsdManager.STOP_DISCOVERY);
- assertEquals(key3, key3again);
-
- err = 2;
- sendResponse(NsdManager.STOP_DISCOVERY_FAILED, err, key3again, "a_type");
- verify(listener, timeout(mTimeoutMs).times(1)).onStopDiscoveryFailed("a_type", err);
-
- // New notifications are not passed to the client anymore
- sendResponse(NsdManager.SERVICE_FOUND, 0, key3, reply1);
- verify(listener, timeout(mTimeoutMs).times(0)).onServiceFound(reply1);
- }
-
- @Test
- public void testInvalidCalls() {
- NsdManager manager = mManager;
-
- NsdManager.RegistrationListener listener1 = mock(NsdManager.RegistrationListener.class);
- NsdManager.DiscoveryListener listener2 = mock(NsdManager.DiscoveryListener.class);
- NsdManager.ResolveListener listener3 = mock(NsdManager.ResolveListener.class);
-
- NsdServiceInfo invalidService = new NsdServiceInfo(null, null);
- NsdServiceInfo validService = new NsdServiceInfo("a_name", "a_type");
- validService.setPort(2222);
-
- // Service registration
- // - invalid arguments
- mustFail(() -> { manager.unregisterService(null); });
- mustFail(() -> { manager.registerService(null, -1, null); });
- mustFail(() -> { manager.registerService(null, PROTOCOL, listener1); });
- mustFail(() -> { manager.registerService(invalidService, PROTOCOL, listener1); });
- mustFail(() -> { manager.registerService(validService, -1, listener1); });
- mustFail(() -> { manager.registerService(validService, PROTOCOL, null); });
- manager.registerService(validService, PROTOCOL, listener1);
- // - listener already registered
- mustFail(() -> { manager.registerService(validService, PROTOCOL, listener1); });
- manager.unregisterService(listener1);
- // TODO: make listener immediately reusable
- //mustFail(() -> { manager.unregisterService(listener1); });
- //manager.registerService(validService, PROTOCOL, listener1);
-
- // Discover service
- // - invalid arguments
- mustFail(() -> { manager.stopServiceDiscovery(null); });
- mustFail(() -> { manager.discoverServices(null, -1, null); });
- mustFail(() -> { manager.discoverServices(null, PROTOCOL, listener2); });
- mustFail(() -> { manager.discoverServices("a_service", -1, listener2); });
- mustFail(() -> { manager.discoverServices("a_service", PROTOCOL, null); });
- manager.discoverServices("a_service", PROTOCOL, listener2);
- // - listener already registered
- mustFail(() -> { manager.discoverServices("another_service", PROTOCOL, listener2); });
- manager.stopServiceDiscovery(listener2);
- // TODO: make listener immediately reusable
- //mustFail(() -> { manager.stopServiceDiscovery(listener2); });
- //manager.discoverServices("another_service", PROTOCOL, listener2);
-
- // Resolver service
- // - invalid arguments
- mustFail(() -> { manager.resolveService(null, null); });
- mustFail(() -> { manager.resolveService(null, listener3); });
- mustFail(() -> { manager.resolveService(invalidService, listener3); });
- mustFail(() -> { manager.resolveService(validService, null); });
- manager.resolveService(validService, listener3);
- // - listener already registered:w
- mustFail(() -> { manager.resolveService(validService, listener3); });
- }
-
- public void mustFail(Runnable fn) {
- try {
- fn.run();
- fail();
- } catch (Exception expected) {
- }
- }
-
- NsdManager makeManager() {
- NsdManager manager = new NsdManager(mContext, mService);
- // Acknowledge first two messages connecting the AsyncChannel.
- verify(mServiceHandler, timeout(mTimeoutMs).times(2)).handleMessage(any());
- reset(mServiceHandler);
- assertNotNull(mServiceHandler.chan);
- return manager;
- }
-
- int verifyRequest(int expectedMessageType) {
- HandlerUtils.waitForIdle(mServiceHandler, mTimeoutMs);
- verify(mServiceHandler, timeout(mTimeoutMs)).handleMessage(any());
- reset(mServiceHandler);
- Message received = mServiceHandler.getLastMessage();
- assertEquals(NsdManager.nameOf(expectedMessageType), NsdManager.nameOf(received.what));
- return received.arg2;
- }
-
- void sendResponse(int replyType, int arg, int key, Object obj) {
- mServiceHandler.chan.sendMessage(replyType, arg, key, obj);
- }
-
- // Implements the server side of AsyncChannel connection protocol
- public static class MockServiceHandler extends Handler {
- public final Context context;
- public AsyncChannel chan;
- public Message lastMessage;
-
- MockServiceHandler(Looper l, Context c) {
- super(l);
- context = c;
- }
-
- synchronized Message getLastMessage() {
- return lastMessage;
- }
-
- synchronized void setLastMessage(Message msg) {
- lastMessage = obtainMessage();
- lastMessage.copyFrom(msg);
- }
-
- @Override
- public void handleMessage(Message msg) {
- setLastMessage(msg);
- if (msg.what == AsyncChannel.CMD_CHANNEL_FULL_CONNECTION) {
- chan = new AsyncChannel();
- chan.connect(context, this, msg.replyTo);
- chan.sendMessage(AsyncChannel.CMD_CHANNEL_FULLY_CONNECTED);
- }
- }
-
- void stop() {
- getLooper().quitSafely();
- }
-
- static MockServiceHandler create(Context context) {
- HandlerThread t = new HandlerThread("mock-service-handler");
- t.start();
- return new MockServiceHandler(t.getLooper(), context);
- }
- }
-}
diff --git a/tests/net/java/android/net/nsd/NsdServiceInfoTest.java b/tests/net/java/android/net/nsd/NsdServiceInfoTest.java
deleted file mode 100644
index 94dfc7515c67..000000000000
--- a/tests/net/java/android/net/nsd/NsdServiceInfoTest.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net.nsd;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.StrictMode;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.Arrays;
-import java.util.Map;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class NsdServiceInfoTest {
-
- public final static InetAddress LOCALHOST;
- static {
- // Because test.
- StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
- StrictMode.setThreadPolicy(policy);
-
- InetAddress _host = null;
- try {
- _host = InetAddress.getLocalHost();
- } catch (UnknownHostException e) { }
- LOCALHOST = _host;
- }
-
- @Test
- public void testLimits() throws Exception {
- NsdServiceInfo info = new NsdServiceInfo();
-
- // Non-ASCII keys.
- boolean exceptionThrown = false;
- try {
- info.setAttribute("猫", "meow");
- } catch (IllegalArgumentException e) {
- exceptionThrown = true;
- }
- assertTrue(exceptionThrown);
- assertEmptyServiceInfo(info);
-
- // ASCII keys with '=' character.
- exceptionThrown = false;
- try {
- info.setAttribute("kitten=", "meow");
- } catch (IllegalArgumentException e) {
- exceptionThrown = true;
- }
- assertTrue(exceptionThrown);
- assertEmptyServiceInfo(info);
-
- // Single key + value length too long.
- exceptionThrown = false;
- try {
- String longValue = "loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo" +
- "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo" +
- "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo" +
- "ooooooooooooooooooooooooooooong"; // 248 characters.
- info.setAttribute("longcat", longValue); // Key + value == 255 characters.
- } catch (IllegalArgumentException e) {
- exceptionThrown = true;
- }
- assertTrue(exceptionThrown);
- assertEmptyServiceInfo(info);
-
- // Total TXT record length too long.
- exceptionThrown = false;
- int recordsAdded = 0;
- try {
- for (int i = 100; i < 300; ++i) {
- // 6 char key + 5 char value + 2 bytes overhead = 13 byte record length.
- String key = String.format("key%d", i);
- info.setAttribute(key, "12345");
- recordsAdded++;
- }
- } catch (IllegalArgumentException e) {
- exceptionThrown = true;
- }
- assertTrue(exceptionThrown);
- assertTrue(100 == recordsAdded);
- assertTrue(info.getTxtRecord().length == 1300);
- }
-
- @Test
- public void testParcel() throws Exception {
- NsdServiceInfo emptyInfo = new NsdServiceInfo();
- checkParcelable(emptyInfo);
-
- NsdServiceInfo fullInfo = new NsdServiceInfo();
- fullInfo.setServiceName("kitten");
- fullInfo.setServiceType("_kitten._tcp");
- fullInfo.setPort(4242);
- fullInfo.setHost(LOCALHOST);
- checkParcelable(fullInfo);
-
- NsdServiceInfo noHostInfo = new NsdServiceInfo();
- noHostInfo.setServiceName("kitten");
- noHostInfo.setServiceType("_kitten._tcp");
- noHostInfo.setPort(4242);
- checkParcelable(noHostInfo);
-
- NsdServiceInfo attributedInfo = new NsdServiceInfo();
- attributedInfo.setServiceName("kitten");
- attributedInfo.setServiceType("_kitten._tcp");
- attributedInfo.setPort(4242);
- attributedInfo.setHost(LOCALHOST);
- attributedInfo.setAttribute("color", "pink");
- attributedInfo.setAttribute("sound", (new String("にゃあ")).getBytes("UTF-8"));
- attributedInfo.setAttribute("adorable", (String) null);
- attributedInfo.setAttribute("sticky", "yes");
- attributedInfo.setAttribute("siblings", new byte[] {});
- attributedInfo.setAttribute("edge cases", new byte[] {0, -1, 127, -128});
- attributedInfo.removeAttribute("sticky");
- checkParcelable(attributedInfo);
-
- // Sanity check that we actually wrote attributes to attributedInfo.
- assertTrue(attributedInfo.getAttributes().keySet().contains("adorable"));
- String sound = new String(attributedInfo.getAttributes().get("sound"), "UTF-8");
- assertTrue(sound.equals("にゃあ"));
- byte[] edgeCases = attributedInfo.getAttributes().get("edge cases");
- assertTrue(Arrays.equals(edgeCases, new byte[] {0, -1, 127, -128}));
- assertFalse(attributedInfo.getAttributes().keySet().contains("sticky"));
- }
-
- public void checkParcelable(NsdServiceInfo original) {
- // Write to parcel.
- Parcel p = Parcel.obtain();
- Bundle writer = new Bundle();
- writer.putParcelable("test_info", original);
- writer.writeToParcel(p, 0);
-
- // Extract from parcel.
- p.setDataPosition(0);
- Bundle reader = p.readBundle();
- reader.setClassLoader(NsdServiceInfo.class.getClassLoader());
- NsdServiceInfo result = reader.getParcelable("test_info");
-
- // Assert equality of base fields.
- assertEquals(original.getServiceName(), result.getServiceName());
- assertEquals(original.getServiceType(), result.getServiceType());
- assertEquals(original.getHost(), result.getHost());
- assertTrue(original.getPort() == result.getPort());
-
- // Assert equality of attribute map.
- Map<String, byte[]> originalMap = original.getAttributes();
- Map<String, byte[]> resultMap = result.getAttributes();
- assertEquals(originalMap.keySet(), resultMap.keySet());
- for (String key : originalMap.keySet()) {
- assertTrue(Arrays.equals(originalMap.get(key), resultMap.get(key)));
- }
- }
-
- public void assertEmptyServiceInfo(NsdServiceInfo shouldBeEmpty) {
- byte[] txtRecord = shouldBeEmpty.getTxtRecord();
- if (txtRecord == null || txtRecord.length == 0) {
- return;
- }
- fail("NsdServiceInfo.getTxtRecord did not return null but " + Arrays.toString(txtRecord));
- }
-}
diff --git a/tests/net/java/android/net/util/DnsUtilsTest.java b/tests/net/java/android/net/util/DnsUtilsTest.java
deleted file mode 100644
index b626db8d89e4..000000000000
--- a/tests/net/java/android/net/util/DnsUtilsTest.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net.util;
-
-import static android.net.util.DnsUtils.IPV6_ADDR_SCOPE_GLOBAL;
-import static android.net.util.DnsUtils.IPV6_ADDR_SCOPE_LINKLOCAL;
-import static android.net.util.DnsUtils.IPV6_ADDR_SCOPE_SITELOCAL;
-
-import static org.junit.Assert.assertEquals;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.net.InetAddresses;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.net.InetAddress;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class DnsUtilsTest {
- private InetAddress stringToAddress(@NonNull String addr) {
- return InetAddresses.parseNumericAddress(addr);
- }
-
- private DnsUtils.SortableAddress makeSortableAddress(@NonNull String addr) {
- return makeSortableAddress(addr, null);
- }
-
- private DnsUtils.SortableAddress makeSortableAddress(@NonNull String addr,
- @Nullable String srcAddr) {
- return new DnsUtils.SortableAddress(stringToAddress(addr),
- srcAddr != null ? stringToAddress(srcAddr) : null);
- }
-
- @Test
- public void testRfc6724Comparator() {
- final List<DnsUtils.SortableAddress> test = Arrays.asList(
- // Ipv4
- makeSortableAddress("216.58.200.36", "192.168.1.1"),
- // global with different scope src
- makeSortableAddress("2404:6800:4008:801::2004", "fe80::1111:2222"),
- // global without src addr
- makeSortableAddress("2404:6800:cafe:801::1"),
- // loop back
- makeSortableAddress("::1", "::1"),
- // link local
- makeSortableAddress("fe80::c46f:1cff:fe04:39b4", "fe80::1"),
- // teredo tunneling
- makeSortableAddress("2001::47c1", "2001::2"),
- // 6bone without src addr
- makeSortableAddress("3ffe::1234:5678"),
- // IPv4-compatible
- makeSortableAddress("::216.58.200.36", "::216.58.200.9"),
- // 6bone
- makeSortableAddress("3ffe::1234:5678", "3ffe::1234:1"),
- // IPv4-mapped IPv6
- makeSortableAddress("::ffff:192.168.95.7", "::ffff:192.168.95.1"));
-
- final List<InetAddress> expected = Arrays.asList(
- stringToAddress("::1"), // loop back
- stringToAddress("fe80::c46f:1cff:fe04:39b4"), // link local
- stringToAddress("216.58.200.36"), // Ipv4
- stringToAddress("::ffff:192.168.95.7"), // IPv4-mapped IPv6
- stringToAddress("2001::47c1"), // teredo tunneling
- stringToAddress("::216.58.200.36"), // IPv4-compatible
- stringToAddress("3ffe::1234:5678"), // 6bone
- stringToAddress("2404:6800:4008:801::2004"), // global with different scope src
- stringToAddress("2404:6800:cafe:801::1"), // global without src addr
- stringToAddress("3ffe::1234:5678")); // 6bone without src addr
-
- Collections.sort(test, new DnsUtils.Rfc6724Comparator());
-
- for (int i = 0; i < test.size(); ++i) {
- assertEquals(test.get(i).address, expected.get(i));
- }
-
- // TODO: add more combinations
- }
-
- @Test
- public void testV4SortableAddress() {
- // Test V4 address
- DnsUtils.SortableAddress test = makeSortableAddress("216.58.200.36");
- assertEquals(test.hasSrcAddr, 0);
- assertEquals(test.prefixMatchLen, 0);
- assertEquals(test.address, stringToAddress("216.58.200.36"));
- assertEquals(test.labelMatch, 0);
- assertEquals(test.scopeMatch, 0);
- assertEquals(test.scope, IPV6_ADDR_SCOPE_GLOBAL);
- assertEquals(test.label, 4);
- assertEquals(test.precedence, 35);
-
- // Test V4 loopback address with the same source address
- test = makeSortableAddress("127.1.2.3", "127.1.2.3");
- assertEquals(test.hasSrcAddr, 1);
- assertEquals(test.prefixMatchLen, 0);
- assertEquals(test.address, stringToAddress("127.1.2.3"));
- assertEquals(test.labelMatch, 1);
- assertEquals(test.scopeMatch, 1);
- assertEquals(test.scope, IPV6_ADDR_SCOPE_LINKLOCAL);
- assertEquals(test.label, 4);
- assertEquals(test.precedence, 35);
- }
-
- @Test
- public void testV6SortableAddress() {
- // Test global address
- DnsUtils.SortableAddress test = makeSortableAddress("2404:6800:4008:801::2004");
- assertEquals(test.address, stringToAddress("2404:6800:4008:801::2004"));
- assertEquals(test.scope, IPV6_ADDR_SCOPE_GLOBAL);
- assertEquals(test.label, 1);
- assertEquals(test.precedence, 40);
-
- // Test global address with global source address
- test = makeSortableAddress("2404:6800:4008:801::2004",
- "2401:fa00:fc:fd00:6d6c:7199:b8e7:41d6");
- assertEquals(test.address, stringToAddress("2404:6800:4008:801::2004"));
- assertEquals(test.hasSrcAddr, 1);
- assertEquals(test.scope, IPV6_ADDR_SCOPE_GLOBAL);
- assertEquals(test.labelMatch, 1);
- assertEquals(test.scopeMatch, 1);
- assertEquals(test.label, 1);
- assertEquals(test.precedence, 40);
- assertEquals(test.prefixMatchLen, 13);
-
- // Test global address with linklocal source address
- test = makeSortableAddress("2404:6800:4008:801::2004", "fe80::c46f:1cff:fe04:39b4");
- assertEquals(test.hasSrcAddr, 1);
- assertEquals(test.scope, IPV6_ADDR_SCOPE_GLOBAL);
- assertEquals(test.labelMatch, 1);
- assertEquals(test.scopeMatch, 0);
- assertEquals(test.label, 1);
- assertEquals(test.precedence, 40);
- assertEquals(test.prefixMatchLen, 0);
-
- // Test loopback address with the same source address
- test = makeSortableAddress("::1", "::1");
- assertEquals(test.hasSrcAddr, 1);
- assertEquals(test.prefixMatchLen, 16 * 8);
- assertEquals(test.labelMatch, 1);
- assertEquals(test.scopeMatch, 1);
- assertEquals(test.scope, IPV6_ADDR_SCOPE_LINKLOCAL);
- assertEquals(test.label, 0);
- assertEquals(test.precedence, 50);
-
- // Test linklocal address
- test = makeSortableAddress("fe80::c46f:1cff:fe04:39b4");
- assertEquals(test.scope, IPV6_ADDR_SCOPE_LINKLOCAL);
- assertEquals(test.label, 1);
- assertEquals(test.precedence, 40);
-
- // Test linklocal address
- test = makeSortableAddress("fe80::");
- assertEquals(test.scope, IPV6_ADDR_SCOPE_LINKLOCAL);
- assertEquals(test.label, 1);
- assertEquals(test.precedence, 40);
-
- // Test 6to4 address
- test = makeSortableAddress("2002:c000:0204::");
- assertEquals(test.scope, IPV6_ADDR_SCOPE_GLOBAL);
- assertEquals(test.label, 2);
- assertEquals(test.precedence, 30);
-
- // Test unique local address
- test = makeSortableAddress("fc00::c000:13ab");
- assertEquals(test.scope, IPV6_ADDR_SCOPE_GLOBAL);
- assertEquals(test.label, 13);
- assertEquals(test.precedence, 3);
-
- // Test teredo tunneling address
- test = makeSortableAddress("2001::47c1");
- assertEquals(test.scope, IPV6_ADDR_SCOPE_GLOBAL);
- assertEquals(test.label, 5);
- assertEquals(test.precedence, 5);
-
- // Test IPv4-compatible addresses
- test = makeSortableAddress("::216.58.200.36");
- assertEquals(test.scope, IPV6_ADDR_SCOPE_GLOBAL);
- assertEquals(test.label, 3);
- assertEquals(test.precedence, 1);
-
- // Test site-local address
- test = makeSortableAddress("fec0::cafe:3ab2");
- assertEquals(test.scope, IPV6_ADDR_SCOPE_SITELOCAL);
- assertEquals(test.label, 11);
- assertEquals(test.precedence, 1);
-
- // Test 6bone address
- test = makeSortableAddress("3ffe::1234:5678");
- assertEquals(test.scope, IPV6_ADDR_SCOPE_GLOBAL);
- assertEquals(test.label, 12);
- assertEquals(test.precedence, 1);
- }
-}
diff --git a/tests/net/java/android/net/util/KeepaliveUtilsTest.kt b/tests/net/java/android/net/util/KeepaliveUtilsTest.kt
deleted file mode 100644
index 5006d5345f5f..000000000000
--- a/tests/net/java/android/net/util/KeepaliveUtilsTest.kt
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net.util
-
-import android.content.Context
-import android.content.res.Resources
-import android.net.ConnectivityResources
-import android.net.NetworkCapabilities
-import android.net.NetworkCapabilities.MAX_TRANSPORT
-import android.net.NetworkCapabilities.TRANSPORT_CELLULAR
-import android.net.NetworkCapabilities.TRANSPORT_ETHERNET
-import android.net.NetworkCapabilities.TRANSPORT_VPN
-import android.net.NetworkCapabilities.TRANSPORT_WIFI
-import androidx.test.filters.SmallTest
-import com.android.internal.R
-import org.junit.After
-import org.junit.Assert.assertArrayEquals
-import org.junit.Assert.assertEquals
-import org.junit.Assert.fail
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
-import org.mockito.ArgumentMatchers.eq
-import org.mockito.Mockito.any
-import org.mockito.Mockito.doReturn
-import org.mockito.Mockito.mock
-
-/**
- * Tests for [KeepaliveUtils].
- *
- * Build, install and run with:
- * atest android.net.util.KeepaliveUtilsTest
- */
-@RunWith(JUnit4::class)
-@SmallTest
-class KeepaliveUtilsTest {
-
- // Prepare mocked context with given resource strings.
- private fun getMockedContextWithStringArrayRes(
- id: Int,
- name: String,
- res: Array<out String?>?
- ): Context {
- val mockRes = mock(Resources::class.java)
- doReturn(res).`when`(mockRes).getStringArray(eq(id))
- doReturn(id).`when`(mockRes).getIdentifier(eq(name), any(), any())
-
- return mock(Context::class.java).apply {
- doReturn(mockRes).`when`(this).getResources()
- ConnectivityResources.setResourcesContextForTest(this)
- }
- }
-
- @After
- fun tearDown() {
- ConnectivityResources.setResourcesContextForTest(null)
- }
-
- @Test
- fun testGetSupportedKeepalives() {
- fun assertRunWithException(res: Array<out String?>?) {
- try {
- val mockContext = getMockedContextWithStringArrayRes(
- R.array.config_networkSupportedKeepaliveCount,
- "config_networkSupportedKeepaliveCount", res)
- KeepaliveUtils.getSupportedKeepalives(mockContext)
- fail("Expected KeepaliveDeviceConfigurationException")
- } catch (expected: KeepaliveUtils.KeepaliveDeviceConfigurationException) {
- }
- }
-
- // Check resource with various invalid format.
- assertRunWithException(null)
- assertRunWithException(arrayOf<String?>(null))
- assertRunWithException(arrayOfNulls<String?>(10))
- assertRunWithException(arrayOf(""))
- assertRunWithException(arrayOf("3,ABC"))
- assertRunWithException(arrayOf("6,3,3"))
- assertRunWithException(arrayOf("5"))
-
- // Check resource with invalid slots value.
- assertRunWithException(arrayOf("3,-1"))
-
- // Check resource with invalid transport type.
- assertRunWithException(arrayOf("-1,3"))
- assertRunWithException(arrayOf("10,3"))
-
- // Check valid customization generates expected array.
- val validRes = arrayOf("0,3", "1,0", "4,4")
- val expectedValidRes = intArrayOf(3, 0, 0, 0, 4, 0, 0, 0, 0)
-
- val mockContext = getMockedContextWithStringArrayRes(
- R.array.config_networkSupportedKeepaliveCount,
- "config_networkSupportedKeepaliveCount", validRes)
- val actual = KeepaliveUtils.getSupportedKeepalives(mockContext)
- assertArrayEquals(expectedValidRes, actual)
- }
-
- @Test
- fun testGetSupportedKeepalivesForNetworkCapabilities() {
- // Mock customized supported keepalives for each transport type, and assuming:
- // 3 for cellular,
- // 6 for wifi,
- // 0 for others.
- val cust = IntArray(MAX_TRANSPORT + 1).apply {
- this[TRANSPORT_CELLULAR] = 3
- this[TRANSPORT_WIFI] = 6
- }
-
- val nc = NetworkCapabilities()
- // Check supported keepalives with single transport type.
- nc.transportTypes = intArrayOf(TRANSPORT_CELLULAR)
- assertEquals(3, KeepaliveUtils.getSupportedKeepalivesForNetworkCapabilities(cust, nc))
-
- // Check supported keepalives with multiple transport types.
- nc.transportTypes = intArrayOf(TRANSPORT_WIFI, TRANSPORT_VPN)
- assertEquals(0, KeepaliveUtils.getSupportedKeepalivesForNetworkCapabilities(cust, nc))
-
- // Check supported keepalives with non-customized transport type.
- nc.transportTypes = intArrayOf(TRANSPORT_ETHERNET)
- assertEquals(0, KeepaliveUtils.getSupportedKeepalivesForNetworkCapabilities(cust, nc))
-
- // Check supported keepalives with undefined transport type.
- nc.transportTypes = intArrayOf(MAX_TRANSPORT + 1)
- try {
- KeepaliveUtils.getSupportedKeepalivesForNetworkCapabilities(cust, nc)
- fail("Expected ArrayIndexOutOfBoundsException")
- } catch (expected: ArrayIndexOutOfBoundsException) {
- }
- }
-}
diff --git a/tests/net/java/android/net/util/MultinetworkPolicyTrackerTest.kt b/tests/net/java/android/net/util/MultinetworkPolicyTrackerTest.kt
deleted file mode 100644
index 25aa6266577e..000000000000
--- a/tests/net/java/android/net/util/MultinetworkPolicyTrackerTest.kt
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net.util
-
-import android.content.Context
-import android.content.res.Resources
-import android.net.ConnectivityManager.MULTIPATH_PREFERENCE_HANDOVER
-import android.net.ConnectivityManager.MULTIPATH_PREFERENCE_PERFORMANCE
-import android.net.ConnectivityManager.MULTIPATH_PREFERENCE_RELIABILITY
-import android.net.ConnectivityResources
-import android.net.ConnectivitySettingsManager.NETWORK_AVOID_BAD_WIFI
-import android.net.ConnectivitySettingsManager.NETWORK_METERED_MULTIPATH_PREFERENCE
-import android.net.util.MultinetworkPolicyTracker.ActiveDataSubscriptionIdListener
-import android.provider.Settings
-import android.telephony.SubscriptionInfo
-import android.telephony.SubscriptionManager
-import android.telephony.TelephonyManager
-import android.test.mock.MockContentResolver
-import androidx.test.filters.SmallTest
-import androidx.test.runner.AndroidJUnit4
-import com.android.connectivity.resources.R
-import com.android.internal.util.test.FakeSettingsProvider
-import org.junit.After
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertFalse
-import org.junit.Assert.assertTrue
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.ArgumentCaptor
-import org.mockito.ArgumentMatchers.anyInt
-import org.mockito.ArgumentMatchers.argThat
-import org.mockito.ArgumentMatchers.eq
-import org.mockito.Mockito.any
-import org.mockito.Mockito.doReturn
-import org.mockito.Mockito.mock
-import org.mockito.Mockito.times
-import org.mockito.Mockito.verify
-
-/**
- * Tests for [MultinetworkPolicyTracker].
- *
- * Build, install and run with:
- * atest android.net.util.MultinetworkPolicyTrackerTest
- */
-@RunWith(AndroidJUnit4::class)
-@SmallTest
-class MultinetworkPolicyTrackerTest {
- private val resources = mock(Resources::class.java).also {
- doReturn(R.integer.config_networkAvoidBadWifi).`when`(it).getIdentifier(
- eq("config_networkAvoidBadWifi"), eq("integer"), any())
- doReturn(0).`when`(it).getInteger(R.integer.config_networkAvoidBadWifi)
- }
- private val telephonyManager = mock(TelephonyManager::class.java)
- private val subscriptionManager = mock(SubscriptionManager::class.java).also {
- doReturn(null).`when`(it).getActiveSubscriptionInfo(anyInt())
- }
- private val resolver = MockContentResolver().apply {
- addProvider(Settings.AUTHORITY, FakeSettingsProvider()) }
- private val context = mock(Context::class.java).also {
- doReturn(Context.TELEPHONY_SERVICE).`when`(it)
- .getSystemServiceName(TelephonyManager::class.java)
- doReturn(telephonyManager).`when`(it).getSystemService(Context.TELEPHONY_SERVICE)
- doReturn(subscriptionManager).`when`(it)
- .getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE)
- doReturn(resolver).`when`(it).contentResolver
- doReturn(resources).`when`(it).resources
- doReturn(it).`when`(it).createConfigurationContext(any())
- Settings.Global.putString(resolver, NETWORK_AVOID_BAD_WIFI, "1")
- ConnectivityResources.setResourcesContextForTest(it)
- }
- private val tracker = MultinetworkPolicyTracker(context, null /* handler */)
-
- private fun assertMultipathPreference(preference: Int) {
- Settings.Global.putString(resolver, NETWORK_METERED_MULTIPATH_PREFERENCE,
- preference.toString())
- tracker.updateMeteredMultipathPreference()
- assertEquals(preference, tracker.meteredMultipathPreference)
- }
-
- @After
- fun tearDown() {
- ConnectivityResources.setResourcesContextForTest(null)
- }
-
- @Test
- fun testUpdateMeteredMultipathPreference() {
- assertMultipathPreference(MULTIPATH_PREFERENCE_HANDOVER)
- assertMultipathPreference(MULTIPATH_PREFERENCE_RELIABILITY)
- assertMultipathPreference(MULTIPATH_PREFERENCE_PERFORMANCE)
- }
-
- @Test
- fun testUpdateAvoidBadWifi() {
- Settings.Global.putString(resolver, NETWORK_AVOID_BAD_WIFI, "0")
- assertTrue(tracker.updateAvoidBadWifi())
- assertFalse(tracker.avoidBadWifi)
-
- doReturn(1).`when`(resources).getInteger(R.integer.config_networkAvoidBadWifi)
- assertTrue(tracker.updateAvoidBadWifi())
- assertTrue(tracker.avoidBadWifi)
- }
-
- @Test
- fun testOnActiveDataSubscriptionIdChanged() {
- val testSubId = 1000
- val subscriptionInfo = SubscriptionInfo(testSubId, ""/* iccId */, 1/* iccId */,
- "TMO"/* displayName */, "TMO"/* carrierName */, 1/* nameSource */, 1/* iconTint */,
- "123"/* number */, 1/* roaming */, null/* icon */, "310"/* mcc */, "210"/* mnc */,
- ""/* countryIso */, false/* isEmbedded */, null/* nativeAccessRules */,
- "1"/* cardString */)
- doReturn(subscriptionInfo).`when`(subscriptionManager).getActiveSubscriptionInfo(testSubId)
-
- // Modify avoidBadWifi and meteredMultipathPreference settings value and local variables in
- // MultinetworkPolicyTracker should be also updated after subId changed.
- Settings.Global.putString(resolver, NETWORK_AVOID_BAD_WIFI, "0")
- Settings.Global.putString(resolver, NETWORK_METERED_MULTIPATH_PREFERENCE,
- MULTIPATH_PREFERENCE_PERFORMANCE.toString())
-
- val listenerCaptor = ArgumentCaptor.forClass(
- ActiveDataSubscriptionIdListener::class.java)
- verify(telephonyManager, times(1))
- .registerTelephonyCallback(any(), listenerCaptor.capture())
- val listener = listenerCaptor.value
- listener.onActiveDataSubscriptionIdChanged(testSubId)
-
- // Check it get resource value with test sub id.
- verify(subscriptionManager, times(1)).getActiveSubscriptionInfo(testSubId)
- verify(context).createConfigurationContext(argThat { it.mcc == 310 && it.mnc == 210 })
-
- // Check if avoidBadWifi and meteredMultipathPreference values have been updated.
- assertFalse(tracker.avoidBadWifi)
- assertEquals(MULTIPATH_PREFERENCE_PERFORMANCE, tracker.meteredMultipathPreference)
- }
-}