From 9f71403e1d9a84a0bbe7cf7a870c2dab3efa0804 Mon Sep 17 00:00:00 2001 From: Andrei Litvin Date: Thu, 16 Apr 2020 15:57:36 -0400 Subject: [PATCH] Fix unit test for TVRemoteProviderWatcherTest.java. Previous submit used the wrong unit test name as a check and apparently presubmits did not catch the bug. TVRemoteProvider package loading is done in the constructor and the test needs to re-create the teste object whenever changing package configuration. Bug: 150766750 Test: atest services/tests/servicestests/src/com/android/server/tv/TvRemoteProviderWatcherTest.java Change-Id: Ide38af5490b7d88edbb893f7a1a93c7b47beca85 --- .../server/tv/TvRemoteProviderWatcher.java | 8 +++++-- .../tv/TvRemoteProviderWatcherTest.java | 24 ++++++++++++------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/services/core/java/com/android/server/tv/TvRemoteProviderWatcher.java b/services/core/java/com/android/server/tv/TvRemoteProviderWatcher.java index f59d431d43828..6e180bc69c5d9 100644 --- a/services/core/java/com/android/server/tv/TvRemoteProviderWatcher.java +++ b/services/core/java/com/android/server/tv/TvRemoteProviderWatcher.java @@ -59,9 +59,9 @@ final class TvRemoteProviderWatcher { private boolean mRunning; - TvRemoteProviderWatcher(Context context, Object lock) { + TvRemoteProviderWatcher(Context context, Object lock, Handler handler) { mContext = context; - mHandler = new Handler(true); + mHandler = handler; mUserId = UserHandle.myUserId(); mPackageManager = context.getPackageManager(); mLock = lock; @@ -79,6 +79,10 @@ final class TvRemoteProviderWatcher { }); } + TvRemoteProviderWatcher(Context context, Object lock) { + this(context, lock, new Handler(true)); + } + public void start() { if (DEBUG) Slog.d(TAG, "start()"); if (!mRunning) { diff --git a/services/tests/servicestests/src/com/android/server/tv/TvRemoteProviderWatcherTest.java b/services/tests/servicestests/src/com/android/server/tv/TvRemoteProviderWatcherTest.java index 55e526f01aef4..d64ad935c7b10 100644 --- a/services/tests/servicestests/src/com/android/server/tv/TvRemoteProviderWatcherTest.java +++ b/services/tests/servicestests/src/com/android/server/tv/TvRemoteProviderWatcherTest.java @@ -29,6 +29,7 @@ import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.ServiceInfo; import android.content.res.Resources; +import android.os.Handler; import android.os.Looper; import androidx.test.filters.SmallTest; @@ -88,7 +89,12 @@ public class TvRemoteProviderWatcherTest { // Test intentionally includes empty spacing for a more complex test when(mMockResources.getString(com.android.internal.R.string.config_tvRemoteServicePackage)) .thenReturn(",,foo, " + TV_REMOTE_SERVICE_PACKAGE_NAME + ",bar, baz,,"); - assertTrue(mTvRemoteProviderWatcher.verifyServiceTrusted(createTvServiceInfo())); + + // Re-create the object since package name is loaded in the constructor + TvRemoteProviderWatcher watcher = + new TvRemoteProviderWatcher( + mMockContext, new Object(), new Handler(Looper.getMainLooper())); + assertTrue(watcher.verifyServiceTrusted(createTvServiceInfo())); } @Test @@ -96,7 +102,12 @@ public class TvRemoteProviderWatcherTest { // Checks include empty strings to validate that processing as well when(mMockResources.getString(com.android.internal.R.string.config_tvRemoteServicePackage)) .thenReturn(",,foo,, ,bar, baz,,"); - assertFalse(mTvRemoteProviderWatcher.verifyServiceTrusted(createTvServiceInfo())); + + // Re-create the object since package name is loaded in the constructor + TvRemoteProviderWatcher watcher = + new TvRemoteProviderWatcher( + mMockContext, new Object(), new Handler(Looper.getMainLooper())); + assertFalse(watcher.verifyServiceTrusted(createTvServiceInfo())); } @Test @@ -139,14 +150,9 @@ public class TvRemoteProviderWatcherTest { public void whitelistingPackageNameIsRequired() { reset(mMockResources); when(mMockResources.getString(anyInt())).thenReturn(""); - - // Create a new watcher, as the resources are read in the constructor of the class - if (Looper.myLooper() == null) { - Looper.prepare(); - } - TvRemoteProviderWatcher watcher = - new TvRemoteProviderWatcher(mMockContext, new Object()); + new TvRemoteProviderWatcher( + mMockContext, new Object(), new Handler(Looper.getMainLooper())); assertFalse(watcher.verifyServiceTrusted(createTvServiceInfo())); }