Merge "Add UT cases for new introduced SignalStrengthUpdateRequest"
diff --git a/tests/telephonytests/src/com/android/internal/telephony/SignalStrengthUpdateRequestTest.java b/tests/telephonytests/src/com/android/internal/telephony/SignalStrengthUpdateRequestTest.java
new file mode 100644
index 0000000..9c29eda
--- /dev/null
+++ b/tests/telephonytests/src/com/android/internal/telephony/SignalStrengthUpdateRequestTest.java
@@ -0,0 +1,125 @@
+/*
+ * 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 com.android.internal.telephony;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.os.Parcel;
+import android.telephony.AccessNetworkConstants;
+import android.telephony.SignalStrengthUpdateRequest;
+import android.telephony.SignalThresholdInfo;
+
+import androidx.test.filters.SmallTest;
+
+import junit.framework.TestCase;
+
+import org.junit.Test;
+
+import java.util.Collection;
+import java.util.List;
+
+public class SignalStrengthUpdateRequestTest extends TestCase {
+
+    private SignalThresholdInfo mRssiInfo = new SignalThresholdInfo.Builder()
+            .setRadioAccessNetworkType(AccessNetworkConstants.AccessNetworkType.GERAN)
+            .setSignalMeasurementType(SignalThresholdInfo.SIGNAL_MEASUREMENT_TYPE_RSSI)
+            .setThresholds(new int[]{-109, -103, -97, -89})
+            .build();
+
+    private SignalThresholdInfo mRscpInfo = new SignalThresholdInfo.Builder()
+            .setRadioAccessNetworkType(AccessNetworkConstants.AccessNetworkType.UTRAN)
+            .setSignalMeasurementType(SignalThresholdInfo.SIGNAL_MEASUREMENT_TYPE_RSCP)
+            .setThresholds(new int[]{-115, -105, -95, -85})
+            .build();
+
+    @Test
+    @SmallTest
+    public void testPublicConstructorWithInvalidParam() {
+        // null Collection
+        validateBuilderWithInvalidParam(null);
+
+        // duplication of SignalMeasurementType in Collection
+        validateBuilderWithInvalidParam(List.of(mRssiInfo, mRssiInfo));
+
+        // The following two cases can not turn on until the implement is ready:
+        // empty Collections
+        // validateBuilderWithInvalidParam(List.of());
+    }
+
+    @Test
+    @SmallTest
+    public void testPublicConstructorWithValidParam() {
+        Collection<SignalThresholdInfo> infos = List.of(mRssiInfo, mRscpInfo);
+        SignalStrengthUpdateRequest request = new SignalStrengthUpdateRequest.Builder()
+                .setSignalThresholdInfos(infos).setReportingRequestedWhileIdle(false).build();
+        assertFalse(request.isReportingRequestedWhileIdle());
+        assertFalse(request.isSystemThresholdReportingRequestedWhileIdle());
+        assertEquals(infos, request.getSignalThresholdInfos());
+    }
+
+    @Test
+    @SmallTest
+    public void testParcel() {
+        Collection<SignalThresholdInfo> infos = List.of(mRssiInfo, mRscpInfo);
+        SignalStrengthUpdateRequest request = new SignalStrengthUpdateRequest.Builder()
+                .setSignalThresholdInfos(infos).setReportingRequestedWhileIdle(true).build();
+
+        Parcel p = Parcel.obtain();
+        request.writeToParcel(p, 0);
+        p.setDataPosition(0);
+
+        SignalStrengthUpdateRequest newRequest =
+                SignalStrengthUpdateRequest.CREATOR.createFromParcel(p);
+        assertThat(newRequest).isEqualTo(request);
+    }
+
+    @Test
+    @SmallTest
+    public void testEquals() {
+        Collection<SignalThresholdInfo> infos1 = List.of(mRssiInfo, mRscpInfo);
+        SignalStrengthUpdateRequest request1 = new SignalStrengthUpdateRequest.Builder()
+                .setSignalThresholdInfos(infos1).setReportingRequestedWhileIdle(false).build();
+
+        assertTrue(request1.equals(request1));
+
+        // Ordering does not matter
+        Collection<SignalThresholdInfo> infos2 = List.of(mRscpInfo, mRssiInfo);
+        SignalStrengthUpdateRequest request2 = new SignalStrengthUpdateRequest.Builder()
+                .setSignalThresholdInfos(infos2).setReportingRequestedWhileIdle(false).build();
+        assertTrue(request1.equals(request2));
+
+        SignalStrengthUpdateRequest request3 = new SignalStrengthUpdateRequest.Builder()
+                .setSignalThresholdInfos(infos1).setReportingRequestedWhileIdle(true).build();
+        assertFalse(request1.equals(request3));
+
+        SignalStrengthUpdateRequest request4 = new SignalStrengthUpdateRequest.Builder()
+                .setSignalThresholdInfos(infos1).setReportingRequestedWhileIdle(false)
+                .setSystemThresholdReportingRequestedWhileIdle(true).build();
+
+        // return false if the object is not SignalStrengthUpdateRequest
+        assertFalse(request1.equals("test"));
+    }
+
+    private void validateBuilderWithInvalidParam(Collection<SignalThresholdInfo> infos) {
+        try {
+            new SignalStrengthUpdateRequest.Builder()
+                    .setSignalThresholdInfos(infos).setReportingRequestedWhileIdle(false).build();
+            fail("Exception expected");
+        } catch (IllegalArgumentException | NullPointerException expected) {
+        }
+    }
+}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/SignalThresholdInfoTest.java b/tests/telephonytests/src/com/android/internal/telephony/SignalThresholdInfoTest.java
index 0f0a031..d58a680 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/SignalThresholdInfoTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/SignalThresholdInfoTest.java
@@ -165,7 +165,7 @@
                 .setSignalMeasurementType(SignalThresholdInfo.SIGNAL_MEASUREMENT_TYPE_RSSI)
                 .setHysteresisMs(0)
                 .setHysteresisDb(0)
-                .setThresholds(new int[]{})
+                .setThresholdsUnlimited(new int[]{})
                 .setIsEnabled(false)
                 .build());
         stList.add(new SignalThresholdInfo.Builder()
@@ -249,6 +249,16 @@
         buildWithInvalidParameterThrowException(AccessNetworkConstants.AccessNetworkType.GERAN,
                 SignalThresholdInfo.SIGNAL_MEASUREMENT_TYPE_RSSI, null);
 
+        // Empty thresholds
+        buildWithInvalidParameterThrowException(AccessNetworkConstants.AccessNetworkType.GERAN,
+                SignalThresholdInfo.SIGNAL_MEASUREMENT_TYPE_RSSI, new int[]{});
+
+
+        // Too long thresholds array
+        buildWithInvalidParameterThrowException(AccessNetworkConstants.AccessNetworkType.GERAN,
+                SignalThresholdInfo.SIGNAL_MEASUREMENT_TYPE_RSSI,
+                new int[]{-100, -90, -70, -60, -58});
+
         // Thresholds value out of range
         for (int signalMeasurementType : INVALID_THRESHOLDS_MAP.keySet()) {
             List<Integer> invalidThresholds = INVALID_THRESHOLDS_MAP.get(signalMeasurementType);