From 1706bcddd5d5ad04db51ab03d16f9faafd8f5ef1 Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Wed, 29 Nov 2017 15:20:45 -0800 Subject: [PATCH] Fix cross-user content resolver tests. Wait for the user to get unlocked before trying to start an encryption-unaware app in that user. Fixes: 69927817 Test: adb shell am instrument -e class android.content.ManagedUserContentResolverTest -w com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner Change-Id: I36f38d20c7f4584a68bc3b1b99941ce3e3b3815c --- .../AbstractCrossUserContentResolverTest.java | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/core/tests/coretests/src/android/content/AbstractCrossUserContentResolverTest.java b/core/tests/coretests/src/android/content/AbstractCrossUserContentResolverTest.java index 5f6f62a67b053..978ea7aa9c007 100644 --- a/core/tests/coretests/src/android/content/AbstractCrossUserContentResolverTest.java +++ b/core/tests/coretests/src/android/content/AbstractCrossUserContentResolverTest.java @@ -45,8 +45,9 @@ import java.util.concurrent.TimeUnit; @LargeTest @RunWith(AndroidJUnit4.class) abstract class AbstractCrossUserContentResolverTest { - private final static int TIMEOUT_SERVICE_CONNECTION_SEC = 4; - private final static int TIMEOUT_CONTENT_CHANGE_SEC = 4; + private static final int TIMEOUT_SERVICE_CONNECTION_SEC = 4; + private static final int TIMEOUT_CONTENT_CHANGE_SEC = 4; + private static final int TIMEOUT_USER_UNLOCK_SEC = 4; private Context mContext; protected UserManager mUm; @@ -61,7 +62,7 @@ abstract class AbstractCrossUserContentResolverTest { mCrossUserId = userInfo.id; final PackageManager pm = mContext.getPackageManager(); pm.installExistingPackageAsUser(mContext.getPackageName(), mCrossUserId); - ActivityManager.getService().startUserInBackground(mCrossUserId); + unlockUser(); final CountDownLatch connectionLatch = new CountDownLatch(1); mServiceConnection = new CrossUserContentServiceConnection(connectionLatch); @@ -77,6 +78,30 @@ abstract class AbstractCrossUserContentResolverTest { protected abstract UserInfo createUser() throws RemoteException ; + private void unlockUser() throws Exception { + final CountDownLatch latch = new CountDownLatch(1); + final BroadcastReceiver receiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL) + == mCrossUserId) { + latch.countDown(); + } + } + }; + mContext.registerReceiverAsUser(receiver, UserHandle.of(mCrossUserId), + new IntentFilter(Intent.ACTION_USER_UNLOCKED), null, null); + ActivityManager.getService().startUserInBackground(mCrossUserId); + + try { + if (!latch.await(TIMEOUT_USER_UNLOCK_SEC, TimeUnit.SECONDS)) { + fail("Timed out waiting for the u" + mCrossUserId + " to unlock"); + } + } finally { + mContext.unregisterReceiver(receiver); + } + } + @After public void tearDown() throws Exception { if (mCrossUserId != -1) {