Merge "RESTRICT AUTOMERGE Do not throw exception for unknown device state policy" into tm-qpr-dev

This commit is contained in:
Nick Chameyev
2023-02-16 16:20:18 +00:00
committed by Android (Google) Code Review
2 changed files with 24 additions and 20 deletions

View File

@@ -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();
}
}
}

View File

@@ -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) {