From c9647bfbaf45bb0f4307aee2f3dc8c897dce2970 Mon Sep 17 00:00:00 2001 From: Nick Chameyev Date: Mon, 13 Feb 2023 17:17:59 +0000 Subject: [PATCH] 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 --- .../server/devicestate/DeviceStatePolicy.java | 10 ++++-- .../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 5c4e2f3426ee0..c876a8b76dc15 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 0bd81b78ac977..18dc35c9aa18d 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) {