summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Sudheer Shanka <sudheersai@google.com> 2024-08-12 22:27:38 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-08-12 22:27:38 +0000
commitb6eb5b62ff0f7ad18b1a6e8509e42afb8620a560 (patch)
tree676609b9ae1a99a8d1431df981b950767e0af969
parentbafc1f5a4e19842582a55ec1aae02e00d0b12f64 (diff)
parentf1e8e4c766bd3d0092842f863adbda333f80d898 (diff)
Merge "Verify arguments passed are non-null." into main
-rw-r--r--services/core/java/com/android/server/powerstats/PowerStatsService.java21
-rw-r--r--services/core/java/com/android/server/powerstats/flags.aconfig11
-rw-r--r--services/tests/powerstatstests/src/com/android/server/powerstats/PowerStatsServiceTest.java24
3 files changed, 53 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/powerstats/PowerStatsService.java b/services/core/java/com/android/server/powerstats/PowerStatsService.java
index 8f99d2836c63..1ca267e99c95 100644
--- a/services/core/java/com/android/server/powerstats/PowerStatsService.java
+++ b/services/core/java/com/android/server/powerstats/PowerStatsService.java
@@ -62,6 +62,7 @@ import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
+import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
@@ -207,19 +208,28 @@ public class PowerStatsService extends SystemService {
private final IBinder mService = new IPowerStatsService.Stub() {
@Override
- public void getSupportedPowerMonitors(ResultReceiver resultReceiver) {
+ public void getSupportedPowerMonitors(@NonNull ResultReceiver resultReceiver) {
+ if (Flags.verifyNonNullArguments()) {
+ Objects.requireNonNull(resultReceiver);
+ }
getHandler().post(() -> getSupportedPowerMonitorsImpl(resultReceiver));
}
@Override
- public void getPowerMonitorReadings(int[] powerMonitorIds, ResultReceiver resultReceiver) {
+ public void getPowerMonitorReadings(@NonNull int[] powerMonitorIds,
+ @NonNull ResultReceiver resultReceiver) {
+ if (Flags.verifyNonNullArguments()) {
+ Objects.requireNonNull(powerMonitorIds);
+ Objects.requireNonNull(resultReceiver);
+ }
int callingUid = Binder.getCallingUid();
getHandler().post(() ->
getPowerMonitorReadingsImpl(powerMonitorIds, resultReceiver, callingUid));
}
@Override
- protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ protected void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw,
+ @Nullable String[] args) {
if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;
if (mPowerStatsLogger == null) {
@@ -263,6 +273,11 @@ public class PowerStatsService extends SystemService {
}
};
+ @VisibleForTesting
+ IPowerStatsService getIPowerStatsServiceForTest() {
+ return (IPowerStatsService) mService;
+ }
+
private class DeviceConfigListener implements DeviceConfig.OnPropertiesChangedListener {
public Executor mExecutor = new HandlerExecutor(getHandler());
diff --git a/services/core/java/com/android/server/powerstats/flags.aconfig b/services/core/java/com/android/server/powerstats/flags.aconfig
index 0a4a7510aab8..29ad7dc2b18a 100644
--- a/services/core/java/com/android/server/powerstats/flags.aconfig
+++ b/services/core/java/com/android/server/powerstats/flags.aconfig
@@ -10,4 +10,15 @@ flag {
metadata {
purpose: PURPOSE_BUGFIX
}
+}
+
+flag {
+ name: "verify_non_null_arguments"
+ namespace: "backstage_power"
+ description: "Verify arguments passed are non-null"
+ bug: "356731520"
+ is_fixed_read_only: true
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
} \ No newline at end of file
diff --git a/services/tests/powerstatstests/src/com/android/server/powerstats/PowerStatsServiceTest.java b/services/tests/powerstatstests/src/com/android/server/powerstats/PowerStatsServiceTest.java
index 1838fe884561..53e31438c560 100644
--- a/services/tests/powerstatstests/src/com/android/server/powerstats/PowerStatsServiceTest.java
+++ b/services/tests/powerstatstests/src/com/android/server/powerstats/PowerStatsServiceTest.java
@@ -19,6 +19,7 @@ package com.android.server.powerstats;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -37,6 +38,8 @@ import android.os.IPowerStatsService;
import android.os.Looper;
import android.os.PowerMonitor;
import android.os.ResultReceiver;
+import android.platform.test.annotations.EnableFlags;
+import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.DeviceConfig;
import android.provider.DeviceConfigInterface;
@@ -58,6 +61,7 @@ import com.android.server.powerstats.nano.StateResidencyResultProto;
import com.android.server.testutils.FakeDeviceConfigInterface;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import java.io.ByteArrayOutputStream;
@@ -101,6 +105,8 @@ public class PowerStatsServiceTest {
private static final int STATE_RESIDENCY_COUNT = 4;
private static final int APP_UID = 10042;
+ @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
+
private final Context mContext = InstrumentationRegistry.getInstrumentation().getContext();
private PowerStatsService mService;
private TestPowerStatsHALWrapper mPowerStatsHALWrapper = new TestPowerStatsHALWrapper();
@@ -1198,4 +1204,22 @@ public class PowerStatsServiceTest {
assertThat(Arrays.stream(supportedPowerMonitorsResult.powerMonitors)
.map(PowerMonitor::getName).toList()).contains("ENERGYCONSUMER0");
}
+
+ @EnableFlags(Flags.FLAG_VERIFY_NON_NULL_ARGUMENTS)
+ @Test
+ public void testGetSupportedPowerMonitors_withNullArguments() {
+ IPowerStatsService iPowerStatsService = mService.getIPowerStatsServiceForTest();
+ assertThrows(NullPointerException.class,
+ () -> iPowerStatsService.getSupportedPowerMonitors(null));
+ }
+
+ @EnableFlags(Flags.FLAG_VERIFY_NON_NULL_ARGUMENTS)
+ @Test
+ public void testGetPowerMonitorReadings_withNullArguments() {
+ IPowerStatsService iPowerStatsService = mService.getIPowerStatsServiceForTest();
+ assertThrows(NullPointerException.class, () -> iPowerStatsService.getPowerMonitorReadings(
+ null, new GetPowerMonitorsResult()));
+ assertThrows(NullPointerException.class, () -> iPowerStatsService.getPowerMonitorReadings(
+ new int[] {0}, null));
+ }
}