1 /* 2 * Copyright 2021 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.internal.telephony.data; 18 19 import static com.google.common.truth.Truth.assertThat; 20 21 import static org.mockito.Mockito.doReturn; 22 23 import android.net.NetworkCapabilities; 24 import android.net.NetworkRequest; 25 26 import com.android.internal.telephony.TelephonyTest; 27 import com.android.internal.telephony.data.DataNetworkController.NetworkRequestList; 28 import com.android.internal.telephony.flags.FeatureFlags; 29 30 import org.junit.After; 31 import org.junit.Before; 32 import org.junit.Test; 33 import org.mockito.Mockito; 34 35 import java.util.List; 36 37 public class DataUtilsTest extends TelephonyTest { 38 39 private FeatureFlags mFeatureFlags; 40 41 @Before setUp()42 public void setUp() throws Exception { 43 logd("DataUtilsTest +Setup!"); 44 super.setUp(getClass().getSimpleName()); 45 mFeatureFlags = Mockito.mock(FeatureFlags.class); 46 doReturn(true).when(mFeatureFlags).satelliteInternet(); 47 logd("DataUtilsTest -Setup!"); 48 } 49 50 @After tearDown()51 public void tearDown() throws Exception { 52 super.tearDown(); 53 } 54 55 @Test testGetGroupedNetworkRequestList()56 public void testGetGroupedNetworkRequestList() { 57 NetworkRequestList requestList = new NetworkRequestList(); 58 59 int[] netCaps = new int[]{ 60 NetworkCapabilities.NET_CAPABILITY_INTERNET, 61 NetworkCapabilities.NET_CAPABILITY_INTERNET, 62 NetworkCapabilities.NET_CAPABILITY_MMS, 63 NetworkCapabilities.NET_CAPABILITY_MMS, 64 NetworkCapabilities.NET_CAPABILITY_EIMS, 65 NetworkCapabilities.NET_CAPABILITY_ENTERPRISE, 66 NetworkCapabilities.NET_CAPABILITY_ENTERPRISE, 67 NetworkCapabilities.NET_CAPABILITY_ENTERPRISE, 68 NetworkCapabilities.NET_CAPABILITY_IMS, 69 NetworkCapabilities.NET_CAPABILITY_IMS, 70 }; 71 72 int requestId = 0; 73 int enterpriseId = 1; 74 int transportType = NetworkCapabilities.TRANSPORT_CELLULAR; 75 TelephonyNetworkRequest networkRequest; 76 for (int netCap : netCaps) { 77 if (netCap == NetworkCapabilities.NET_CAPABILITY_ENTERPRISE) { 78 networkRequest = new TelephonyNetworkRequest(new NetworkRequest( 79 new NetworkCapabilities.Builder() 80 .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) 81 .addCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE) 82 .addEnterpriseId(enterpriseId).build(), -1, requestId++, 83 NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags); 84 if (enterpriseId == 1) enterpriseId++; 85 } else if (netCap == NetworkCapabilities.NET_CAPABILITY_IMS) { 86 networkRequest = new TelephonyNetworkRequest(new NetworkRequest( 87 new NetworkCapabilities.Builder() 88 .addTransportType(transportType) 89 .addCapability(netCap).build(), -1, requestId++, 90 NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags); 91 transportType = NetworkCapabilities.TRANSPORT_SATELLITE; 92 } else { 93 networkRequest = new TelephonyNetworkRequest(new NetworkRequest( 94 new NetworkCapabilities.Builder() 95 .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) 96 .addCapability(netCap).build(), -1, requestId++, 97 NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags); 98 } 99 requestList.add(networkRequest); 100 } 101 102 assertThat(requestList).hasSize(10); 103 104 List<NetworkRequestList> requestListList = 105 DataUtils.getGroupedNetworkRequestList(requestList, mFeatureFlags); 106 107 assertThat(requestListList).hasSize(7); 108 requestList = requestListList.get(0); 109 assertThat(requestList).hasSize(1); 110 assertThat(requestList.get(0).hasCapability( 111 NetworkCapabilities.NET_CAPABILITY_EIMS)).isTrue(); 112 113 requestList = requestListList.get(1); 114 assertThat(requestList).hasSize(2); 115 assertThat(requestList.get(0).hasCapability( 116 NetworkCapabilities.NET_CAPABILITY_MMS)).isTrue(); 117 assertThat(requestList.get(1).hasCapability( 118 NetworkCapabilities.NET_CAPABILITY_MMS)).isTrue(); 119 120 requestList = requestListList.get(2); 121 assertThat(requestList).hasSize(1); 122 assertThat(requestList.get(0).hasCapability( 123 NetworkCapabilities.NET_CAPABILITY_IMS)).isTrue(); 124 assertThat(requestList.get(0).getNativeNetworkRequest().hasTransport( 125 NetworkCapabilities.TRANSPORT_CELLULAR)).isTrue(); 126 127 requestList = requestListList.get(3); 128 assertThat(requestList).hasSize(1); 129 assertThat(requestList.get(0).hasCapability( 130 NetworkCapabilities.NET_CAPABILITY_IMS)).isTrue(); 131 assertThat(requestList.get(0).getNativeNetworkRequest().hasTransport( 132 NetworkCapabilities.TRANSPORT_SATELLITE)).isTrue(); 133 134 requestList = requestListList.get(4); 135 assertThat(requestList).hasSize(2); 136 assertThat(requestList.get(0).hasCapability( 137 NetworkCapabilities.NET_CAPABILITY_INTERNET)).isTrue(); 138 assertThat(requestList.get(1).hasCapability( 139 NetworkCapabilities.NET_CAPABILITY_INTERNET)).isTrue(); 140 141 requestList = requestListList.get(5); 142 assertThat(requestList).hasSize(1); 143 assertThat(requestList.get(0).hasCapability( 144 NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)).isTrue(); 145 assertThat(requestList.get(0).getCapabilityDifferentiator()).isEqualTo(1); 146 147 requestList = requestListList.get(6); 148 assertThat(requestList).hasSize(2); 149 assertThat(requestList.get(0).hasCapability( 150 NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)).isTrue(); 151 assertThat(requestList.get(0).getCapabilityDifferentiator()).isEqualTo(2); 152 assertThat(requestList.get(1).hasCapability( 153 NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)).isTrue(); 154 assertThat(requestList.get(1).getCapabilityDifferentiator()).isEqualTo(2); 155 } 156 157 @Test testGetNetworkCapabilitiesFromString()158 public void testGetNetworkCapabilitiesFromString() { 159 String normal = " MMS "; 160 assertThat(DataUtils.getNetworkCapabilitiesFromString(normal)).containsExactly( 161 NetworkCapabilities.NET_CAPABILITY_MMS); 162 String normal2 = "MMS|IMS"; 163 assertThat(DataUtils.getNetworkCapabilitiesFromString(normal2)).containsExactly( 164 NetworkCapabilities.NET_CAPABILITY_MMS, NetworkCapabilities.NET_CAPABILITY_IMS); 165 String normal3 = " MMS |IMS "; 166 assertThat(DataUtils.getNetworkCapabilitiesFromString(normal3)).containsExactly( 167 NetworkCapabilities.NET_CAPABILITY_MMS, NetworkCapabilities.NET_CAPABILITY_IMS); 168 169 String containsUnknown = "MMS |IMS | what"; 170 assertThat(DataUtils.getNetworkCapabilitiesFromString(containsUnknown) 171 .contains(-1)).isTrue(); 172 173 String malFormatted = ""; 174 assertThat(DataUtils.getNetworkCapabilitiesFromString(malFormatted).contains(-1)).isTrue(); 175 String malFormatted2 = " "; 176 assertThat(DataUtils.getNetworkCapabilitiesFromString(malFormatted2).contains(-1)).isTrue(); 177 String malFormatted3 = "MMS |IMS |"; 178 assertThat(DataUtils.getNetworkCapabilitiesFromString(malFormatted3).contains(-1)).isTrue(); 179 String composedDelim = " | ||"; 180 assertThat(DataUtils.getNetworkCapabilitiesFromString(composedDelim).contains(-1)).isTrue(); 181 String malFormatted4 = "mms||ims"; 182 assertThat(DataUtils.getNetworkCapabilitiesFromString(malFormatted4).contains(-1)).isTrue(); 183 } 184 185 } 186