Add API coverage for DataServiceCallback

Test: atest DataServiceCallbackTest
Bug: 220030279
Change-Id: Ia8fc838876d6e69c3362769574b4c23289f38c61
diff --git a/tests/tests/telephony/current/src/android/telephony/cts/DataServiceCallbackTest.java b/tests/tests/telephony/current/src/android/telephony/cts/DataServiceCallbackTest.java
new file mode 100644
index 0000000..1142fef
--- /dev/null
+++ b/tests/tests/telephony/current/src/android/telephony/cts/DataServiceCallbackTest.java
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2022 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.telephony.cts;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.net.InetAddresses;
+import android.net.LinkAddress;
+import android.os.IBinder;
+import android.telephony.data.ApnSetting;
+import android.telephony.data.DataCallResponse;
+import android.telephony.data.DataProfile;
+import android.telephony.data.DataServiceCallback;
+import android.telephony.data.IDataServiceCallback;
+import android.telephony.data.NetworkSliceInfo;
+import android.telephony.data.TrafficDescriptor;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class DataServiceCallbackTest {
+    private static final int RESULT = DataServiceCallback.RESULT_SUCCESS;
+    private static final int ID = 1;
+    private static final int PROTOCOL_TYPE = ApnSetting.PROTOCOL_IP;
+    private static final int MTU_V4 = 1440;
+    private static final int MTU_V6 = 1400;
+    private static final TrafficDescriptor TRAFFIC_DESCRIPTOR = new TrafficDescriptor(
+            "DNN", new byte[]{-105, -92, -104, -29, -4, -110, 92, -108, -119, -122, 3, 51, -48, 110,
+                    78, 71, 10, 69, 78, 84, 69, 82, 80, 82, 73, 83, 69});
+    private static final DataCallResponse DATA_CALL_RESPONSE = new DataCallResponse.Builder()
+            .setCause(0)
+            .setRetryDurationMillis(-1L)
+            .setId(ID)
+            .setLinkStatus(2)
+            .setProtocolType(PROTOCOL_TYPE)
+            .setInterfaceName("IF_NAME")
+            .setAddresses(Arrays.asList(
+                    new LinkAddress(InetAddresses.parseNumericAddress("99.88.77.66"), 0)))
+            .setDnsAddresses(Arrays.asList(InetAddresses.parseNumericAddress("55.66.77.88")))
+            .setGatewayAddresses(Arrays.asList(InetAddresses.parseNumericAddress("11.22.33.44")))
+            .setPcscfAddresses(Arrays.asList(InetAddresses.parseNumericAddress("22.33.44.55")))
+            .setMtuV4(MTU_V4)
+            .setMtuV6(MTU_V6)
+            .setHandoverFailureMode(DataCallResponse.HANDOVER_FAILURE_MODE_DO_FALLBACK)
+            .setPduSessionId(5)
+            .setSliceInfo(new NetworkSliceInfo.Builder()
+                    .setSliceServiceType(NetworkSliceInfo.SLICE_SERVICE_TYPE_EMBB)
+                    .setSliceDifferentiator(1)
+                    .setMappedHplmnSliceDifferentiator(10)
+                    .setMappedHplmnSliceServiceType(NetworkSliceInfo.SLICE_SERVICE_TYPE_MIOT)
+                    .build())
+            .setTrafficDescriptors(Arrays.asList(TRAFFIC_DESCRIPTOR))
+            .build();
+    private static final List<DataCallResponse> DATA_CALL_LIST = Arrays.asList(DATA_CALL_RESPONSE);
+    private static final String APN = "FAKE_APN";
+    private static final DataProfile DATA_PROFILE = new DataProfile.Builder()
+            .setApnSetting(new ApnSetting.Builder()
+                    .setEntryName(APN)
+                    .setApnName(APN)
+                    .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT)
+                    .setAuthType(ApnSetting.AUTH_TYPE_NONE)
+                    .setCarrierEnabled(true)
+                    .setModemCognitive(true)
+                    .setMtuV4(MTU_V4)
+                    .setMtuV6(MTU_V6)
+                    .setNetworkTypeBitmask(ApnSetting.TYPE_DEFAULT)
+                    .setProfileId(ID)
+                    .setPassword("PASSWORD")
+                    .setProtocol(PROTOCOL_TYPE)
+                    .setRoamingProtocol(PROTOCOL_TYPE)
+                    .setUser("USER_NAME")
+                    .build())
+            .setPreferred(true)
+            .setType(DataProfile.TYPE_COMMON)
+            .setTrafficDescriptor(TRAFFIC_DESCRIPTOR)
+            .build();
+
+    DataServiceCallback mDataServiceCallback;
+    int mResult;
+    DataCallResponse mResponse;
+    List<DataCallResponse> mDataCallList;
+    String mApn;
+    DataProfile mDataProfile;
+
+    private class TestDataServiceCallback implements IDataServiceCallback {
+        public void onSetupDataCallComplete(int result, DataCallResponse response) {
+            mResult = result;
+            mResponse = response;
+        }
+
+        public void onDeactivateDataCallComplete(int result) {
+            mResult = result;
+        }
+
+        public void onSetInitialAttachApnComplete(int result) {
+            mResult = result;
+        }
+
+        public void onSetDataProfileComplete(int result) {
+            mResult = result;
+        }
+
+        public void onRequestDataCallListComplete(int result, List<DataCallResponse> dataCallList) {
+            mResult = result;
+            mDataCallList = dataCallList;
+        }
+
+        public void onDataCallListChanged(List<DataCallResponse> dataCallList) {
+            mDataCallList = dataCallList;
+        }
+
+        public void onHandoverStarted(int result) {
+            mResult = result;
+        }
+
+        public void onHandoverCancelled(int result) {
+            mResult = result;
+        }
+
+        public void onApnUnthrottled(String apn) {
+            mApn = apn;
+        }
+
+        public void onDataProfileUnthrottled(DataProfile dataProfile) {
+            mDataProfile = dataProfile;
+        }
+
+        public IBinder asBinder() {
+            return null;
+        }
+    }
+
+    @Before
+    public void setUp() {
+        mDataServiceCallback = new DataServiceCallback(new TestDataServiceCallback());
+    }
+
+    @Test
+    public void testOnSetupDataCallComplete() {
+        mDataServiceCallback.onSetupDataCallComplete(RESULT, DATA_CALL_RESPONSE);
+        assertThat(RESULT).isEqualTo(mResult);
+        assertThat(DATA_CALL_RESPONSE).isEqualTo(mResponse);
+    }
+
+    @Test
+    public void testOnDeactivateDataCallComplete() {
+        mDataServiceCallback.onDeactivateDataCallComplete(RESULT);
+        assertThat(RESULT).isEqualTo(mResult);
+    }
+
+    @Test
+    public void testOnSetInitialAttachApnComplete() {
+        mDataServiceCallback.onSetInitialAttachApnComplete(RESULT);
+        assertThat(RESULT).isEqualTo(mResult);
+    }
+
+    @Test
+    public void testOnSetDataProfileComplete() {
+        mDataServiceCallback.onSetDataProfileComplete(RESULT);
+        assertThat(RESULT).isEqualTo(mResult);
+    }
+
+    @Test
+    public void testOnRequestDataCallListComplete() {
+        mDataServiceCallback.onRequestDataCallListComplete(RESULT, DATA_CALL_LIST);
+        assertThat(RESULT).isEqualTo(mResult);
+        assertThat(DATA_CALL_LIST).isEqualTo(mDataCallList);
+    }
+
+    @Test
+    public void testOnDataCallListChanged() {
+        mDataServiceCallback.onDataCallListChanged(DATA_CALL_LIST);
+        assertThat(DATA_CALL_LIST).isEqualTo(mDataCallList);
+    }
+    @Test
+    public void testOnHandoverStarted() {
+        mDataServiceCallback.onHandoverStarted(RESULT);
+        assertThat(RESULT).isEqualTo(mResult);
+    }
+
+    @Test
+    public void testOnHandoverCancelled() {
+        mDataServiceCallback.onHandoverCancelled(RESULT);
+        assertThat(RESULT).isEqualTo(mResult);
+    }
+
+    @Test
+    public void testOnApnUnthrottled() {
+        mDataServiceCallback.onApnUnthrottled(APN);
+        assertThat(RESULT).isEqualTo(mResult);
+        assertThat(APN).isEqualTo(mApn);
+    }
+
+    @Test
+    public void testOnDataProfileUnthrottled() {
+        mDataServiceCallback.onDataProfileUnthrottled(DATA_PROFILE);
+        assertThat(RESULT).isEqualTo(mResult);
+        assertThat(DATA_PROFILE).isEqualTo(mDataProfile);
+    }
+}