diff options
author | Nick Chameyev <nickchameyev@google.com> | 2023-02-13 17:17:59 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-02-18 07:55:58 +0000 |
commit | 048eeeb47e0ed836234da6adf75d5f5a5befd74a (patch) | |
tree | e1ad69f23e52918fe4a0cdb74c1282c3e864878e | |
parent | cd4851c30bcd65287962bb28f90f0e485203cbb7 (diff) | |
download | base-048eeeb47e0ed836234da6adf75d5f5a5befd74a.tar.gz |
RESTRICT AUTOMERGE Do not throw exception for unknown device state policy
Disables behavior when we throw an exception
when the class with a custom device state
policy not found.
Test: atest com.android.server.devicestate.DeviceStatePolicyProviderTest
Bug: 253490171
Change-Id: I25dcef291cc2700e7957c150f91bc2b94913bfe3
(cherry picked from commit c9647bfbaf45bb0f4307aee2f3dc8c897dce2970)
(cherry picked from commit 88f1188953e105c096d200505bdb0f6478cdf2fc)
Merged-In: I25dcef291cc2700e7957c150f91bc2b94913bfe3
-rw-r--r-- | services/core/java/com/android/server/devicestate/DeviceStatePolicy.java | 10 | ||||
-rw-r--r-- | services/tests/servicestests/src/com/android/server/devicestate/DeviceStatePolicyProviderTest.java | 34 |
2 files changed, 24 insertions, 20 deletions
diff --git a/services/core/java/com/android/server/devicestate/DeviceStatePolicy.java b/services/core/java/com/android/server/devicestate/DeviceStatePolicy.java index 5c4e2f3426ee..c876a8b76dc1 100644 --- a/services/core/java/com/android/server/devicestate/DeviceStatePolicy.java +++ b/services/core/java/com/android/server/devicestate/DeviceStatePolicy.java @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.content.Context; import android.content.res.Resources; import android.text.TextUtils; +import android.util.Slog; import com.android.server.policy.DeviceStatePolicyImpl; @@ -92,11 +93,16 @@ public abstract class DeviceStatePolicy { try { return (DeviceStatePolicy.Provider) Class.forName(name).newInstance(); - } catch (ReflectiveOperationException | ClassCastException e) { + } catch (ClassCastException e) { throw new IllegalStateException("Couldn't instantiate class " + name + " for config_deviceSpecificDeviceStatePolicyProvider:" + " make sure it has a public zero-argument constructor" - + " and implements DeviceStatePolicy.Provider", e); + + " and implements DeviceStatePolicy.Provider"); + } catch (ReflectiveOperationException e) { + Slog.e("DeviceStatePolicy", "Couldn't instantiate class " + name + + " for config_deviceSpecificDeviceStatePolicyProvider:" + + " using default provider", e); + return new DeviceStatePolicy.DefaultProvider(); } } } diff --git a/services/tests/servicestests/src/com/android/server/devicestate/DeviceStatePolicyProviderTest.java b/services/tests/servicestests/src/com/android/server/devicestate/DeviceStatePolicyProviderTest.java index 0bd81b78ac97..18dc35c9aa18 100644 --- a/services/tests/servicestests/src/com/android/server/devicestate/DeviceStatePolicyProviderTest.java +++ b/services/tests/servicestests/src/com/android/server/devicestate/DeviceStatePolicyProviderTest.java @@ -16,6 +16,8 @@ package com.android.server.devicestate; +import static org.hamcrest.Matchers.instanceOf; +import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.testng.Assert.assertThrows; @@ -24,8 +26,6 @@ import android.content.Context; import android.content.res.Resources; import android.platform.test.annotations.Presubmit; -import org.hamcrest.Matchers; -import org.junit.Assert; import org.junit.Test; /** @@ -39,37 +39,35 @@ public class DeviceStatePolicyProviderTest { @Test public void test_emptyPolicyProvider() { - Assert.assertThat(DeviceStatePolicy.Provider.fromResources(resourcesWithProvider("")), - Matchers.instanceOf(DeviceStatePolicy.DefaultProvider.class)); + assertThat(DeviceStatePolicy.Provider.fromResources(resourcesWithProvider("")), + instanceOf(DeviceStatePolicy.DefaultProvider.class)); } @Test public void test_nullPolicyProvider() { - Assert.assertThat(DeviceStatePolicy.Provider.fromResources(resourcesWithProvider(null)), - Matchers.instanceOf(DeviceStatePolicy.DefaultProvider.class)); + assertThat(DeviceStatePolicy.Provider.fromResources(resourcesWithProvider(null)), + instanceOf(DeviceStatePolicy.DefaultProvider.class)); } @Test public void test_customPolicyProvider() { - Assert.assertThat(DeviceStatePolicy.Provider.fromResources(resourcesWithProvider( - TestProvider.class.getName())), - Matchers.instanceOf(TestProvider.class)); + assertThat(DeviceStatePolicy.Provider.fromResources(resourcesWithProvider( + TestProvider.class.getName())), + instanceOf(TestProvider.class)); } @Test public void test_badPolicyProvider_notImplementingProviderInterface() { - assertThrows(IllegalStateException.class, () -> { - DeviceStatePolicy.Provider.fromResources(resourcesWithProvider( - Object.class.getName())); - }); + assertThrows(IllegalStateException.class, () -> + DeviceStatePolicy.Provider.fromResources(resourcesWithProvider( + Object.class.getName()))); } @Test - public void test_badPolicyProvider_doesntExist() { - assertThrows(IllegalStateException.class, () -> { - DeviceStatePolicy.Provider.fromResources(resourcesWithProvider( - "com.android.devicestate.nonexistent.policy")); - }); + public void test_badPolicyProvider_returnsDefault() { + assertThat(DeviceStatePolicy.Provider.fromResources( + resourcesWithProvider("com.android.devicestate.nonexistent.policy")), + instanceOf(DeviceStatePolicy.DefaultProvider.class)); } private static Resources resourcesWithProvider(String provider) { |