aboutsummaryrefslogtreecommitdiff
path: root/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java')
-rw-r--r--tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java208
1 files changed, 193 insertions, 15 deletions
diff --git a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
index f6ed2e24df..edfd6105ad 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
@@ -53,7 +53,9 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.anyVararg;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
@@ -72,7 +74,9 @@ import android.os.Handler;
import android.os.ICancellationSignal;
import android.os.Looper;
import android.os.Message;
+import android.os.PersistableBundle;
import android.os.ResultReceiver;
+import android.telephony.CarrierConfigManager;
import android.telephony.Rlog;
import android.telephony.satellite.ISatelliteDatagramCallback;
import android.telephony.satellite.ISatelliteProvisionStateCallback;
@@ -84,7 +88,9 @@ import android.telephony.satellite.SatelliteManager;
import android.telephony.satellite.SatelliteManager.SatelliteException;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import android.util.Pair;
+import com.android.internal.R;
import com.android.internal.telephony.IIntegerConsumer;
import com.android.internal.telephony.IVoidConsumer;
import com.android.internal.telephony.Phone;
@@ -92,6 +98,7 @@ import com.android.internal.telephony.TelephonyTest;
import com.android.internal.telephony.satellite.metrics.ControllerMetricsStats;
import com.android.internal.telephony.satellite.metrics.ProvisionMetricsStats;
import com.android.internal.telephony.satellite.metrics.SessionMetricsStats;
+import com.android.internal.telephony.subscription.SubscriptionManagerService;
import org.junit.After;
import org.junit.Before;
@@ -107,6 +114,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.Executor;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
@@ -114,11 +122,17 @@ import java.util.concurrent.TimeUnit;
@TestableLooper.RunWithLooper
public class SatelliteControllerTest extends TelephonyTest {
private static final String TAG = "SatelliteControllerTest";
+
+ private static final int EVENT_DEVICE_CONFIG_CHANGED = 29;
+
private static final long TIMEOUT = 500;
private static final int SUB_ID = 0;
+ private static final int SUB_ID1 = 1;
private static final int MAX_BYTES_PER_OUT_GOING_DATAGRAM = 339;
private static final String TEST_SATELLITE_TOKEN = "TEST_SATELLITE_TOKEN";
private static final String TEST_NEXT_SATELLITE_TOKEN = "TEST_NEXT_SATELLITE_TOKEN";
+ private static final String[] EMPTY_SATELLITE_SERVICES_SUPPORTED_BY_PROVIDERS_STRING_ARRAY = {};
+ private static final int[] ACTIVE_SUB_IDS = {SUB_ID};
private TestSatelliteController mSatelliteControllerUT;
private TestSharedPreferences mSharedPreferences;
@@ -130,6 +144,7 @@ public class SatelliteControllerTest extends TelephonyTest {
@Mock private ControllerMetricsStats mMockControllerMetricsStats;
@Mock private ProvisionMetricsStats mMockProvisionMetricsStats;
@Mock private SessionMetricsStats mMockSessionMetricsStats;
+ @Mock private SubscriptionManagerService mMockSubscriptionManagerService;
private List<Integer> mIIntegerConsumerResults = new ArrayList<>();
@Mock private ISatelliteTransmissionUpdateCallback mStartTransmissionUpdateCallback;
@Mock private ISatelliteTransmissionUpdateCallback mStopTransmissionUpdateCallback;
@@ -215,6 +230,7 @@ public class SatelliteControllerTest extends TelephonyTest {
private ResultReceiver mIsSatelliteEnabledReceiver = new ResultReceiver(null) {
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
+ logd("mIsSatelliteEnabledReceiver: resultCode=" + resultCode);
mQueriedIsSatelliteEnabledResultCode = resultCode;
if (resultCode == SATELLITE_ERROR_NONE) {
if (resultData.containsKey(KEY_SATELLITE_ENABLED)) {
@@ -224,7 +240,6 @@ public class SatelliteControllerTest extends TelephonyTest {
mQueriedIsSatelliteEnabled = false;
}
} else {
- logd("mIsSatelliteEnableReceiver: resultCode=" + resultCode);
mQueriedIsSatelliteEnabled = false;
}
try {
@@ -343,6 +358,9 @@ public class SatelliteControllerTest extends TelephonyTest {
}
};
+ private List<Pair<Executor, CarrierConfigManager.CarrierConfigChangeListener>>
+ mCarrierConfigChangedListenerList = new ArrayList<>();
+ private PersistableBundle mCarrierConfigBundle;
@Before
public void setUp() throws Exception {
@@ -364,6 +382,25 @@ public class SatelliteControllerTest extends TelephonyTest {
mMockProvisionMetricsStats);
replaceInstance(SessionMetricsStats.class, "sInstance", null,
mMockSessionMetricsStats);
+ replaceInstance(SubscriptionManagerService.class, "sInstance", null,
+ mMockSubscriptionManagerService);
+
+ mContextFixture.putStringArrayResource(
+ R.array.config_satellite_services_supported_by_providers,
+ EMPTY_SATELLITE_SERVICES_SUPPORTED_BY_PROVIDERS_STRING_ARRAY);
+ doReturn(ACTIVE_SUB_IDS).when(mMockSubscriptionManagerService).getActiveSubIdList(true);
+
+ mCarrierConfigBundle = mContextFixture.getCarrierConfigBundle();
+ doReturn(mCarrierConfigBundle)
+ .when(mCarrierConfigManager).getConfigForSubId(anyInt(), anyVararg());
+ doAnswer(invocation -> {
+ Executor executor = invocation.getArgument(0);
+ CarrierConfigManager.CarrierConfigChangeListener listener = invocation.getArgument(1);
+ mCarrierConfigChangedListenerList.add(new Pair<>(executor, listener));
+ return null;
+ }).when(mCarrierConfigManager).registerCarrierConfigChangeListener(
+ any(Executor.class),
+ any(CarrierConfigManager.CarrierConfigChangeListener.class));
mSharedPreferences = new TestSharedPreferences();
when(mContext.getSharedPreferences(anyString(), anyInt())).thenReturn(mSharedPreferences);
@@ -586,18 +623,39 @@ public class SatelliteControllerTest extends TelephonyTest {
processAllMessages();
verifySatelliteProvisioned(true, SATELLITE_ERROR_NONE);
+ // Successfully enable satellite
+ mIIntegerConsumerResults.clear();
+ mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled = false;
+ setUpResponseForRequestSatelliteEnabled(true, false, SATELLITE_ERROR_NONE);
+ mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer);
+ processAllMessages();
+ assertTrue(waitForIIntegerConsumerResult(1));
+ assertEquals(SATELLITE_ERROR_NONE, (long) mIIntegerConsumerResults.get(0));
+ verifySatelliteEnabled(true, SATELLITE_ERROR_NONE);
+ assertTrue(mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled);
+ assertEquals(
+ SATELLITE_MODE_ENABLED_TRUE, mSatelliteControllerUT.satelliteModeSettingValue);
+ verify(mMockSatelliteSessionController, times(1)).onSatelliteEnabledStateChanged(eq(true));
+ verify(mMockSatelliteSessionController, times(2)).setDemoMode(eq(false));
+ verify(mMockDatagramController, times(2)).setDemoMode(eq(false));
+ verify(mMockPointingAppController).startPointingUI(eq(false));
+ verify(mMockControllerMetricsStats, times(1)).onSatelliteEnabled();
+ verify(mMockControllerMetricsStats, times(1)).reportServiceEnablementSuccessCount();
+
// Successfully disable satellite when radio is turned off.
mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled = false;
setUpResponseForRequestSatelliteEnabled(false, false, SATELLITE_ERROR_NONE);
setRadioPower(false);
processAllMessages();
+ sendSatelliteModemStateChangedEvent(SATELLITE_MODEM_STATE_OFF, null);
+ processAllMessages();
verifySatelliteEnabled(false, SATELLITE_ERROR_NONE);
assertTrue(mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled);
assertEquals(
SATELLITE_MODE_ENABLED_FALSE, mSatelliteControllerUT.satelliteModeSettingValue);
verify(mMockSatelliteSessionController, times(2)).onSatelliteEnabledStateChanged(eq(false));
- verify(mMockSatelliteSessionController, times(2)).setDemoMode(eq(false));
- verify(mMockDatagramController, times(2)).setDemoMode(eq(false));
+ verify(mMockSatelliteSessionController, times(3)).setDemoMode(eq(false));
+ verify(mMockDatagramController, times(3)).setDemoMode(eq(false));
verify(mMockControllerMetricsStats, times(1)).onSatelliteDisabled();
// Fail to enable satellite when radio is off.
@@ -615,6 +673,7 @@ public class SatelliteControllerTest extends TelephonyTest {
// Fail to enable satellite with an error response from modem when radio is on.
mIIntegerConsumerResults.clear();
+ clearInvocations(mMockPointingAppController);
mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled = false;
setUpResponseForRequestSatelliteEnabled(true, false, SATELLITE_INVALID_MODEM_STATE);
mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer);
@@ -638,14 +697,14 @@ public class SatelliteControllerTest extends TelephonyTest {
assertTrue(mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled);
assertEquals(SATELLITE_MODE_ENABLED_TRUE, mSatelliteControllerUT.satelliteModeSettingValue);
verify(mMockPointingAppController).startPointingUI(eq(false));
- verify(mMockSatelliteSessionController, times(1)).onSatelliteEnabledStateChanged(eq(true));
- verify(mMockSatelliteSessionController, times(3)).setDemoMode(eq(false));
- verify(mMockDatagramController, times(3)).setDemoMode(eq(false));
- verify(mMockControllerMetricsStats, times(1)).onSatelliteEnabled();
- verify(mMockControllerMetricsStats, times(1)).reportServiceEnablementSuccessCount();
- verify(mMockSessionMetricsStats, times(2)).setInitializationResult(anyInt());
- verify(mMockSessionMetricsStats, times(2)).setRadioTechnology(anyInt());
- verify(mMockSessionMetricsStats, times(2)).reportSessionMetrics();
+ verify(mMockSatelliteSessionController, times(2)).onSatelliteEnabledStateChanged(eq(true));
+ verify(mMockSatelliteSessionController, times(4)).setDemoMode(eq(false));
+ verify(mMockDatagramController, times(4)).setDemoMode(eq(false));
+ verify(mMockControllerMetricsStats, times(2)).onSatelliteEnabled();
+ verify(mMockControllerMetricsStats, times(2)).reportServiceEnablementSuccessCount();
+ verify(mMockSessionMetricsStats, times(3)).setInitializationResult(anyInt());
+ verify(mMockSessionMetricsStats, times(3)).setRadioTechnology(anyInt());
+ verify(mMockSessionMetricsStats, times(3)).reportSessionMetrics();
// Successfully enable satellite when it is already enabled.
mIIntegerConsumerResults.clear();
@@ -663,7 +722,7 @@ public class SatelliteControllerTest extends TelephonyTest {
assertEquals(SATELLITE_INVALID_ARGUMENTS, (long) mIIntegerConsumerResults.get(0));
verifySatelliteEnabled(true, SATELLITE_ERROR_NONE);
- // Disable satellite.
+ // Successfully disable satellite.
mIIntegerConsumerResults.clear();
setUpResponseForRequestSatelliteEnabled(false, false, SATELLITE_ERROR_NONE);
mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, false, false, mIIntegerConsumer);
@@ -1412,13 +1471,128 @@ public class SatelliteControllerTest extends TelephonyTest {
processAllMessages();
assertTrue(waitForIIntegerConsumerResult(1));
assertEquals(SATELLITE_INVALID_MODEM_STATE, (long) mIIntegerConsumerResults.get(0));
+ }
+ @Test
+ public void testSupportedSatelliteServices() {
+ List<String> satellitePlmnList = mSatelliteControllerUT.getSatellitePlmnList();
+ assertEquals(EMPTY_SATELLITE_SERVICES_SUPPORTED_BY_PROVIDERS_STRING_ARRAY.length,
+ satellitePlmnList.size());
+ List<Integer> supportedSatelliteServices =
+ mSatelliteControllerUT.getSupportedSatelliteServices(SUB_ID, "00101");
+ assertTrue(supportedSatelliteServices.isEmpty());
+
+ String[] satellitePlmnArray = {"00101", "00102"};
+ String[] satelliteServicesSupportedByProviderStrArray = {"00101:1,2", "00102:2,3"};
+ int[] expectedSupportedServices1 = {1, 2};
+ int[] expectedSupportedServices2 = {2, 3};
+
+ mContextFixture.putStringArrayResource(
+ R.array.config_satellite_services_supported_by_providers,
+ satelliteServicesSupportedByProviderStrArray);
+ TestSatelliteController testSatelliteController =
+ new TestSatelliteController(mContext, Looper.myLooper());
+
+ satellitePlmnList = testSatelliteController.getSatellitePlmnList();
+ assertTrue(Arrays.equals(satellitePlmnArray, satellitePlmnList.stream().toArray()));
+
+ supportedSatelliteServices =
+ testSatelliteController.getSupportedSatelliteServices(SUB_ID, "00101");
+ assertNotNull(supportedSatelliteServices);
+ assertTrue(Arrays.equals(expectedSupportedServices1,
+ supportedSatelliteServices.stream()
+ .mapToInt(Integer::intValue)
+ .toArray()));
+
+ supportedSatelliteServices =
+ testSatelliteController.getSupportedSatelliteServices(SUB_ID, "00102");
+ assertNotNull(supportedSatelliteServices);
+ assertTrue(Arrays.equals(expectedSupportedServices2,
+ supportedSatelliteServices.stream()
+ .mapToInt(Integer::intValue)
+ .toArray()));
+
+ // Carrier config changed
+ int[] expectedSupportedServices3 = {2};
+ int[] supportedServices = {1, 3};
+ PersistableBundle carrierSupportedSatelliteServicesPerProvider = new PersistableBundle();
+ carrierSupportedSatelliteServicesPerProvider.putIntArray(
+ "00102", expectedSupportedServices3);
+ carrierSupportedSatelliteServicesPerProvider.putIntArray("00103", supportedServices);
+ mCarrierConfigBundle.putPersistableBundle(CarrierConfigManager
+ .KEY_CARRIER_SUPPORTED_SATELLITE_SERVICES_PER_PROVIDER_BUNDLE,
+ carrierSupportedSatelliteServicesPerProvider);
+ for (Pair<Executor, CarrierConfigManager.CarrierConfigChangeListener> pair
+ : mCarrierConfigChangedListenerList) {
+ pair.first.execute(() -> pair.second.onCarrierConfigChanged(
+ /*slotIndex*/ 0, /*subId*/ SUB_ID, /*carrierId*/ 0, /*specificCarrierId*/ 0)
+ );
+ }
+ processAllMessages();
+
+ supportedSatelliteServices =
+ testSatelliteController.getSupportedSatelliteServices(SUB_ID, "00101");
+ assertNotNull(supportedSatelliteServices);
+ assertTrue(Arrays.equals(expectedSupportedServices1,
+ supportedSatelliteServices.stream()
+ .mapToInt(Integer::intValue)
+ .toArray()));
+
+ supportedSatelliteServices =
+ testSatelliteController.getSupportedSatelliteServices(SUB_ID, "00102");
+ assertNotNull(supportedSatelliteServices);
+ assertTrue(Arrays.equals(expectedSupportedServices3,
+ supportedSatelliteServices.stream()
+ .mapToInt(Integer::intValue)
+ .toArray()));
+
+ supportedSatelliteServices =
+ mSatelliteControllerUT.getSupportedSatelliteServices(SUB_ID, "00103");
+ assertTrue(supportedSatelliteServices.isEmpty());
+
+ // Subscriptions changed
+ int[] newActiveSubIds = {SUB_ID1};
+ doReturn(newActiveSubIds).when(mMockSubscriptionManagerService).getActiveSubIdList(true);
+ for (Pair<Executor, CarrierConfigManager.CarrierConfigChangeListener> pair
+ : mCarrierConfigChangedListenerList) {
+ pair.first.execute(() -> pair.second.onCarrierConfigChanged(
+ /*slotIndex*/ 0, /*subId*/ SUB_ID, /*carrierId*/ 0, /*specificCarrierId*/ 0)
+ );
+ }
+ processAllMessages();
+
+ supportedSatelliteServices =
+ testSatelliteController.getSupportedSatelliteServices(SUB_ID, "00101");
+ assertTrue(supportedSatelliteServices.isEmpty());
+ supportedSatelliteServices =
+ testSatelliteController.getSupportedSatelliteServices(SUB_ID, "00102");
+ assertTrue(supportedSatelliteServices.isEmpty());
+
+ supportedSatelliteServices =
+ testSatelliteController.getSupportedSatelliteServices(SUB_ID1, "00101");
+ assertNotNull(supportedSatelliteServices);
+ assertTrue(Arrays.equals(expectedSupportedServices1,
+ supportedSatelliteServices.stream()
+ .mapToInt(Integer::intValue)
+ .toArray()));
+
+ supportedSatelliteServices =
+ testSatelliteController.getSupportedSatelliteServices(SUB_ID1, "00102");
+ assertNotNull(supportedSatelliteServices);
+ assertTrue(Arrays.equals(expectedSupportedServices3,
+ supportedSatelliteServices.stream()
+ .mapToInt(Integer::intValue)
+ .toArray()));
+
+ supportedSatelliteServices =
+ testSatelliteController.getSupportedSatelliteServices(SUB_ID1, "00103");
+ assertTrue(supportedSatelliteServices.isEmpty());
}
private void resetSatelliteControllerUTEnabledState() {
logd("resetSatelliteControllerUTEnabledState");
setUpResponseForRequestIsSatelliteSupported(false, SATELLITE_RADIO_NOT_AVAILABLE);
- doReturn(true).when(mMockSatelliteModemInterface)
+ doNothing().when(mMockSatelliteModemInterface)
.setSatelliteServicePackageName(anyString());
mSatelliteControllerUT.setSatelliteServicePackageName("TestSatelliteService");
processAllMessages();
@@ -1438,7 +1612,7 @@ public class SatelliteControllerTest extends TelephonyTest {
// Reset all cached states
setUpResponseForRequestIsSatelliteSupported(false, SATELLITE_RADIO_NOT_AVAILABLE);
- doReturn(true).when(mMockSatelliteModemInterface)
+ doNothing().when(mMockSatelliteModemInterface)
.setSatelliteServicePackageName(anyString());
mSatelliteControllerUT.setSatelliteServicePackageName("TestSatelliteService");
processAllMessages();
@@ -1455,7 +1629,8 @@ public class SatelliteControllerTest extends TelephonyTest {
private void resetSatelliteControllerUTToOffAndProvisionedState() {
resetSatelliteControllerUTToSupportedAndProvisionedState();
- sendSatelliteModemStateChangedEvent(SATELLITE_MODEM_STATE_OFF, null);
+ // Clean up pending resources and move satellite controller to OFF state.
+ sendSatelliteModemStateChangedEvent(SATELLITE_MODEM_STATE_UNAVAILABLE, null);
processAllMessages();
verifySatelliteEnabled(false, SATELLITE_ERROR_NONE);
}
@@ -1568,6 +1743,9 @@ public class SatelliteControllerTest extends TelephonyTest {
SatelliteException exception = (error == SATELLITE_ERROR_NONE)
? null : new SatelliteException(error);
doAnswer(invocation -> {
+ if (exception == null && !enabled) {
+ sendSatelliteModemStateChangedEvent(SATELLITE_MODEM_STATE_OFF, null);
+ }
Message message = (Message) invocation.getArguments()[2];
AsyncResult.forMessage(message, null, exception);
message.sendToTarget();