aboutsummaryrefslogtreecommitdiff
path: root/tests/telephonytests/src/com/android/internal/telephony/data/DataStallRecoveryManagerTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/telephonytests/src/com/android/internal/telephony/data/DataStallRecoveryManagerTest.java')
-rw-r--r--tests/telephonytests/src/com/android/internal/telephony/data/DataStallRecoveryManagerTest.java153
1 files changed, 149 insertions, 4 deletions
diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/DataStallRecoveryManagerTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/DataStallRecoveryManagerTest.java
index 35d3b9268a..22cdaae64f 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/data/DataStallRecoveryManagerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/data/DataStallRecoveryManagerTest.java
@@ -18,6 +18,7 @@ package com.android.internal.telephony.data;
import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assert.assertNotNull;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
@@ -25,9 +26,16 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import android.content.Intent;
+import android.database.ContentObserver;
import android.net.NetworkAgent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.Settings;
import android.telephony.Annotation.ValidationStatus;
import android.telephony.CarrierConfigManager;
+import android.telephony.TelephonyManager;
+import android.test.mock.MockContentResolver;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
@@ -42,21 +50,53 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
+import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper
public class DataStallRecoveryManagerTest extends TelephonyTest {
+ private FakeContentResolver mFakeContentResolver;
+
// Mocked classes
private DataStallRecoveryManagerCallback mDataStallRecoveryManagerCallback;
private DataStallRecoveryManager mDataStallRecoveryManager;
+ /**
+ * The fake content resolver used to receive change event from global settings
+ * and notify observer of a change in content in DataStallRecoveryManager
+ */
+ private class FakeContentResolver extends MockContentResolver {
+ @Override
+ public void notifyChange(Uri uri, ContentObserver observer) {
+ super.notifyChange(uri, observer);
+ logd("onChanged(uri=" + uri + ")" + observer);
+ if (observer != null) {
+ observer.dispatchChange(false, uri);
+ } else {
+ mDataStallRecoveryManager.getContentObserver().dispatchChange(false, uri);
+ }
+ }
+ }
+
@Before
public void setUp() throws Exception {
logd("DataStallRecoveryManagerTest +Setup!");
super.setUp(getClass().getSimpleName());
+ Field field = DataStallRecoveryManager.class.getDeclaredField("mPredictWaitingMillis");
+ field.setAccessible(true);
+
+ mFakeContentResolver = new FakeContentResolver();
+ doReturn(mFakeContentResolver).when(mContext).getContentResolver();
+ // Set the global settings for action enabled state and duration to
+ // the default test values.
+ Settings.Global.putString(mFakeContentResolver, Settings.Global.DSRM_DURATION_MILLIS,
+ "100,100,100,100,0");
+ Settings.Global.putString(mFakeContentResolver, Settings.Global.DSRM_ENABLED_ACTIONS,
+ "true,true,false,true,true");
+
mDataStallRecoveryManagerCallback = mock(DataStallRecoveryManagerCallback.class);
mCarrierConfigManager = mPhone.getContext().getSystemService(CarrierConfigManager.class);
long[] dataStallRecoveryTimersArray = new long[] {100, 100, 100, 100};
@@ -81,11 +121,15 @@ public class DataStallRecoveryManagerTest extends TelephonyTest {
mMockedWwanDataServiceManager,
mTestableLooper.getLooper(),
mDataStallRecoveryManagerCallback);
+
+ field.set(mDataStallRecoveryManager, 0L);
+
logd("DataStallRecoveryManagerTest -Setup!");
}
@After
public void tearDown() throws Exception {
+ mFakeContentResolver = null;
mDataStallRecoveryManager = null;
super.tearDown();
}
@@ -93,22 +137,22 @@ public class DataStallRecoveryManagerTest extends TelephonyTest {
private void sendValidationStatusCallback(@ValidationStatus int status) {
ArgumentCaptor<DataNetworkControllerCallback> dataNetworkControllerCallbackCaptor =
ArgumentCaptor.forClass(DataNetworkControllerCallback.class);
- verify(mDataNetworkController)
+ verify(mDataNetworkController, times(2))
.registerDataNetworkControllerCallback(
dataNetworkControllerCallbackCaptor.capture());
DataNetworkControllerCallback dataNetworkControllerCallback =
- dataNetworkControllerCallbackCaptor.getValue();
+ dataNetworkControllerCallbackCaptor.getAllValues().get(0);
dataNetworkControllerCallback.onInternetDataNetworkValidationStatusChanged(status);
}
private void sendOnInternetDataNetworkCallback(boolean isConnected) {
ArgumentCaptor<DataNetworkControllerCallback> dataNetworkControllerCallbackCaptor =
ArgumentCaptor.forClass(DataNetworkControllerCallback.class);
- verify(mDataNetworkController)
+ verify(mDataNetworkController, times(2))
.registerDataNetworkControllerCallback(
dataNetworkControllerCallbackCaptor.capture());
DataNetworkControllerCallback dataNetworkControllerCallback =
- dataNetworkControllerCallbackCaptor.getValue();
+ dataNetworkControllerCallbackCaptor.getAllValues().get(0);
if (isConnected) {
List<DataNetwork> dataprofile = new ArrayList<>();
@@ -363,4 +407,105 @@ public class DataStallRecoveryManagerTest extends TelephonyTest {
}
assertThat(mDataStallRecoveryManager.mDataStallStartMs != 0).isTrue();
}
+
+ /**
+ * Tests the DSRM process to send three intents for three action changes.
+ */
+ @Test
+ public void testSendDSRMData() throws Exception {
+ ArgumentCaptor<Intent> captorIntent = ArgumentCaptor.forClass(Intent.class);
+
+ logd("Set phone status to normal status.");
+ sendOnInternetDataNetworkCallback(true);
+ doReturn(mSignalStrength).when(mPhone).getSignalStrength();
+ doReturn(PhoneConstants.State.IDLE).when(mPhone).getState();
+
+ // Set the expected behavior of the DataStallRecoveryManager.
+ logd("Start DSRM process, set action to 1");
+ mDataStallRecoveryManager.setRecoveryAction(1);
+ logd("Sending validation failed callback");
+ sendValidationStatusCallback(NetworkAgent.VALIDATION_STATUS_NOT_VALID);
+ processAllFutureMessages();
+
+ logd("Verify that the DataStallRecoveryManager sends the expected intents.");
+ verify(mPhone.getContext(), times(3)).sendBroadcast(captorIntent.capture());
+ logd(captorIntent.getAllValues().toString());
+ for (int i = 0; i < captorIntent.getAllValues().size(); i++) {
+ Intent intent = captorIntent.getAllValues().get(i);
+ // Check and assert if intent is null
+ assertNotNull(intent);
+ // Check and assert if intent is not ACTION_DATA_STALL_DETECTED
+ assertThat(intent.getAction()).isEqualTo(
+ TelephonyManager.ACTION_DATA_STALL_DETECTED);
+ // Get the extra data
+ Bundle bundle = (Bundle) intent.getExtra("EXTRA_DSRS_STATS_BUNDLE");
+ // Check and assert if bundle is null
+ assertNotNull(bundle);
+ // Dump bundle data
+ logd(bundle.toString());
+ int size = bundle.size();
+ logd("bundle size is " + size);
+ // Check if bundle size is 19
+ assertThat(size).isEqualTo(19);
+ }
+ }
+
+ /**
+ * Tests update action enable state and duration from global settings.
+ */
+ @Test
+ public void testUpdateGlobalSettings() throws Exception {
+ Field field = DataStallRecoveryManager.class.getDeclaredField("mPredictWaitingMillis");
+ field.setAccessible(true);
+
+ // Set duration to 10000/20000/30000/40000
+ Settings.Global.putString(
+ mFakeContentResolver, Settings.Global.DSRM_DURATION_MILLIS,
+ "10000,20000,30000,40000,0");
+ // Send onChange event with Settings.Global.DSRM_DURATION_MILLIS to fake ContentResolver
+ mFakeContentResolver.notifyChange(
+ Settings.Global.getUriFor(Settings.Global.DSRM_DURATION_MILLIS), null);
+ processAllFutureMessages();
+ // Verify that the durations are correct values.
+ assertThat(mDataStallRecoveryManager.getDataStallRecoveryDelayMillis(0)).isEqualTo(10000L);
+ assertThat(mDataStallRecoveryManager.getDataStallRecoveryDelayMillis(1)).isEqualTo(20000L);
+ assertThat(mDataStallRecoveryManager.getDataStallRecoveryDelayMillis(2)).isEqualTo(30000L);
+ assertThat(mDataStallRecoveryManager.getDataStallRecoveryDelayMillis(3)).isEqualTo(40000L);
+
+ // Set action enable state to true/false/false/false/true
+ Settings.Global.putString(
+ mFakeContentResolver, Settings.Global.DSRM_ENABLED_ACTIONS,
+ "true,false,false,false,true");
+ // Send onChange event with Settings.Global.DSRM_ENABLED_ACTIONS to fake ContentResolver
+ mFakeContentResolver.notifyChange(
+ Settings.Global.getUriFor(Settings.Global.DSRM_ENABLED_ACTIONS), null);
+ processAllFutureMessages();
+ // Verify that the action enable state are correct values.
+ assertThat(mDataStallRecoveryManager.shouldSkipRecoveryAction(0)).isEqualTo(false);
+ assertThat(mDataStallRecoveryManager.shouldSkipRecoveryAction(1)).isEqualTo(true);
+ assertThat(mDataStallRecoveryManager.shouldSkipRecoveryAction(2)).isEqualTo(true);
+ assertThat(mDataStallRecoveryManager.shouldSkipRecoveryAction(3)).isEqualTo(true);
+ assertThat(mDataStallRecoveryManager.shouldSkipRecoveryAction(4)).isEqualTo(false);
+ // Check the predict waiting millis
+ assertThat(field.get(mDataStallRecoveryManager)).isEqualTo(1000L);
+ // Test predict waiting millis to rollback to 0 if there is no global duration and action
+ // Set duration to empty
+ Settings.Global.putString(
+ mFakeContentResolver, Settings.Global.DSRM_DURATION_MILLIS,
+ "");
+ // Send onChange event with Settings.Global.DSRM_DURATION_MILLIS to fake ContentResolver
+ mFakeContentResolver.notifyChange(
+ Settings.Global.getUriFor(Settings.Global.DSRM_DURATION_MILLIS), null);
+ processAllFutureMessages();
+ // Set action to empty
+ Settings.Global.putString(
+ mFakeContentResolver, Settings.Global.DSRM_ENABLED_ACTIONS,
+ "");
+ // Send onChange event with Settings.Global.DSRM_ENABLED_ACTIONS to fake ContentResolver
+ mFakeContentResolver.notifyChange(
+ Settings.Global.getUriFor(Settings.Global.DSRM_ENABLED_ACTIONS), null);
+ processAllFutureMessages();
+ // Check if predict waiting millis is 0
+ assertThat(field.get(mDataStallRecoveryManager)).isEqualTo(0L);
+ }
}