aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-05-11 07:59:22 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-05-11 07:59:22 +0000
commita76da014cf7091f98d67ccda16271cb9de69cad0 (patch)
tree9545b45aea6afccc878e7ef8df88ff7e30ed52b2
parentb9d73488a5b979c142dc0dacf4b9cdb2b97f3e0c (diff)
parent79fa8e0139de6f5eaa4ad9871ffb455ed77d0033 (diff)
downloadtelephony-a76da014cf7091f98d67ccda16271cb9de69cad0.tar.gz
Snap for 10110612 from 79fa8e0139de6f5eaa4ad9871ffb455ed77d0033 to mainline-tzdata5-release
Change-Id: I309080480496540849b6045eaa9092933c6eae48
-rw-r--r--src/java/com/android/internal/telephony/satellite/DatagramReceiver.java1
-rw-r--r--src/java/com/android/internal/telephony/satellite/SatelliteController.java20
-rw-r--r--src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java11
-rw-r--r--tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java414
4 files changed, 410 insertions, 36 deletions
diff --git a/src/java/com/android/internal/telephony/satellite/DatagramReceiver.java b/src/java/com/android/internal/telephony/satellite/DatagramReceiver.java
index 20afdfb0ee..06eede122a 100644
--- a/src/java/com/android/internal/telephony/satellite/DatagramReceiver.java
+++ b/src/java/com/android/internal/telephony/satellite/DatagramReceiver.java
@@ -404,6 +404,7 @@ public class DatagramReceiver extends Handler {
deleteDatagram(argument.datagramId);
sInstance.mPendingAckCountHashMap.remove(argument.datagramId);
}
+ break;
}
default:
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteController.java b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
index 6fd13c8e71..0ca6f8eef6 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteController.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
@@ -671,7 +671,6 @@ public class SatelliteController extends Handler {
if (mNeedsSatellitePointing) {
mPointingAppController.startPointingUI(false);
}
-
evaluateToSendSatelliteEnabledSuccess();
} else {
synchronized (mSatelliteEnabledRequestLock) {
@@ -687,9 +686,12 @@ public class SatelliteController extends Handler {
resetSatelliteEnabledRequest();
setSettingsKeyForSatelliteMode(SATELLITE_MODE_ENABLED_FALSE);
+ setDemoModeEnabled(argument.enableDemoMode);
+ synchronized (mIsSatelliteEnabledLock) {
+ mIsSatelliteEnabled = argument.enableSatellite;
+ }
// If satellite is disabled, send success to callback immediately
argument.callback.accept(error);
- setIsDemoModeEnabled(argument.enableDemoMode);
updateSatelliteEnabledState(
argument.enableSatellite, "EVENT_SET_SATELLITE_ENABLED_DONE");
}
@@ -2187,6 +2189,8 @@ public class SatelliteController extends Handler {
logd("handleEventSatelliteModemStateChanged: state=" + state);
if (state == SatelliteManager.SATELLITE_MODEM_STATE_OFF
|| state == SatelliteManager.SATELLITE_MODEM_STATE_UNAVAILABLE) {
+ setSettingsKeyForSatelliteMode(SATELLITE_MODE_ENABLED_FALSE);
+ setDemoModeEnabled(false);
updateSatelliteEnabledState(
false, "handleEventSatelliteModemStateChanged");
cleanUpResources(state);
@@ -2223,10 +2227,14 @@ public class SatelliteController extends Handler {
if (areAllRadiosDisabled() && (mSatelliteEnabledRequest != null)
&& mWaitingForRadioDisabled) {
logd("Sending success to callback that sent enable satellite request");
- setIsDemoModeEnabled(mSatelliteEnabledRequest.enableDemoMode);
- updateSatelliteEnabledState(mSatelliteEnabledRequest.enableSatellite,
- "EVENT_SET_SATELLITE_ENABLED_DONE");
+ setDemoModeEnabled(mSatelliteEnabledRequest.enableDemoMode);
+ synchronized (mIsSatelliteEnabledLock) {
+ mIsSatelliteEnabled = mSatelliteEnabledRequest.enableSatellite;
+ }
mSatelliteEnabledRequest.callback.accept(SatelliteManager.SATELLITE_ERROR_NONE);
+ updateSatelliteEnabledState(
+ mSatelliteEnabledRequest.enableSatellite,
+ "EVENT_SET_SATELLITE_ENABLED_DONE");
mSatelliteEnabledRequest = null;
mWaitingForRadioDisabled = false;
}
@@ -2254,7 +2262,7 @@ public class SatelliteController extends Handler {
}
}
- private void setIsDemoModeEnabled(boolean enabled) {
+ private void setDemoModeEnabled(boolean enabled) {
mIsDemoModeEnabled = enabled;
mDatagramController.setDemoMode(mIsDemoModeEnabled);
}
diff --git a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
index 8ea94c6e6b..d898bb3b39 100644
--- a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
+++ b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
@@ -3565,7 +3565,7 @@ public class SubscriptionManagerService extends ISub.Stub {
}
UserHandle userHandle = UserHandle.of(subInfo.getUserId());
- log("getSubscriptionUserHandle subId = " + subId + " userHandle = " + userHandle);
+ logv("getSubscriptionUserHandle subId = " + subId + " userHandle = " + userHandle);
if (userHandle.getIdentifier() == UserHandle.USER_NULL) {
return null;
}
@@ -3936,6 +3936,15 @@ public class SubscriptionManagerService extends ISub.Stub {
}
/**
+ * Log verbose messages.
+ *
+ * @param s verbose messages
+ */
+ private void logv(@NonNull String s) {
+ Rlog.v(LOG_TAG, s);
+ }
+
+ /**
* Dump the state of {@link SubscriptionManagerService}.
*
* @param fd File descriptor
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 63eb656103..180ea8337a 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
@@ -27,7 +27,10 @@ import static android.telephony.satellite.SatelliteManager.SATELLITE_ERROR_NONE;
import static android.telephony.satellite.SatelliteManager.SATELLITE_INVALID_ARGUMENTS;
import static android.telephony.satellite.SatelliteManager.SATELLITE_INVALID_MODEM_STATE;
import static android.telephony.satellite.SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE;
+import static android.telephony.satellite.SatelliteManager.SATELLITE_MODEM_STATE_OFF;
+import static android.telephony.satellite.SatelliteManager.SATELLITE_MODEM_STATE_UNAVAILABLE;
import static android.telephony.satellite.SatelliteManager.SATELLITE_NOT_SUPPORTED;
+import static android.telephony.satellite.SatelliteManager.SATELLITE_NO_RESOURCES;
import static android.telephony.satellite.SatelliteManager.SATELLITE_RADIO_NOT_AVAILABLE;
import static android.telephony.satellite.SatelliteManager.SATELLITE_REQUEST_IN_PROGRESS;
import static android.telephony.satellite.SatelliteManager.SATELLITE_SERVICE_NOT_PROVISIONED;
@@ -46,10 +49,12 @@ import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.annotation.NonNull;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.AsyncResult;
@@ -59,16 +64,22 @@ import android.os.Looper;
import android.os.Message;
import android.os.ResultReceiver;
import android.telephony.Rlog;
+import android.telephony.satellite.ISatelliteDatagramCallback;
+import android.telephony.satellite.ISatelliteProvisionStateCallback;
+import android.telephony.satellite.ISatelliteStateCallback;
import android.telephony.satellite.SatelliteCapabilities;
+import android.telephony.satellite.SatelliteDatagram;
import android.telephony.satellite.SatelliteManager;
import android.telephony.satellite.SatelliteManager.SatelliteException;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import com.android.internal.telephony.IIntegerConsumer;
+import com.android.internal.telephony.IVoidConsumer;
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 org.junit.After;
import org.junit.Before;
@@ -77,9 +88,11 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Semaphore;
@@ -102,14 +115,15 @@ public class SatelliteControllerTest extends TelephonyTest {
@Mock private PointingAppController mMockPointingAppController;
@Mock private ControllerMetricsStats mMockControllerMetricsStats;
@Mock private ProvisionMetricsStats mMockProvisionMetricsStats;
+ @Mock private SessionMetricsStats mMockSessionMetricsStats;
- private int mIIntegerConsumerResult = 0;
+ private List<Integer> mIIntegerConsumerResults = new ArrayList<>();
private Semaphore mIIntegerConsumerSemaphore = new Semaphore(0);
private IIntegerConsumer mIIntegerConsumer = new IIntegerConsumer.Stub() {
@Override
public void accept(int result) {
logd("mIIntegerConsumer: result=" + result);
- mIIntegerConsumerResult = result;
+ mIIntegerConsumerResults.add(result);
try {
mIIntegerConsumerSemaphore.release();
} catch (Exception ex) {
@@ -118,7 +132,6 @@ public class SatelliteControllerTest extends TelephonyTest {
}
};
- private boolean mIsSatelliteSupported = true;
private boolean mIsSatelliteServiceSupported = true;
private boolean mIsPointingRequired = true;
private Set<Integer> mSupportedRadioTechnologies = new HashSet<>(Arrays.asList(
@@ -226,6 +239,8 @@ public class SatelliteControllerTest extends TelephonyTest {
mMockControllerMetricsStats);
replaceInstance(ProvisionMetricsStats.class, "sInstance", null,
mMockProvisionMetricsStats);
+ replaceInstance(SessionMetricsStats.class, "sInstance", null,
+ mMockSessionMetricsStats);
mSharedPreferences = new TestSharedPreferences();
when(mContext.getSharedPreferences(anyString(), anyInt())).thenReturn(mSharedPreferences);
@@ -238,6 +253,14 @@ public class SatelliteControllerTest extends TelephonyTest {
doNothing().when(mMockSatelliteSessionController)
.onSatelliteEnabledStateChanged(anyBoolean());
doNothing().when(mMockSatelliteSessionController).setDemoMode(anyBoolean());
+ doNothing().when(mMockControllerMetricsStats).onSatelliteEnabled();
+ doNothing().when(mMockControllerMetricsStats).reportServiceEnablementSuccessCount();
+ doNothing().when(mMockControllerMetricsStats).reportServiceEnablementFailCount();
+ doReturn(mMockSessionMetricsStats)
+ .when(mMockSessionMetricsStats).setInitializationResult(anyInt());
+ doReturn(mMockSessionMetricsStats)
+ .when(mMockSessionMetricsStats).setRadioTechnology(anyInt());
+ doNothing().when(mMockSessionMetricsStats).reportSessionMetrics();
mSatelliteControllerUT = new TestSatelliteController(mContext, Looper.myLooper());
verify(mMockSatelliteModemInterface).registerForSatelliteProvisionStateChanged(
@@ -264,19 +287,29 @@ public class SatelliteControllerTest extends TelephonyTest {
@Test
public void testRequestSatelliteEnabled() {
mIsSatelliteEnabledSemaphore.drainPermits();
+
+ // Fail to enable satellite when SatelliteController is not fully loaded yet.
+ mIIntegerConsumerResults.clear();
mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer);
processAllMessages();
assertTrue(waitForIIntegerConsumerResult(1));
- assertEquals(SATELLITE_INVALID_TELEPHONY_STATE, mIIntegerConsumerResult);
+ assertEquals(SATELLITE_INVALID_TELEPHONY_STATE, (long) mIIntegerConsumerResults.get(0));
+ // Fail to enable satellite when the device does not support satellite.
+ mIIntegerConsumerResults.clear();
setUpResponseForRequestIsSatelliteSupported(false, SATELLITE_ERROR_NONE);
verifySatelliteSupported(false, SATELLITE_ERROR_NONE);
mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer);
processAllMessages();
assertTrue(waitForIIntegerConsumerResult(1));
- assertEquals(SATELLITE_NOT_SUPPORTED, mIIntegerConsumerResult);
+ assertEquals(SATELLITE_NOT_SUPPORTED, (long) mIIntegerConsumerResults.get(0));
+ // Fail to enable satellite when the device is not provisioned yet.
+ mIIntegerConsumerResults.clear();
resetSatelliteControllerUT();
+ verify(mMockSatelliteSessionController, times(1)).onSatelliteEnabledStateChanged(eq(false));
+ verify(mMockSatelliteSessionController, times(1)).setDemoMode(eq(false));
+ verify(mMockDatagramController, times(1)).setDemoMode(eq(false));
setUpResponseForRequestIsSatelliteSupported(true, SATELLITE_ERROR_NONE);
verifySatelliteSupported(true, SATELLITE_ERROR_NONE);
setUpResponseForRequestIsSatelliteProvisioned(false, SATELLITE_ERROR_NONE);
@@ -284,12 +317,13 @@ public class SatelliteControllerTest extends TelephonyTest {
mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer);
processAllMessages();
assertTrue(waitForIIntegerConsumerResult(1));
- assertEquals(SATELLITE_SERVICE_NOT_PROVISIONED, mIIntegerConsumerResult);
+ assertEquals(SATELLITE_SERVICE_NOT_PROVISIONED, (long) mIIntegerConsumerResults.get(0));
sendProvisionedStateChangedEvent(true, null);
processAllMessages();
verifySatelliteProvisioned(true, SATELLITE_ERROR_NONE);
+ // Successfully disable satellite when radio is turned off.
mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled = false;
setUpResponseForRequestSatelliteEnabled(false, false, SATELLITE_ERROR_NONE);
setRadioPower(false);
@@ -298,87 +332,174 @@ public class SatelliteControllerTest extends TelephonyTest {
assertTrue(mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled);
assertEquals(
SATELLITE_MODE_ENABLED_FALSE, mSatelliteControllerUT.satelliteModeSettingValue);
- verify(mMockSatelliteSessionController, times(1)).onSatelliteEnabledStateChanged(eq(false));
- verify(mMockSatelliteSessionController, times(1)).setDemoMode(eq(false));
- verify(mMockDatagramController, times(1)).setDemoMode(eq(false));
+ verify(mMockSatelliteSessionController, times(2)).onSatelliteEnabledStateChanged(eq(false));
+ verify(mMockSatelliteSessionController, times(2)).setDemoMode(eq(false));
+ verify(mMockDatagramController, times(2)).setDemoMode(eq(false));
+ verify(mMockControllerMetricsStats, times(1)).onSatelliteDisabled();
+ // Fail to enable satellite when radio is off.
+ mIIntegerConsumerResults.clear();
setUpResponseForRequestSatelliteEnabled(true, false, SATELLITE_ERROR_NONE);
mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer);
processAllMessages();
assertTrue(waitForIIntegerConsumerResult(1));
// Radio is not on, can not enable satellite
- assertEquals(SATELLITE_INVALID_MODEM_STATE, mIIntegerConsumerResult);
+ assertEquals(SATELLITE_INVALID_MODEM_STATE, (long) mIIntegerConsumerResults.get(0));
setRadioPower(true);
processAllMessages();
verifySatelliteEnabled(false, SATELLITE_ERROR_NONE);
+ // Fail to enable satellite with an error response from modem when radio is on.
+ mIIntegerConsumerResults.clear();
+ mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled = false;
+ setUpResponseForRequestSatelliteEnabled(true, false, SATELLITE_INVALID_MODEM_STATE);
+ mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer);
+ processAllMessages();
+ assertTrue(waitForIIntegerConsumerResult(1));
+ assertEquals(SATELLITE_INVALID_MODEM_STATE, (long) mIIntegerConsumerResults.get(0));
+ verifySatelliteEnabled(false, SATELLITE_ERROR_NONE);
+ verify(mMockPointingAppController, never()).startPointingUI(anyBoolean());
+ assertFalse(mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled);
+ verify(mMockControllerMetricsStats, times(1)).reportServiceEnablementFailCount();
+
+ // Successfully enable satellite when radio is on.
+ 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, mIIntegerConsumerResult);
+ assertEquals(SATELLITE_ERROR_NONE, (long) mIIntegerConsumerResults.get(0));
verifySatelliteEnabled(true, SATELLITE_ERROR_NONE);
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(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)).onSatelliteEnabled();
+ verify(mMockControllerMetricsStats, times(1)).reportServiceEnablementSuccessCount();
+ verify(mMockSessionMetricsStats, times(2)).setInitializationResult(anyInt());
+ verify(mMockSessionMetricsStats, times(2)).setRadioTechnology(anyInt());
+ verify(mMockSessionMetricsStats, times(2)).reportSessionMetrics();
+
+ // Successfully enable satellite when it is already enabled.
+ mIIntegerConsumerResults.clear();
mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer);
processAllMessages();
assertTrue(waitForIIntegerConsumerResult(1));
- assertEquals(SATELLITE_ERROR_NONE, mIIntegerConsumerResult);
+ assertEquals(SATELLITE_ERROR_NONE, (long) mIIntegerConsumerResults.get(0));
verifySatelliteEnabled(true, SATELLITE_ERROR_NONE);
+ // Fail to enable satellite with a different demo mode when it is already enabled.
+ mIIntegerConsumerResults.clear();
mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, true, mIIntegerConsumer);
processAllMessages();
assertTrue(waitForIIntegerConsumerResult(1));
- assertEquals(SATELLITE_INVALID_ARGUMENTS, mIIntegerConsumerResult);
+ assertEquals(SATELLITE_INVALID_ARGUMENTS, (long) mIIntegerConsumerResults.get(0));
verifySatelliteEnabled(true, SATELLITE_ERROR_NONE);
+ // Disable satellite.
+ mIIntegerConsumerResults.clear();
setUpResponseForRequestSatelliteEnabled(false, false, SATELLITE_ERROR_NONE);
mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, false, false, mIIntegerConsumer);
processAllMessages();
assertTrue(waitForIIntegerConsumerResult(1));
- assertEquals(SATELLITE_ERROR_NONE, mIIntegerConsumerResult);
+ assertEquals(SATELLITE_ERROR_NONE, (long) mIIntegerConsumerResults.get(0));
verifySatelliteEnabled(false, SATELLITE_ERROR_NONE);
+ // Disable satellite when satellite is already disabled.
+ mIIntegerConsumerResults.clear();
mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, false, false, mIIntegerConsumer);
processAllMessages();
assertTrue(waitForIIntegerConsumerResult(1));
- assertEquals(SATELLITE_ERROR_NONE, mIIntegerConsumerResult);
+ assertEquals(SATELLITE_ERROR_NONE, (long) mIIntegerConsumerResults.get(0));
verifySatelliteEnabled(false, SATELLITE_ERROR_NONE);
+ // Disable satellite with a different demo mode when satellite is already disabled.
+ mIIntegerConsumerResults.clear();
mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, false, true, mIIntegerConsumer);
processAllMessages();
assertTrue(waitForIIntegerConsumerResult(1));
- assertEquals(SATELLITE_ERROR_NONE, mIIntegerConsumerResult);
+ assertEquals(SATELLITE_ERROR_NONE, (long) mIIntegerConsumerResults.get(0));
verifySatelliteEnabled(false, SATELLITE_ERROR_NONE);
+ // Send a second request while the first request in progress
+ mIIntegerConsumerResults.clear();
setUpNoResponseForRequestSatelliteEnabled(true, false);
mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer);
processAllMessages();
assertFalse(waitForIIntegerConsumerResult(1));
-
mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer);
processAllMessages();
assertTrue(waitForIIntegerConsumerResult(1));
- assertEquals(SATELLITE_REQUEST_IN_PROGRESS, mIIntegerConsumerResult);
+ assertEquals(SATELLITE_REQUEST_IN_PROGRESS, (long) mIIntegerConsumerResults.get(0));
- resetSatelliteControllerUTToOffAndProvisionedState();
+ mIIntegerConsumerResults.clear();
resetSatelliteControllerUTToSupportedAndProvisionedState();
+ // Should receive callback for the above request when satellite modem is turned off.
+ assertTrue(waitForIIntegerConsumerResult(1));
+ assertEquals(SATELLITE_INVALID_MODEM_STATE, (long) mIIntegerConsumerResults.get(0));
+
+ // Move to satellite-disabling in progress.
setUpNoResponseForRequestSatelliteEnabled(false, false);
mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, false, false, mIIntegerConsumer);
processAllMessages();
assertFalse(waitForIIntegerConsumerResult(1));
- // Disabling is in progress. Thus, a new request to enable satellite will be rejected.
+ // Disable is in progress. Thus, a new request to enable satellite will be rejected.
+ mIIntegerConsumerResults.clear();
mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer);
processAllMessages();
assertTrue(waitForIIntegerConsumerResult(1));
- assertEquals(SATELLITE_ERROR, mIIntegerConsumerResult);
+ assertEquals(SATELLITE_ERROR, (long) mIIntegerConsumerResults.get(0));
+
+ mIIntegerConsumerResults.clear();
+ resetSatelliteControllerUTToOffAndProvisionedState();
+ // Should receive callback for the above request when satellite modem is turned off.
+ assertTrue(waitForIIntegerConsumerResult(1));
+ assertEquals(SATELLITE_INVALID_MODEM_STATE, (long) mIIntegerConsumerResults.get(0));
+
+ /**
+ * Make areAllRadiosDisabled return false and move mWaitingForRadioDisabled to true, which
+ * will lead to no response for requestSatelliteEnabled.
+ */
+ mSatelliteControllerUT.allRadiosDisabled = false;
+ setUpResponseForRequestSatelliteEnabled(true, false, SATELLITE_ERROR_NONE);
+ mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer);
+ processAllMessages();
+ assertFalse(waitForIIntegerConsumerResult(1));
+
+ resetSatelliteControllerUTEnabledState();
+ mIIntegerConsumerResults.clear();
+ setUpResponseForRequestSatelliteEnabled(false, false, SATELLITE_ERROR_NONE);
+ mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, false, false, mIIntegerConsumer);
+ processAllMessages();
+ // We should receive 2 callbacks for the above 2 requests.
+ assertTrue(waitForIIntegerConsumerResult(2));
+ assertEquals(SATELLITE_ERROR_NONE, (long) mIIntegerConsumerResults.get(0));
+ assertEquals(SATELLITE_ERROR_NONE, (long) mIIntegerConsumerResults.get(1));
+
+ resetSatelliteControllerUTToOffAndProvisionedState();
+
+ // Repeat the same test as above but with error response from modem for the second request
+ mSatelliteControllerUT.allRadiosDisabled = false;
+ setUpResponseForRequestSatelliteEnabled(true, false, SATELLITE_ERROR_NONE);
+ mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer);
+ processAllMessages();
+ assertFalse(waitForIIntegerConsumerResult(1));
+
+ resetSatelliteControllerUTEnabledState();
+ mIIntegerConsumerResults.clear();
+ setUpResponseForRequestSatelliteEnabled(false, false, SATELLITE_NO_RESOURCES);
+ mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, false, false, mIIntegerConsumer);
+ processAllMessages();
+ // We should receive 2 callbacks for the above 2 requests.
+ assertTrue(waitForIIntegerConsumerResult(2));
+ assertEquals(SATELLITE_ERROR_NONE, (long) mIIntegerConsumerResults.get(0));
+ assertEquals(SATELLITE_NO_RESOURCES, (long) mIIntegerConsumerResults.get(1));
+ mSatelliteControllerUT.allRadiosDisabled = true;
}
@Test
@@ -399,12 +520,226 @@ public class SatelliteControllerTest extends TelephonyTest {
verifySatelliteProvisioned(true, SATELLITE_ERROR_NONE);
}
+ @Test
+ public void testRegisterForSatelliteModemStateChanged() {
+ ISatelliteStateCallback callback = new ISatelliteStateCallback.Stub() {
+ @Override
+ public void onSatelliteModemStateChanged(int state) {
+ logd("onSatelliteModemStateChanged: state=" + state);
+ }
+ };
+ int errorCode = mSatelliteControllerUT.registerForSatelliteModemStateChanged(
+ SUB_ID, callback);
+ assertEquals(SATELLITE_INVALID_TELEPHONY_STATE, errorCode);
+ verify(mMockSatelliteSessionController, never())
+ .registerForSatelliteModemStateChanged(callback);
+
+ resetSatelliteControllerUTToSupportedAndProvisionedState();
+
+ errorCode = mSatelliteControllerUT.registerForSatelliteModemStateChanged(
+ SUB_ID, callback);
+ assertEquals(SATELLITE_ERROR_NONE, errorCode);
+ verify(mMockSatelliteSessionController).registerForSatelliteModemStateChanged(callback);
+ }
+
+ @Test
+ public void testUnregisterForSatelliteModemStateChanged() {
+ ISatelliteStateCallback callback = new ISatelliteStateCallback.Stub() {
+ @Override
+ public void onSatelliteModemStateChanged(int state) {
+ logd("onSatelliteModemStateChanged: state=" + state);
+ }
+ };
+ mSatelliteControllerUT.unregisterForSatelliteModemStateChanged(SUB_ID, callback);
+ verify(mMockSatelliteSessionController, never())
+ .unregisterForSatelliteModemStateChanged(callback);
+
+ resetSatelliteControllerUTToSupportedAndProvisionedState();
+
+ mSatelliteControllerUT.unregisterForSatelliteModemStateChanged(SUB_ID, callback);
+ verify(mMockSatelliteSessionController).unregisterForSatelliteModemStateChanged(callback);
+ }
+
+ @Test
+ public void testRegisterForSatelliteProvisionStateChanged() {
+ Semaphore semaphore = new Semaphore(0);
+ ISatelliteProvisionStateCallback callback =
+ new ISatelliteProvisionStateCallback.Stub() {
+ @Override
+ public void onSatelliteProvisionStateChanged(boolean provisioned) {
+ logd("onSatelliteProvisionStateChanged: provisioned=" + provisioned);
+ try {
+ semaphore.release();
+ } catch (Exception ex) {
+ loge("onSatelliteProvisionStateChanged: Got exception in releasing "
+ + "semaphore, ex=" + ex);
+ }
+ }
+ };
+ int errorCode = mSatelliteControllerUT.registerForSatelliteProvisionStateChanged(
+ SUB_ID, callback);
+ assertEquals(SATELLITE_INVALID_TELEPHONY_STATE, errorCode);
+
+ setUpResponseForRequestIsSatelliteSupported(false, SATELLITE_ERROR_NONE);
+ verifySatelliteSupported(false, SATELLITE_ERROR_NONE);
+ errorCode = mSatelliteControllerUT.registerForSatelliteProvisionStateChanged(
+ SUB_ID, callback);
+ assertEquals(SATELLITE_NOT_SUPPORTED, errorCode);
+
+ resetSatelliteControllerUT();
+ setUpResponseForRequestIsSatelliteSupported(true, SATELLITE_ERROR_NONE);
+ verifySatelliteSupported(true, SATELLITE_ERROR_NONE);
+ errorCode = mSatelliteControllerUT.registerForSatelliteProvisionStateChanged(
+ SUB_ID, callback);
+ assertEquals(SATELLITE_ERROR_NONE, errorCode);
+
+ sendProvisionedStateChangedEvent(true, null);
+ processAllMessages();
+ assertTrue(waitForForEvents(
+ semaphore, 1, "testRegisterForSatelliteProvisionStateChanged"));
+
+ mSatelliteControllerUT.unregisterForSatelliteProvisionStateChanged(SUB_ID, callback);
+ sendProvisionedStateChangedEvent(true, null);
+ processAllMessages();
+ assertFalse(waitForForEvents(
+ semaphore, 1, "testRegisterForSatelliteProvisionStateChanged"));
+ }
+
+ @Test
+ public void testRegisterForSatelliteDatagram() {
+ ISatelliteDatagramCallback callback =
+ new ISatelliteDatagramCallback.Stub() {
+ @Override
+ public void onSatelliteDatagramReceived(long datagramId,
+ @NonNull SatelliteDatagram datagram, int pendingCount,
+ @NonNull IVoidConsumer internalAck) {
+ logd("onSatelliteDatagramReceived");
+ }
+ };
+ when(mMockDatagramController.registerForSatelliteDatagram(eq(SUB_ID), eq(callback)))
+ .thenReturn(SATELLITE_ERROR_NONE);
+ int errorCode = mSatelliteControllerUT.registerForSatelliteDatagram(SUB_ID, callback);
+ assertEquals(SATELLITE_ERROR_NONE, errorCode);
+ verify(mMockDatagramController).registerForSatelliteDatagram(eq(SUB_ID), eq(callback));
+ }
+
+ @Test
+ public void testUnregisterForSatelliteDatagram() {
+ ISatelliteDatagramCallback callback =
+ new ISatelliteDatagramCallback.Stub() {
+ @Override
+ public void onSatelliteDatagramReceived(long datagramId,
+ @NonNull SatelliteDatagram datagram, int pendingCount,
+ @NonNull IVoidConsumer internalAck) {
+ logd("onSatelliteDatagramReceived");
+ }
+ };
+ doNothing().when(mMockDatagramController)
+ .unregisterForSatelliteDatagram(eq(SUB_ID), eq(callback));
+ mSatelliteControllerUT.unregisterForSatelliteDatagram(SUB_ID, callback);
+ verify(mMockDatagramController).unregisterForSatelliteDatagram(eq(SUB_ID), eq(callback));
+ }
+
+ @Test
+ public void testSendSatelliteDatagram() {
+ String mText = "This is a test datagram message from user";
+ SatelliteDatagram datagram = new SatelliteDatagram(mText.getBytes());
+
+ mIIntegerConsumerResults.clear();
+ mSatelliteControllerUT.sendSatelliteDatagram(SUB_ID,
+ SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE, datagram, true, mIIntegerConsumer);
+ processAllMessages();
+ assertTrue(waitForIIntegerConsumerResult(1));
+ assertEquals(SATELLITE_INVALID_TELEPHONY_STATE, (long) mIIntegerConsumerResults.get(0));
+ verify(mMockDatagramController, never()).sendSatelliteDatagram(anyInt(),
+ eq(SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE), eq(datagram), eq(true),
+ any());
+
+ mIIntegerConsumerResults.clear();
+ setUpResponseForRequestIsSatelliteSupported(true, SATELLITE_ERROR_NONE);
+ verifySatelliteSupported(true, SATELLITE_ERROR_NONE);
+ sendProvisionedStateChangedEvent(false, null);
+ processAllMessages();
+ verifySatelliteProvisioned(false, SATELLITE_ERROR_NONE);
+ mSatelliteControllerUT.sendSatelliteDatagram(SUB_ID,
+ SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE, datagram, true, mIIntegerConsumer);
+ processAllMessages();
+ assertTrue(waitForIIntegerConsumerResult(1));
+ assertEquals(SATELLITE_SERVICE_NOT_PROVISIONED, (long) mIIntegerConsumerResults.get(0));
+ verify(mMockDatagramController, never()).sendSatelliteDatagram(anyInt(),
+ eq(SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE), eq(datagram), eq(true),
+ any());
+
+ mIIntegerConsumerResults.clear();
+ sendProvisionedStateChangedEvent(true, null);
+ processAllMessages();
+ verifySatelliteProvisioned(true, SATELLITE_ERROR_NONE);
+ mSatelliteControllerUT.sendSatelliteDatagram(SUB_ID,
+ SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE, datagram, true, mIIntegerConsumer);
+ processAllMessages();
+ assertFalse(waitForIIntegerConsumerResult(1));
+ verify(mMockDatagramController, times(1)).sendSatelliteDatagram(anyInt(),
+ eq(SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE), eq(datagram), eq(true),
+ any());
+ verify(mMockPointingAppController, times(1)).startPointingUI(eq(true));
+ }
+
+ @Test
+ public void testPollPendingSatelliteDatagrams() {
+ mIIntegerConsumerResults.clear();
+ mSatelliteControllerUT.pollPendingSatelliteDatagrams(SUB_ID, mIIntegerConsumer);
+ processAllMessages();
+ assertTrue(waitForIIntegerConsumerResult(1));
+ assertEquals(SATELLITE_INVALID_TELEPHONY_STATE, (long) mIIntegerConsumerResults.get(0));
+ verify(mMockDatagramController, never()).pollPendingSatelliteDatagrams(anyInt(), any());
+
+ mIIntegerConsumerResults.clear();
+ setUpResponseForRequestIsSatelliteSupported(true, SATELLITE_ERROR_NONE);
+ verifySatelliteSupported(true, SATELLITE_ERROR_NONE);
+ sendProvisionedStateChangedEvent(false, null);
+ processAllMessages();
+ verifySatelliteProvisioned(false, SATELLITE_ERROR_NONE);
+ mSatelliteControllerUT.pollPendingSatelliteDatagrams(SUB_ID, mIIntegerConsumer);
+ processAllMessages();
+ assertTrue(waitForIIntegerConsumerResult(1));
+ assertEquals(SATELLITE_SERVICE_NOT_PROVISIONED, (long) mIIntegerConsumerResults.get(0));
+ verify(mMockDatagramController, never()).pollPendingSatelliteDatagrams(anyInt(), any());
+
+ mIIntegerConsumerResults.clear();
+ sendProvisionedStateChangedEvent(true, null);
+ processAllMessages();
+ verifySatelliteProvisioned(true, SATELLITE_ERROR_NONE);
+ mSatelliteControllerUT.pollPendingSatelliteDatagrams(SUB_ID, mIIntegerConsumer);
+ processAllMessages();
+ assertFalse(waitForIIntegerConsumerResult(1));
+ verify(mMockDatagramController, times(1)).pollPendingSatelliteDatagrams(anyInt(), any());
+ }
+
+ private void resetSatelliteControllerUTEnabledState() {
+ logd("resetSatelliteControllerUTEnabledState");
+ setUpResponseForRequestIsSatelliteSupported(false, SATELLITE_RADIO_NOT_AVAILABLE);
+ doReturn(true).when(mMockSatelliteModemInterface)
+ .setSatelliteServicePackageName(anyString());
+ mSatelliteControllerUT.setSatelliteServicePackageName("TestSatelliteService");
+ processAllMessages();
+
+ setUpResponseForRequestIsSatelliteSupported(true, SATELLITE_ERROR_NONE);
+ verifySatelliteSupported(true, SATELLITE_ERROR_NONE);
+ sendProvisionedStateChangedEvent(true, null);
+ processAllMessages();
+ verifySatelliteProvisioned(true, SATELLITE_ERROR_NONE);
+ }
+
private void resetSatelliteControllerUT() {
logd("resetSatelliteControllerUT");
+ // Trigger cleanUpResources
+ sendSatelliteModemStateChangedEvent(SATELLITE_MODEM_STATE_UNAVAILABLE, null);
+ processAllMessages();
+
+ // Reset all cached states
setUpResponseForRequestIsSatelliteSupported(false, SATELLITE_RADIO_NOT_AVAILABLE);
doReturn(true).when(mMockSatelliteModemInterface)
.setSatelliteServicePackageName(anyString());
- // Reset all cached states
mSatelliteControllerUT.setSatelliteServicePackageName("TestSatelliteService");
processAllMessages();
}
@@ -420,10 +755,8 @@ public class SatelliteControllerTest extends TelephonyTest {
private void resetSatelliteControllerUTToOffAndProvisionedState() {
resetSatelliteControllerUTToSupportedAndProvisionedState();
- setUpResponseForRequestSatelliteEnabled(false, false, SATELLITE_ERROR_NONE);
- mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, false, false, mIIntegerConsumer);
+ sendSatelliteModemStateChangedEvent(SATELLITE_MODEM_STATE_OFF, null);
processAllMessages();
- assertTrue(waitForIIntegerConsumerResult(1));
verifySatelliteEnabled(false, SATELLITE_ERROR_NONE);
}
@@ -436,7 +769,7 @@ public class SatelliteControllerTest extends TelephonyTest {
mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer);
processAllMessages();
assertTrue(waitForIIntegerConsumerResult(1));
- assertEquals(SATELLITE_ERROR_NONE, mIIntegerConsumerResult);
+ assertEquals(SATELLITE_ERROR_NONE, (long) mIIntegerConsumerResults.get(0));
verifySatelliteEnabled(true, SATELLITE_ERROR_NONE);
}
@@ -496,6 +829,22 @@ public class SatelliteControllerTest extends TelephonyTest {
}).when(mMockSatelliteModemInterface).requestSatelliteCapabilities(any(Message.class));
}
+ private boolean waitForForEvents(
+ Semaphore semaphore, int expectedNumberOfEvents, String caller) {
+ for (int i = 0; i < expectedNumberOfEvents; i++) {
+ try {
+ if (!semaphore.tryAcquire(TIMEOUT, TimeUnit.MILLISECONDS)) {
+ loge(caller + ": Timeout to receive the expected event");
+ return false;
+ }
+ } catch (Exception ex) {
+ loge(caller + ": Got exception=" + ex);
+ return false;
+ }
+ }
+ return true;
+ }
+
private boolean waitForRequestIsSatelliteSupportedResult(int expectedNumberOfEvents) {
for (int i = 0; i < expectedNumberOfEvents; i++) {
try {
@@ -591,6 +940,13 @@ public class SatelliteControllerTest extends TelephonyTest {
msg.sendToTarget();
}
+ private void sendSatelliteModemStateChangedEvent(int state, Throwable exception) {
+ Message msg = mSatelliteControllerUT.obtainMessage(
+ 28 /* EVENT_SATELLITE_MODEM_STATE_CHANGED */);
+ msg.obj = new AsyncResult(null, state, exception);
+ msg.sendToTarget();
+ }
+
private void setRadioPower(boolean on) {
mSimulatedCommands.setRadioPower(on, false, false, null);
}