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

Commit 0a04d36d authored by Sarah Chin's avatar Sarah Chin Committed by Gerrit Code Review
Browse files

Merge "Remove Thread.sleep in Telephony unittests"

parents bd7d5693 2e04481d
Loading
Loading
Loading
Loading
+0 −12
Original line number Diff line number Diff line
@@ -776,18 +776,6 @@ public abstract class TelephonyTest {
        assertTrue("Handler was not empty before timeout elapsed", timeoutCount < 5);
    }

    protected final void waitForHandlerActionDelayed(Handler h, long timeoutMillis, long delayMs) {
        final CountDownLatch lock = new CountDownLatch(1);
        h.postDelayed(lock::countDown, delayMs);
        while (lock.getCount() > 0) {
            try {
                lock.await(timeoutMillis, TimeUnit.MILLISECONDS);
            } catch (InterruptedException e) {
                // do nothing
            }
        }
    }

    protected final EmergencyNumber getTestEmergencyNumber() {
        return SAMPLE_EMERGENCY_NUMBER;
    }
+33 −40
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package com.android.internal.telephony.dataconnection;

import static com.android.internal.telephony.TelephonyTestUtils.waitForMs;

import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -35,13 +33,14 @@ import android.net.StringNetworkSpecifier;
import android.os.AsyncResult;
import android.os.Binder;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Messenger;
import android.telephony.AccessNetworkConstants;
import android.telephony.Rlog;
import android.telephony.data.ApnSetting;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;

import androidx.test.filters.FlakyTest;

@@ -60,11 +59,14 @@ import com.android.internal.telephony.mocks.TelephonyRegistryMock;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;

import java.lang.reflect.Field;
import java.util.ArrayList;

@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper
public class TelephonyNetworkFactoryTest extends TelephonyTest {
    private final static String LOG_TAG = "TelephonyNetworkFactoryTest";

@@ -79,9 +81,7 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest {
    private PhoneSwitcherMock mPhoneSwitcherMock;
    private SubscriptionControllerMock mSubscriptionControllerMock;
    private SubscriptionMonitorMock mSubscriptionMonitorMock;
    private HandlerThread mHandlerThread;
    private ConnectivityServiceMock mConnectivityServiceMock;
    private Looper mLooper;
    private final ArrayList<NetworkRequest> mNetworkRequestList = new ArrayList<>();

    private TelephonyNetworkFactory mTelephonyNetworkFactoryUT;
@@ -112,10 +112,6 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest {
        super.setUp(getClass().getSimpleName());
        replaceInstance(RadioConfig.class, "sRadioConfig", null, mMockRadioConfig);

        mHandlerThread = new HandlerThread("TelephonyNetworkFactoryTest");
        mHandlerThread.start();
        mLooper = mHandlerThread.getLooper();

        mContextFixture.putStringArrayResource(com.android.internal.R.array.networkAttributes,
                new String[]{"wifi,1,1,1,-1,true", "mobile,0,0,0,-1,true",
                        "mobile_mms,2,0,2,60000,true", "mobile_supl,3,0,2,60000,true",
@@ -151,8 +147,6 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest {
    @After
    public void tearDown() throws Exception {
        mConnectivityServiceMock.die();
        mLooper.quit();
        mHandlerThread.quit();
        super.tearDown();
    }

@@ -165,15 +159,17 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest {
                mTelephonyRegistryMock, numberOfPhones);
        mSubscriptionMonitorMock = new SubscriptionMonitorMock(numberOfPhones);
        mPhoneSwitcherMock = new PhoneSwitcherMock(
                numberOfPhones, mLooper, mSubscriptionControllerMock);
                numberOfPhones, Looper.myLooper(), mSubscriptionControllerMock);
        mSubscriptionMonitorMock = new SubscriptionMonitorMock(numberOfPhones);

        replaceInstance(SubscriptionController.class, "sInstance", null,
                mSubscriptionControllerMock);
        replaceInstance(PhoneSwitcher.class, "sPhoneSwitcher", null, mPhoneSwitcherMock);

        mTelephonyNetworkFactoryUT = new TelephonyNetworkFactory(mSubscriptionMonitorMock, mLooper,
                mPhone);
        mTelephonyNetworkFactoryUT = new TelephonyNetworkFactory(mSubscriptionMonitorMock,
                Looper.myLooper(), mPhone);
        monitorTestableLooper(new TestableLooper(
                mConnectivityServiceMock.getHandlerThread().getLooper()));
    }

    /**
@@ -197,52 +193,52 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest {

        log("addDefaultRequest");
        mConnectivityServiceMock.addDefaultRequest();
        waitForMs(250);
        processAllMessages();
        assertEquals(0, mNetworkRequestList.size());

        log("setPhoneActive true: phoneId = " + phoneId);
        mPhoneSwitcherMock.setPhoneActive(phoneId, true);
        waitForMs(250);
        processAllMessages();
        assertEquals(1, mNetworkRequestList.size());

        log("makeSubSpecificInternetRequest: subId = " + subId);
        NetworkRequest subSpecificDefault = makeSubSpecificInternetRequest(subId);
        waitForMs(250);
        processAllMessages();
        assertEquals(2, mNetworkRequestList.size());

        log("setPhoneActive false: phoneId = " + phoneId);
        mPhoneSwitcherMock.setPhoneActive(phoneId, false);
        waitForMs(250);
        processAllMessages();
        assertEquals(0, mNetworkRequestList.size());

        log("makeSubSpecificInternetRequest: subId = " + subId);
        NetworkRequest subSpecificMms = makeSubSpecificMmsRequest(subId);
        waitForMs(250);
        processAllMessages();
        assertEquals(0, mNetworkRequestList.size());

        log("setPhoneActive true: phoneId = " + phoneId);
        mPhoneSwitcherMock.setPhoneActive(phoneId, true);
        waitForMs(250);
        processAllMessages();
        assertEquals(3, mNetworkRequestList.size());

        log("releaseNetworkRequest: subSpecificDefault = " + subSpecificDefault);
        mConnectivityServiceMock.releaseNetworkRequest(subSpecificDefault);
        waitForMs(250);
        processAllMessages();
        assertEquals(2, mNetworkRequestList.size());

        log("setPhoneActive false: phoneId = " + phoneId);
        mPhoneSwitcherMock.setPhoneActive(phoneId, false);
        waitForMs(250);
        processAllMessages();
        assertEquals(0, mNetworkRequestList.size());

        log("releaseNetworkRequest: subSpecificMms = " + subSpecificMms);
        mConnectivityServiceMock.releaseNetworkRequest(subSpecificMms);
        waitForMs(250);
        processAllMessages();
        assertEquals(0, mNetworkRequestList.size());

        log("setPhoneActive true: phoneId = " + phoneId);
        mPhoneSwitcherMock.setPhoneActive(phoneId, true);
        waitForMs(250);
        processAllMessages();
        assertEquals(1, mNetworkRequestList.size());
    }

@@ -266,50 +262,48 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest {
        mSubscriptionControllerMock.setDefaultDataSubId(subId);
        mSubscriptionControllerMock.setSlotSubId(phoneId, subId);
        mSubscriptionMonitorMock.notifySubscriptionChanged(phoneId);
        waitForMs(250);

        processAllMessages();
        assertEquals(0, mNetworkRequestList.size());

        mPhoneSwitcherMock.setPhoneActive(phoneId, true);
        waitForMs(250);
        processAllMessages();
        assertEquals(0, mNetworkRequestList.size());

        mConnectivityServiceMock.addDefaultRequest();
        waitForMs(250);
        processAllMessages();
        assertEquals(1, mNetworkRequestList.size());

        mSubscriptionControllerMock.setSlotSubId(altPhoneId, altSubId);
        waitForMs(250);
        processAllMessages();
        assertEquals(1, mNetworkRequestList.size());

        mPhoneSwitcherMock.setPreferredDataPhoneId(altPhoneId);
        mSubscriptionControllerMock.setDefaultDataSubId(altSubId);
        mPhoneSwitcherMock.notifyActivePhoneChange(phoneId);

        waitForMs(250);
        processAllMessages();
        assertEquals(0, mNetworkRequestList.size());

        makeSubSpecificMmsRequest(subId);
        waitForMs(250);
        processAllMessages();
        assertEquals(1, mNetworkRequestList.size());

        mSubscriptionControllerMock.setSlotSubId(phoneId, unusedSubId);
        mSubscriptionMonitorMock.notifySubscriptionChanged(phoneId);
        waitForMs(250);
        processAllMessages();
        assertEquals(0, mNetworkRequestList.size());

        makeSubSpecificInternetRequest(subId);
        waitForMs(250);
        processAllMessages();
        assertEquals(0, mNetworkRequestList.size());

        mSubscriptionControllerMock.setSlotSubId(phoneId, subId);
        mSubscriptionMonitorMock.notifySubscriptionChanged(phoneId);
        waitForMs(250);
        processAllMessages();

        mSubscriptionControllerMock.setDefaultDataSubId(subId);
        mPhoneSwitcherMock.setPreferredDataPhoneId(phoneId);
        mPhoneSwitcherMock.notifyActivePhoneChange(phoneId);
        waitForMs(250);
        processAllMessages();
        assertEquals(3, mNetworkRequestList.size());
    }

@@ -329,8 +323,7 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest {
        mConnectivityServiceMock.addDefaultRequest();

        makeSubSpecificMmsRequest(0);

        waitForMs(100);
        processAllMessages();

        Field f = TelephonyNetworkFactory.class.getDeclaredField("mInternalHandler");
        f.setAccessible(true);
@@ -342,7 +335,7 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest {
                AccessNetworkConstants.TRANSPORT_TYPE_WLAN, handoverCallback);
        AsyncResult ar = new AsyncResult(null, hp, null);
        h.sendMessage(h.obtainMessage(5, ar));
        waitForMs(100);
        processAllMessages();

        doReturn(AccessNetworkConstants.TRANSPORT_TYPE_WLAN).when(mTransportManager)
                .getCurrentTransport(anyInt());
@@ -351,6 +344,6 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest {
                handoverCallback);
        ar = new AsyncResult(null, hp, null);
        h.sendMessage(h.obtainMessage(5, ar));
        waitForMs(100);
        processAllMessages();
    }
}
+9 −7
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.internal.telephony.imsphone;

import static com.android.internal.telephony.TelephonyTestUtils.waitForMs;

import android.os.HandlerThread;
import android.os.ParcelFileDescriptor;
import android.telecom.Connection;
@@ -114,8 +116,8 @@ public class ImsRttTextHandlerTest extends TelephonyTest {
        // make sure at it hasn't been sent.
        Assert.assertEquals("", mNetworkWriter.getContents());
        // Wait for 300ms
        waitForHandlerActionDelayed(mRttTextHandler, TEST_TIMEOUT,
                ImsRttTextHandler.MAX_BUFFERING_DELAY_MILLIS + 100);
        waitForMs(ImsRttTextHandler.MAX_BUFFERING_DELAY_MILLIS + 100);
        waitForHandlerAction(mRttTextHandler, TEST_TIMEOUT);
        // make sure that it has been sent and check that it's correct
        Assert.assertEquals("abcd", mNetworkWriter.getContents());
    }
@@ -141,7 +143,7 @@ public class ImsRttTextHandlerTest extends TelephonyTest {
        Assert.assertEquals("", mNetworkWriter.getContents());

        // Send the second part
        Thread.sleep(10);
        waitForMs(10);
        // Register a read notifier
        readNotifier = new CountDownLatch(1);
        mRttTextHandler.setReadNotifier(readNotifier);
@@ -176,7 +178,7 @@ public class ImsRttTextHandlerTest extends TelephonyTest {
        for (char c : characters) {
            mPipeToHandler.write(String.valueOf(c));
            mPipeToHandler.flush();
            Thread.sleep(10);
            waitForMs(10);
        }
        waitForHandlerAction(mRttTextHandler, TEST_TIMEOUT);
        waitForHandlerAction(mRttTextHandler, TEST_TIMEOUT);
@@ -194,19 +196,19 @@ public class ImsRttTextHandlerTest extends TelephonyTest {
            String toSend = new String(characters, i, Math.min(3, characters.length - i));
            mPipeToHandler.write(toSend);
            mPipeToHandler.flush();
            Thread.sleep(10);
            waitForMs(10);
        }
        waitForHandlerAction(mRttTextHandler, TEST_TIMEOUT);
        waitForHandlerAction(mRttTextHandler, TEST_TIMEOUT);

        // Wait one second and see how many characters are sent in that time.
        int numCharsSoFar = mNetworkWriter.getContents().length();
        Thread.sleep(1000);
        waitForMs(1000);
        int numCharsInOneSec = mNetworkWriter.getContents().length() - numCharsSoFar;
        Assert.assertTrue(numCharsInOneSec <= ImsRttTextHandler.MAX_CODEPOINTS_PER_SECOND);

        // Wait 5 seconds for all the chars to make it through
        Thread.sleep(5000);
        waitForMs(5000);
        Assert.assertEquals(LONG_TEXT, mNetworkWriter.getContents());
    }

+4 −0
Original line number Diff line number Diff line
@@ -113,6 +113,10 @@ public class ConnectivityServiceMock {
        }
    }

    public HandlerThread getHandlerThread() {
        return mHandlerThread;
    }

    private class InternalHandler extends Handler {
        public InternalHandler(Looper looper) {
            super(looper);