Merge "Add missing permission tests for VibratorManagerService" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
a6c75050f3
14
TEST_MAPPING
14
TEST_MAPPING
@@ -38,6 +38,20 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "FrameworkPermissionTests",
|
||||||
|
"options": [
|
||||||
|
{
|
||||||
|
"include-annotation": "android.platform.test.annotations.Presubmit"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"exclude-annotation": "androidx.test.filters.FlakyTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"exclude-annotation": "org.junit.Ignore"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "FrameworksServicesTests",
|
"name": "FrameworksServicesTests",
|
||||||
"options": [
|
"options": [
|
||||||
|
|||||||
@@ -13,9 +13,14 @@ android_test {
|
|||||||
srcs: ["src/**/*.java"],
|
srcs: ["src/**/*.java"],
|
||||||
libs: [
|
libs: [
|
||||||
"android.test.runner",
|
"android.test.runner",
|
||||||
"telephony-common",
|
|
||||||
"android.test.base",
|
"android.test.base",
|
||||||
|
"telephony-common",
|
||||||
|
],
|
||||||
|
static_libs: [
|
||||||
|
"androidx.test.runner",
|
||||||
|
"junit",
|
||||||
|
"platform-test-annotations",
|
||||||
],
|
],
|
||||||
static_libs: ["junit"],
|
|
||||||
platform_apis: true,
|
platform_apis: true,
|
||||||
|
test_suites: ["device-tests"],
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,9 +24,10 @@
|
|||||||
|
|
||||||
<!--
|
<!--
|
||||||
The test declared in this instrumentation can be run via this command
|
The test declared in this instrumentation can be run via this command
|
||||||
"adb shell am instrument -w com.android.framework.permission.tests/android.test.InstrumentationTestRunner"
|
$ adb shell am instrument \
|
||||||
|
-w com.android.framework.permission.tests/androidx.test.runner.AndroidJUnitRunner
|
||||||
-->
|
-->
|
||||||
<instrumentation android:name="android.test.InstrumentationTestRunner"
|
<instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
|
||||||
android:targetPackage="com.android.framework.permission.tests"
|
android:targetPackage="com.android.framework.permission.tests"
|
||||||
android:label="Tests for private API framework permissions"/>
|
android:label="Tests for private API framework permissions"/>
|
||||||
|
|
||||||
|
|||||||
@@ -16,69 +16,135 @@
|
|||||||
|
|
||||||
package com.android.framework.permission.tests;
|
package com.android.framework.permission.tests;
|
||||||
|
|
||||||
|
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
|
||||||
|
|
||||||
|
import static junit.framework.Assert.fail;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
import android.os.CombinedVibrationEffect;
|
import android.os.CombinedVibrationEffect;
|
||||||
import android.os.IBinder;
|
|
||||||
import android.os.IVibratorManagerService;
|
import android.os.IVibratorManagerService;
|
||||||
|
import android.os.IVibratorStateListener;
|
||||||
import android.os.Process;
|
import android.os.Process;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.ServiceManager;
|
import android.os.ServiceManager;
|
||||||
import android.os.VibrationAttributes;
|
import android.os.VibrationAttributes;
|
||||||
import android.os.VibrationEffect;
|
import android.os.VibrationEffect;
|
||||||
import android.test.suitebuilder.annotation.SmallTest;
|
import android.platform.test.annotations.Presubmit;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Rule;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.rules.ExpectedException;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.junit.runners.JUnit4;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verify that Hardware apis cannot be called without required permissions.
|
* Verify that Hardware apis cannot be called without required permissions.
|
||||||
*/
|
*/
|
||||||
@SmallTest
|
@Presubmit
|
||||||
public class VibratorManagerServicePermissionTest extends TestCase {
|
@RunWith(JUnit4.class)
|
||||||
|
public class VibratorManagerServicePermissionTest {
|
||||||
|
|
||||||
|
private static final String PACKAGE_NAME = "com.android.framework.permission.tests";
|
||||||
|
private static final CombinedVibrationEffect EFFECT =
|
||||||
|
CombinedVibrationEffect.createSynced(
|
||||||
|
VibrationEffect.createOneShot(100, VibrationEffect.DEFAULT_AMPLITUDE));
|
||||||
|
private static final VibrationAttributes ATTRS = new VibrationAttributes.Builder()
|
||||||
|
.setUsage(VibrationAttributes.USAGE_ALARM)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public ExpectedException exceptionRule = ExpectedException.none();
|
||||||
|
|
||||||
private IVibratorManagerService mVibratorService;
|
private IVibratorManagerService mVibratorService;
|
||||||
|
|
||||||
@Override
|
@Before
|
||||||
protected void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
mVibratorService = IVibratorManagerService.Stub.asInterface(
|
mVibratorService = IVibratorManagerService.Stub.asInterface(
|
||||||
ServiceManager.getService(Context.VIBRATOR_MANAGER_SERVICE));
|
ServiceManager.getService(Context.VIBRATOR_MANAGER_SERVICE));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@After
|
||||||
* Test that calling {@link android.os.IVibratorManagerService#vibrate(int, String,
|
public void cleanUp() {
|
||||||
* CombinedVibrationEffect, VibrationAttributes, String, IBinder)} requires permissions.
|
getInstrumentation().getUiAutomation().dropShellPermissionIdentity();
|
||||||
* <p>Tests permission:
|
|
||||||
* {@link android.Manifest.permission#VIBRATE}
|
|
||||||
*/
|
|
||||||
public void testVibrate() throws RemoteException {
|
|
||||||
try {
|
|
||||||
CombinedVibrationEffect effect =
|
|
||||||
CombinedVibrationEffect.createSynced(
|
|
||||||
VibrationEffect.createOneShot(100, VibrationEffect.DEFAULT_AMPLITUDE));
|
|
||||||
VibrationAttributes attrs = new VibrationAttributes.Builder()
|
|
||||||
.setUsage(VibrationAttributes.USAGE_ALARM)
|
|
||||||
.build();
|
|
||||||
mVibratorService.vibrate(Process.myUid(), null, effect, attrs,
|
|
||||||
"testVibrate", new Binder());
|
|
||||||
fail("vibrate did not throw SecurityException as expected");
|
|
||||||
} catch (SecurityException e) {
|
|
||||||
// expected
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Test
|
||||||
* Test that calling {@link android.os.IVibratorManagerService#cancelVibrate(IBinder)} requires
|
public void testIsVibratingFails() throws RemoteException {
|
||||||
* permissions.
|
expectSecurityException("ACCESS_VIBRATOR_STATE");
|
||||||
* <p>Tests permission:
|
mVibratorService.isVibrating(1);
|
||||||
* {@link android.Manifest.permission#VIBRATE}
|
}
|
||||||
*/
|
|
||||||
public void testCancelVibrate() throws RemoteException {
|
@Test
|
||||||
try {
|
public void testRegisterVibratorStateListenerFails() throws RemoteException {
|
||||||
mVibratorService.cancelVibrate(new Binder());
|
expectSecurityException("ACCESS_VIBRATOR_STATE");
|
||||||
fail("cancelVibrate did not throw SecurityException as expected");
|
IVibratorStateListener listener = new IVibratorStateListener.Stub() {
|
||||||
} catch (SecurityException e) {
|
@Override
|
||||||
// expected
|
public void onVibrating(boolean vibrating) {
|
||||||
}
|
fail("Listener callback was not expected.");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
mVibratorService.registerVibratorStateListener(1, listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUnregisterVibratorStateListenerFails() throws RemoteException {
|
||||||
|
expectSecurityException("ACCESS_VIBRATOR_STATE");
|
||||||
|
mVibratorService.unregisterVibratorStateListener(1, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSetAlwaysOnEffectFails() throws RemoteException {
|
||||||
|
expectSecurityException("VIBRATE_ALWAYS_ON");
|
||||||
|
mVibratorService.setAlwaysOnEffect(Process.myUid(), PACKAGE_NAME, 1, EFFECT, ATTRS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testVibrateWithoutPermissionFails() throws RemoteException {
|
||||||
|
expectSecurityException("VIBRATE");
|
||||||
|
mVibratorService.vibrate(Process.myUid(), PACKAGE_NAME, EFFECT, ATTRS, "testVibrate",
|
||||||
|
new Binder());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testVibrateWithVibratePermissionAndSameProcessUidIsAllowed()
|
||||||
|
throws RemoteException {
|
||||||
|
getInstrumentation().getUiAutomation().adoptShellPermissionIdentity(
|
||||||
|
Manifest.permission.VIBRATE);
|
||||||
|
mVibratorService.vibrate(Process.myUid(), PACKAGE_NAME, EFFECT, ATTRS, "testVibrate",
|
||||||
|
new Binder());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testVibrateWithVibratePermissionAndDifferentUidsFails() throws RemoteException {
|
||||||
|
expectSecurityException("UPDATE_APP_OPS_STATS");
|
||||||
|
getInstrumentation().getUiAutomation().adoptShellPermissionIdentity(
|
||||||
|
Manifest.permission.VIBRATE);
|
||||||
|
mVibratorService.vibrate(Process.SYSTEM_UID, "android", EFFECT, ATTRS, "testVibrate",
|
||||||
|
new Binder());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testVibrateWithAllPermissionsAndDifferentUidsIsAllowed() throws RemoteException {
|
||||||
|
getInstrumentation().getUiAutomation().adoptShellPermissionIdentity(
|
||||||
|
Manifest.permission.VIBRATE,
|
||||||
|
Manifest.permission.UPDATE_APP_OPS_STATS);
|
||||||
|
mVibratorService.vibrate(Process.SYSTEM_UID, "android", EFFECT, ATTRS, "testVibrate",
|
||||||
|
new Binder());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCancelVibrateFails() throws RemoteException {
|
||||||
|
expectSecurityException("VIBRATE");
|
||||||
|
mVibratorService.cancelVibrate(new Binder());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void expectSecurityException(String expectedPermission) {
|
||||||
|
exceptionRule.expect(SecurityException.class);
|
||||||
|
exceptionRule.expectMessage("permission." + expectedPermission);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user