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

Commit bd676f24 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Remove Thread.sleep in Telephony unittests" into stage-aosp-master

parents bba3f348 28e91b51
Loading
Loading
Loading
Loading
+0 −14
Original line number Diff line number Diff line
@@ -738,7 +738,6 @@ public abstract class TelephonyTest {
                "mContentProvider", providerHolder, iContentProvider);
    }

    // TODO(b/138886216): remove method after refactor
    protected final void waitForHandlerAction(Handler h, long timeoutMillis) {
        final CountDownLatch lock = new CountDownLatch(1);
        h.post(lock::countDown);
@@ -777,19 +776,6 @@ public abstract class TelephonyTest {
        assertTrue("Handler was not empty before timeout elapsed", timeoutCount < 5);
    }

    // TODO(b/138886216): remove method after refactor
    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);