CTS: Add tests for WifiManager#calculateSignalLevel

Bug: 150236894
Test: atest android.net.wifi.cts.WifiManagerTest#testCalculateSignalLevel
Change-Id: I990dc4d0a0b8d969231eab3c74b9436ee4ef919f
diff --git a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java
index 743454f..020ada8 100644
--- a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java
+++ b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java
@@ -16,6 +16,7 @@
 
 package android.net.wifi.cts;
 
+import static com.google.common.truth.Truth.assertWithMessage;
 
 import android.app.UiAutomation;
 import android.content.BroadcastReceiver;
@@ -423,6 +424,33 @@
         assertTrue(WifiManager.compareSignalLevel(rssiA, rssiB) > 0);
     }
 
+    /**
+     * Test that {@link WifiManager#calculateSignalLevel(int)} returns a value in the range
+     * [0, {@link WifiManager#getMaxSignalLevel()}], and its value is monotonically increasing as
+     * the RSSI increases.
+     */
+    public void testCalculateSignalLevel() {
+        if (!WifiFeature.isWifiSupported(getContext())) {
+            // skip the test if WiFi is not supported
+            return;
+        }
+
+        int maxSignalLevel = mWifiManager.getMaxSignalLevel();
+
+        int prevSignalLevel = 0;
+        for (int rssi = -150; rssi <= 50; rssi++) {
+            int signalLevel = mWifiManager.calculateSignalLevel(rssi);
+
+            // between [0, maxSignalLevel]
+            assertWithMessage("For RSSI=%s", rssi).that(signalLevel).isAtLeast(0);
+            assertWithMessage("For RSSI=%s", rssi).that(signalLevel).isAtMost(maxSignalLevel);
+
+            // calculateSignalLevel(rssi) <= calculateSignalLevel(rssi + 1)
+            assertWithMessage("For RSSI=%s", rssi).that(signalLevel).isAtLeast(prevSignalLevel);
+            prevSignalLevel = signalLevel;
+        }
+    }
+
     private static class TestLocalOnlyHotspotCallback extends WifiManager.LocalOnlyHotspotCallback {
         Object hotspotLock;
         WifiManager.LocalOnlyHotspotReservation reservation = null;