summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Chameyev <nickchameyev@google.com>2023-02-13 17:17:59 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-02-18 07:55:58 +0000
commit048eeeb47e0ed836234da6adf75d5f5a5befd74a (patch)
treee1ad69f23e52918fe4a0cdb74c1282c3e864878e
parentcd4851c30bcd65287962bb28f90f0e485203cbb7 (diff)
downloadbase-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.java10
-rw-r--r--services/tests/servicestests/src/com/android/server/devicestate/DeviceStatePolicyProviderTest.java34
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) {