summaryrefslogtreecommitdiff
path: root/services/tests/mockingservicestests/src/com/android/server/alarm/BackgroundRestrictedAlarmsTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'services/tests/mockingservicestests/src/com/android/server/alarm/BackgroundRestrictedAlarmsTest.java')
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/alarm/BackgroundRestrictedAlarmsTest.java195
1 files changed, 195 insertions, 0 deletions
diff --git a/services/tests/mockingservicestests/src/com/android/server/alarm/BackgroundRestrictedAlarmsTest.java b/services/tests/mockingservicestests/src/com/android/server/alarm/BackgroundRestrictedAlarmsTest.java
new file mode 100644
index 000000000000..12e953a4d4e8
--- /dev/null
+++ b/services/tests/mockingservicestests/src/com/android/server/alarm/BackgroundRestrictedAlarmsTest.java
@@ -0,0 +1,195 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.server.alarm;
+
+import static android.app.AlarmManager.RTC;
+import static android.app.AlarmManager.RTC_WAKEUP;
+
+import static org.junit.Assert.assertEquals;
+
+import android.platform.test.annotations.Presubmit;
+import android.util.SparseArray;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.internal.util.ObjectUtils;
+import com.android.server.alarm.AlarmManagerService.Alarm;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+
+@Presubmit
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class BackgroundRestrictedAlarmsTest {
+ private SparseArray<ArrayList<Alarm>> addPendingAlarm(
+ SparseArray<ArrayList<Alarm>> all, int uid, String name, boolean removeIt) {
+ ArrayList<Alarm> uidAlarms = all.get(uid);
+ if (uidAlarms == null) {
+ all.put(uid, uidAlarms = new ArrayList<>());
+ }
+ uidAlarms.add(new Alarm(
+ removeIt ? RTC : RTC_WAKEUP,
+ 0, 0, 0, 0, 0, null, null, null, null, 0, null, uid, name));
+ return all;
+ }
+
+ private static String toString(SparseArray<ArrayList<Alarm>> pendingAlarms) {
+ final StringBuilder sb = new StringBuilder();
+
+ String sep = "";
+ for (int i = 0; i < pendingAlarms.size(); i++) {
+ sb.append(sep);
+ sep = ", ";
+ sb.append("[");
+ sb.append(pendingAlarms.keyAt(i));
+ sb.append(": ");
+ sb.append(toString(pendingAlarms.valueAt(i)));
+ sb.append("]");
+ }
+ return sb.toString();
+ }
+
+ private static String toString(ArrayList<Alarm> alarms) {
+ final StringBuilder sb = new StringBuilder();
+
+ alarms.sort((a, b) -> ObjectUtils.compare(a.packageName, b.packageName));
+
+ String sep = "";
+ for (Alarm a : alarms) {
+ sb.append(sep);
+ sep = ", ";
+ sb.append(a.packageName);
+ }
+ return sb.toString();
+ }
+
+ private void runCheckAllPendingAlarms(
+ SparseArray<ArrayList<Alarm>> pending, ArrayList<Alarm> alarmsToDeliver) {
+ // RTC_WAKEUP alarms are restricted.
+ AlarmManagerService.findAllUnrestrictedPendingBackgroundAlarmsLockedInner(pending,
+ alarmsToDeliver, alarm -> alarm.type == RTC_WAKEUP);
+ }
+
+ @Test
+ public void findAllUnrestrictedPendingBackgroundAlarmsLockedInner_empty() {
+ SparseArray<ArrayList<Alarm>> pending = new SparseArray<>();
+
+ final ArrayList<Alarm> alarmsToDeliver = new ArrayList<>();
+
+ runCheckAllPendingAlarms(pending, alarmsToDeliver);
+
+ assertEquals("", toString(pending));
+ assertEquals("", toString(alarmsToDeliver));
+ }
+
+ @Test
+ public void findAllUnrestrictedPendingBackgroundAlarmsLockedInner_single_remove() {
+ SparseArray<ArrayList<Alarm>> pending = new SparseArray<>();
+
+ addPendingAlarm(pending, 100001, "a1", false);
+
+ final ArrayList<Alarm> alarmsToDeliver = new ArrayList<>();
+
+ runCheckAllPendingAlarms(pending, alarmsToDeliver);
+
+ assertEquals("[100001: a1]", toString(pending));
+ assertEquals("", toString(alarmsToDeliver));
+ }
+
+ @Test
+ public void findAllUnrestrictedPendingBackgroundAlarmsLockedInner_single_nonremove() {
+ SparseArray<ArrayList<Alarm>> pending = new SparseArray<>();
+
+ addPendingAlarm(pending, 100001, "a1", true);
+
+ final ArrayList<Alarm> alarmsToDeliver = new ArrayList<>();
+ runCheckAllPendingAlarms(pending, alarmsToDeliver);
+
+
+ assertEquals("", toString(pending));
+ assertEquals("a1", toString(alarmsToDeliver));
+ }
+
+ @Test
+ public void findAllUnrestrictedPendingBackgroundAlarmsLockedInner_complex() {
+ SparseArray<ArrayList<Alarm>> pending = new SparseArray<>();
+
+ addPendingAlarm(pending, 100001, "a11", false);
+ addPendingAlarm(pending, 100001, "a12", true);
+ addPendingAlarm(pending, 100001, "a13", false);
+ addPendingAlarm(pending, 100001, "a14", true);
+
+ addPendingAlarm(pending, 100002, "a21", false);
+
+ addPendingAlarm(pending, 100003, "a31", true);
+
+ addPendingAlarm(pending, 100004, "a41", false);
+ addPendingAlarm(pending, 100004, "a42", false);
+
+ addPendingAlarm(pending, 100005, "a51", true);
+ addPendingAlarm(pending, 100005, "a52", true);
+
+ addPendingAlarm(pending, 100006, "a61", true);
+ addPendingAlarm(pending, 100006, "a62", false);
+ addPendingAlarm(pending, 100006, "a63", true);
+ addPendingAlarm(pending, 100006, "a64", false);
+
+ final ArrayList<Alarm> alarmsToDeliver = new ArrayList<>();
+ runCheckAllPendingAlarms(pending, alarmsToDeliver);
+
+
+ assertEquals("[100001: a11, a13], [100002: a21], [100004: a41, a42], [100006: a62, a64]",
+ toString(pending));
+ assertEquals("a12, a14, a31, a51, a52, a61, a63", toString(alarmsToDeliver));
+ }
+
+ @Test
+ public void findAllUnrestrictedPendingBackgroundAlarmsLockedInner_complex_allRemove() {
+ SparseArray<ArrayList<Alarm>> pending = new SparseArray<>();
+
+ addPendingAlarm(pending, 100001, "a11", true);
+ addPendingAlarm(pending, 100001, "a12", true);
+ addPendingAlarm(pending, 100001, "a13", true);
+ addPendingAlarm(pending, 100001, "a14", true);
+
+ addPendingAlarm(pending, 100002, "a21", true);
+
+ addPendingAlarm(pending, 100003, "a31", true);
+
+ addPendingAlarm(pending, 100004, "a41", true);
+ addPendingAlarm(pending, 100004, "a42", true);
+
+ addPendingAlarm(pending, 100005, "a51", true);
+ addPendingAlarm(pending, 100005, "a52", true);
+
+ addPendingAlarm(pending, 100006, "a61", true);
+ addPendingAlarm(pending, 100006, "a62", true);
+ addPendingAlarm(pending, 100006, "a63", true);
+ addPendingAlarm(pending, 100006, "a64", true);
+
+ final ArrayList<Alarm> alarmsToDeliver = new ArrayList<>();
+ runCheckAllPendingAlarms(pending, alarmsToDeliver);
+
+
+ assertEquals("", toString(pending));
+ assertEquals("a11, a12, a13, a14, a21, a31, a41, a42, a51, a52, a61, a62, a63, a64",
+ toString(alarmsToDeliver));
+ }
+}