summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/TEST_MAPPING9
-rw-r--r--services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/OWNERS3
-rw-r--r--services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file1.xml7
-rw-r--r--services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file2.xml16
-rw-r--r--services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file3.xml7
-rw-r--r--services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file4.xml10
-rw-r--r--services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file5.xml9
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/sensorprivacy/OWNERS3
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/sensorprivacy/SensorPrivacyServiceMockingTest.java142
9 files changed, 206 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/TEST_MAPPING b/services/core/java/com/android/server/TEST_MAPPING
index ceb12c8f483e..9e8b9c62ff51 100644
--- a/services/core/java/com/android/server/TEST_MAPPING
+++ b/services/core/java/com/android/server/TEST_MAPPING
@@ -36,6 +36,15 @@
}
],
"file_patterns": ["ClipboardService\\.java"]
+ },
+ {
+ "name": "FrameworksMockingServicesTests",
+ "options": [
+ {
+ "include-filter": "com.android.server.sensorprivacy"
+ }
+ ],
+ "file_patterns": ["SensorPrivacyService\\.java"]
}
],
"presubmit-large": [
diff --git a/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/OWNERS b/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/OWNERS
new file mode 100644
index 000000000000..c74393b102a8
--- /dev/null
+++ b/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/OWNERS
@@ -0,0 +1,3 @@
+# Bug component: 137825
+
+file:platform/frameworks/native:/libs/sensorprivacy/OWNERS
diff --git a/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file1.xml b/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file1.xml
new file mode 100644
index 000000000000..a4de08a85487
--- /dev/null
+++ b/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file1.xml
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
+<sensor-privacy persistence-version="1" version="1">
+ <user id="0" enabled="false">
+ <individual-sensor-privacy sensor="1" enabled="true" />
+ <individual-sensor-privacy sensor="2" enabled="true" />
+ </user>
+</sensor-privacy>
diff --git a/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file2.xml b/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file2.xml
new file mode 100644
index 000000000000..361075eba7da
--- /dev/null
+++ b/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file2.xml
@@ -0,0 +1,16 @@
+<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
+<sensor-privacy persistence-version="1" version="1">
+ <user id="0" enabled="false">
+ <individual-sensor-privacy sensor="1" enabled="true" />
+ <individual-sensor-privacy sensor="2" enabled="true" />
+ </user>
+ <user id="10" enabled="false">
+ <individual-sensor-privacy sensor="1" enabled="true" />
+ <individual-sensor-privacy sensor="2" enabled="false" />
+ </user>
+ <user id="11" enabled="false">
+ </user>
+ <user id="12" enabled="false">
+ <individual-sensor-privacy sensor="1" enabled="true" />
+ </user>
+</sensor-privacy>
diff --git a/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file3.xml b/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file3.xml
new file mode 100644
index 000000000000..e8f9edfde2d7
--- /dev/null
+++ b/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file3.xml
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
+<sensor-privacy persistence-version="1" version="1">
+ <user id="0" enabled="false">
+ <individual-sensor-privacy sensor="1" enabled="false" />
+ <individual-sensor-privacy sensor="2" enabled="false" />
+ </user>
+</sensor-privacy>
diff --git a/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file4.xml b/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file4.xml
new file mode 100644
index 000000000000..d26c27594773
--- /dev/null
+++ b/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file4.xml
@@ -0,0 +1,10 @@
+<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
+<sensor-privacy persistence-version="1" version="1">
+ <user id="0" enabled="false">
+ <individual-sensor-privacy sensor="1" enabled="true" />
+ <individual-sensor-privacy sensor="2" enabled="false" />
+ </user>
+ <user id="10" enabled="false">
+ <individual-sensor-privacy sensor="1" enabled="false" />
+ </user>
+</sensor-privacy>
diff --git a/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file5.xml b/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file5.xml
new file mode 100644
index 000000000000..5c9d0cdccd1b
--- /dev/null
+++ b/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file5.xml
@@ -0,0 +1,9 @@
+<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
+<sensor-privacy persistence-version="1" version="1">
+ <user id="0" enabled="false">
+ <individual-sensor-privacy sensor="2" enabled="false" />
+ </user>
+ <user id="10" enabled="false">
+ <individual-sensor-privacy sensor="2" enabled="false" />
+ </user>
+</sensor-privacy>
diff --git a/services/tests/mockingservicestests/src/com/android/server/sensorprivacy/OWNERS b/services/tests/mockingservicestests/src/com/android/server/sensorprivacy/OWNERS
new file mode 100644
index 000000000000..c74393b102a8
--- /dev/null
+++ b/services/tests/mockingservicestests/src/com/android/server/sensorprivacy/OWNERS
@@ -0,0 +1,3 @@
+# Bug component: 137825
+
+file:platform/frameworks/native:/libs/sensorprivacy/OWNERS
diff --git a/services/tests/mockingservicestests/src/com/android/server/sensorprivacy/SensorPrivacyServiceMockingTest.java b/services/tests/mockingservicestests/src/com/android/server/sensorprivacy/SensorPrivacyServiceMockingTest.java
new file mode 100644
index 000000000000..844687f34555
--- /dev/null
+++ b/services/tests/mockingservicestests/src/com/android/server/sensorprivacy/SensorPrivacyServiceMockingTest.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2021 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.sensorprivacy;
+
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
+
+import android.app.ActivityManager;
+import android.app.ActivityTaskManager;
+import android.app.AppOpsManager;
+import android.content.Context;
+import android.content.pm.UserInfo;
+import android.os.Environment;
+import android.telephony.TelephonyManager;
+import android.testing.AndroidTestingRunner;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+
+import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.server.LocalServices;
+import com.android.server.SensorPrivacyService;
+import com.android.server.pm.UserManagerInternal;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoSession;
+import org.mockito.quality.Strictness;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+
+@RunWith(AndroidTestingRunner.class)
+public class SensorPrivacyServiceMockingTest {
+
+ private static final String PERSISTENCE_FILE_PATHS_TEMPLATE =
+ "SensorPrivacyServiceMockingTest/persisted_file%d.xml";
+ public static final String PERSISTENCE_FILE1 =
+ String.format(PERSISTENCE_FILE_PATHS_TEMPLATE, 1);
+ public static final String PERSISTENCE_FILE2 =
+ String.format(PERSISTENCE_FILE_PATHS_TEMPLATE, 2);
+ public static final String PERSISTENCE_FILE3 =
+ String.format(PERSISTENCE_FILE_PATHS_TEMPLATE, 3);
+ public static final String PERSISTENCE_FILE4 =
+ String.format(PERSISTENCE_FILE_PATHS_TEMPLATE, 4);
+ public static final String PERSISTENCE_FILE5 =
+ String.format(PERSISTENCE_FILE_PATHS_TEMPLATE, 5);
+
+ private Context mContext;
+ @Mock
+ private AppOpsManager mMockedAppOpsManager;
+ @Mock
+ private UserManagerInternal mMockedUserManagerInternal;
+ @Mock
+ private ActivityManager mMockedActivityManager;
+ @Mock
+ private ActivityTaskManager mMockedActivityTaskManager;
+ @Mock
+ private TelephonyManager mMockedTelephonyManager;
+
+ @Test
+ public void testServiceInit() throws IOException {
+ MockitoSession mockitoSession = ExtendedMockito.mockitoSession()
+ .initMocks(this)
+ .strictness(Strictness.WARN)
+ .spyStatic(LocalServices.class)
+ .spyStatic(Environment.class)
+ .startMocking();
+
+ try {
+ mContext = InstrumentationRegistry.getInstrumentation().getContext();
+ spyOn(mContext);
+
+ doReturn(mMockedAppOpsManager).when(mContext).getSystemService(AppOpsManager.class);
+ doReturn(mMockedUserManagerInternal)
+ .when(() -> LocalServices.getService(UserManagerInternal.class));
+ doReturn(mMockedActivityManager).when(mContext).getSystemService(ActivityManager.class);
+ doReturn(mMockedActivityTaskManager)
+ .when(mContext).getSystemService(ActivityTaskManager.class);
+ doReturn(mMockedTelephonyManager).when(mContext).getSystemService(
+ TelephonyManager.class);
+
+ String dataDir = mContext.getApplicationInfo().dataDir;
+ doReturn(new File(dataDir)).when(() -> Environment.getDataSystemDirectory());
+
+ File onDeviceFile = new File(dataDir, "sensor_privacy.xml");
+ onDeviceFile.delete();
+
+ // Try all files with one known user
+ doReturn(new int[]{0}).when(mMockedUserManagerInternal).getUserIds();
+ doReturn(ExtendedMockito.mock(UserInfo.class)).when(mMockedUserManagerInternal)
+ .getUserInfo(0);
+ initServiceWithPersistenceFile(onDeviceFile, null);
+ initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE1);
+ initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE2);
+ initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE3);
+ initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE4);
+ initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE5);
+
+ // Try all files with two known users
+ doReturn(new int[]{0, 10}).when(mMockedUserManagerInternal).getUserIds();
+ doReturn(ExtendedMockito.mock(UserInfo.class)).when(mMockedUserManagerInternal)
+ .getUserInfo(0);
+ doReturn(ExtendedMockito.mock(UserInfo.class)).when(mMockedUserManagerInternal)
+ .getUserInfo(10);
+ initServiceWithPersistenceFile(onDeviceFile, null);
+ initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE1);
+ initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE2);
+ initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE3);
+ initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE4);
+ initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE5);
+
+ } finally {
+ mockitoSession.finishMocking();
+ }
+ }
+
+ private void initServiceWithPersistenceFile(File onDeviceFile,
+ String persistenceFilePath) throws IOException {
+ if (persistenceFilePath != null) {
+ Files.copy(mContext.getAssets().open(persistenceFilePath),
+ onDeviceFile.toPath());
+ }
+ new SensorPrivacyService(mContext);
+ onDeviceFile.delete();
+ }
+}