Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 654b2710 authored by Megha Patil's avatar Megha Patil
Browse files

Unit Test for SMS Retry based on Configuration

- Test Retry SMS based on retry Count, retry Count
over Ims and retry delay value as per Carrier
Configuration.
- Bug: b/230707485

Test: atest ImsSmsDispatcherTest
Change-Id: I91843a4ee3ea3b55ddb314043fda04c7c4d555f0
parent 3255c239
Loading
Loading
Loading
Loading
+80 −0
Original line number Diff line number Diff line
@@ -33,6 +33,8 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.SmsMessage;
import android.telephony.ims.stub.ImsSmsImplBase;
import android.test.suitebuilder.annotation.SmallTest;
@@ -64,7 +66,9 @@ public class ImsSmsDispatcherTest extends TelephonyTest {
    private FeatureConnector.Listener<ImsManager> mImsManagerListener;
    private HashMap<String, Object> mTrackerData;
    private ImsSmsDispatcher mImsSmsDispatcher;
    PersistableBundle mBundle = new PersistableBundle();
    private static final int SUB_0 = 0;
    private static final String TAG = "ImsSmsDispatcherTest";

    @Before
    public void setUp() throws Exception {
@@ -168,6 +172,13 @@ public class ImsSmsDispatcherTest extends TelephonyTest {
    @SmallTest
    public void testErrorImsRetry() throws Exception {
        int token = mImsSmsDispatcher.mNextToken.get();
        mContextFixture.getCarrierConfigBundle().putInt(CarrierConfigManager.ImsSms
                                .KEY_SMS_OVER_IMS_SEND_RETRY_DELAY_MILLIS_INT,
                                2000);
        mContextFixture.getCarrierConfigBundle().putInt(CarrierConfigManager.ImsSms
                                                .KEY_SMS_MAX_RETRY_COUNT_OVER_IMS_INT, 3);
        mContextFixture.getCarrierConfigBundle().putInt(CarrierConfigManager.ImsSms
                                                .KEY_SMS_MAX_RETRY_COUNT_INT, 3);
        mTrackerData.put("pdu", com.android.internal.telephony.gsm.SmsMessage.getSubmitPdu(null,
                "+15555551212", "Test", false).encodedMessage);
        when(mImsManager.getSmsFormat()).thenReturn(SmsMessage.FORMAT_3GPP);
@@ -285,6 +296,13 @@ public class ImsSmsDispatcherTest extends TelephonyTest {
    public void testErrorImsRetrywithMessageRef() throws Exception {
        int token = mImsSmsDispatcher.mNextToken.get();
        int messageRef = mImsSmsDispatcher.nextMessageRef() + 1;
        mContextFixture.getCarrierConfigBundle().putInt(CarrierConfigManager.ImsSms
                                                .KEY_SMS_OVER_IMS_SEND_RETRY_DELAY_MILLIS_INT,
                                                2000);
        mContextFixture.getCarrierConfigBundle().putInt(CarrierConfigManager.ImsSms
                                                .KEY_SMS_MAX_RETRY_COUNT_OVER_IMS_INT, 3);
        mContextFixture.getCarrierConfigBundle().putInt(CarrierConfigManager.ImsSms
                                                .KEY_SMS_MAX_RETRY_COUNT_INT, 3);
        when(mImsManager.getSmsFormat()).thenReturn(SmsMessage.FORMAT_3GPP);
        when(mPhone.getPhoneType()).thenReturn(PhoneConstants.PHONE_TYPE_GSM);
        doReturn(mSmsUsageMonitor).when(mSmsDispatchersController).getUsageMonitor();
@@ -309,4 +327,66 @@ public class ImsSmsDispatcherTest extends TelephonyTest {
        assertEquals(messageRef, pdu[1]);
        assertEquals(0x04, (pdu[0] & 0x04));
    }

    @Test
    public void testErrorImsRetrywithRetryConfig() throws Exception {
        int token = mImsSmsDispatcher.mNextToken.get();
        int messageRef = mImsSmsDispatcher.nextMessageRef() + 1;
        mContextFixture.getCarrierConfigBundle().putInt(CarrierConfigManager.ImsSms
                                                .KEY_SMS_OVER_IMS_SEND_RETRY_DELAY_MILLIS_INT,
                                                3000);
        mContextFixture.getCarrierConfigBundle().putInt(CarrierConfigManager.ImsSms
                                                .KEY_SMS_MAX_RETRY_COUNT_OVER_IMS_INT, 2);
        mContextFixture.getCarrierConfigBundle().putInt(CarrierConfigManager.ImsSms
                                                .KEY_SMS_MAX_RETRY_COUNT_INT, 3);
        when(mImsManager.getSmsFormat()).thenReturn(SmsMessage.FORMAT_3GPP);
        when(mPhone.getPhoneType()).thenReturn(PhoneConstants.PHONE_TYPE_GSM);
        doReturn(mSmsUsageMonitor).when(mSmsDispatchersController).getUsageMonitor();
        mImsSmsDispatcher.sendText("+15555551212", null, "Retry test",
                null, null, null, null, false,
                -1, false, -1, false, 0);
        verify(mImsManager).sendSms(eq(token + 1), eq(messageRef), eq(SmsMessage.FORMAT_3GPP),
                nullable(String.class), eq(false), (byte[]) any());
        assertEquals(2, mImsSmsDispatcher.getMaxRetryCountOverIms());
        assertEquals(3, mImsSmsDispatcher.getMaxSmsRetryCount());
        assertEquals(3000, mImsSmsDispatcher.getSmsRetryDelayValue());
        // Retry over IMS
        mImsSmsDispatcher.getSmsListener().onSendSmsResult(token + 1, messageRef,
                ImsSmsImplBase.SEND_STATUS_ERROR_RETRY, 0, SmsResponse.NO_ERROR_CODE);
        waitForMs(mImsSmsDispatcher.getSmsRetryDelayValue() + 200);
        processAllMessages();

        // Make sure tpmr value is same and retry bit set
        ArgumentCaptor<byte[]> byteCaptor = ArgumentCaptor.forClass(byte[].class);
        verify(mImsManager).sendSms(eq(token + 2), eq(messageRef), eq(SmsMessage.FORMAT_3GPP),
                nullable(String.class), eq(true), byteCaptor.capture());
        byte[] pdu = byteCaptor.getValue();
        assertEquals(messageRef, pdu[1]);
        assertEquals(0x04, (pdu[0] & 0x04));
        // Retry over IMS for the second time
        mImsSmsDispatcher.getSmsListener().onSendSmsResult(token + 2, messageRef,
                ImsSmsImplBase.SEND_STATUS_ERROR_RETRY, 0, SmsResponse.NO_ERROR_CODE);
        waitForMs(mImsSmsDispatcher.getSmsRetryDelayValue() + 200);
        processAllMessages();
        // Make sure tpmr value is same and retry bit set
        ArgumentCaptor<byte[]> byteCaptor2 = ArgumentCaptor.forClass(byte[].class);
        verify(mImsManager).sendSms(eq(token + 3), eq(messageRef), eq(SmsMessage.FORMAT_3GPP),
                nullable(String.class), eq(true), byteCaptor2.capture());
        byte[] pdu2 = byteCaptor2.getValue();
        assertEquals(messageRef, pdu2[1]);
        assertEquals(0x04, (pdu2[0] & 0x04));

        mImsSmsDispatcher.getSmsListener().onSendSmsResult(token + 3, messageRef,
                ImsSmsImplBase.SEND_STATUS_ERROR_RETRY, 0, SmsResponse.NO_ERROR_CODE);
        waitForMs(mImsSmsDispatcher.getSmsRetryDelayValue() + 200);
        processAllMessages();
        // Make sure tpmr value is same and retry bit set
        ArgumentCaptor<SMSDispatcher.SmsTracker> captor =
                ArgumentCaptor.forClass(SMSDispatcher.SmsTracker.class);
        // Ensure GsmSmsDispatcher calls sendSms
        verify(mSmsDispatchersController).sendRetrySms(captor.capture());

        assertNotNull(captor.getValue());
        assertTrue(captor.getValue().mRetryCount > 0);
    }
}