diff options
-rw-r--r-- | TEST_MAPPING | 14 | ||||
-rw-r--r-- | tests/permission/Android.bp | 9 | ||||
-rw-r--r-- | tests/permission/AndroidManifest.xml | 5 | ||||
-rw-r--r-- | tests/permission/src/com/android/framework/permission/tests/VibratorManagerServicePermissionTest.java | 146 |
4 files changed, 130 insertions, 44 deletions
diff --git a/TEST_MAPPING b/TEST_MAPPING index 6c265bc1a338..d08c52782fb3 100644 --- a/TEST_MAPPING +++ b/TEST_MAPPING @@ -39,6 +39,20 @@ ] }, { + "name": "FrameworkPermissionTests", + "options": [ + { + "include-annotation": "android.platform.test.annotations.Presubmit" + }, + { + "exclude-annotation": "androidx.test.filters.FlakyTest" + }, + { + "exclude-annotation": "org.junit.Ignore" + } + ] + }, + { "name": "FrameworksServicesTests", "options": [ { diff --git a/tests/permission/Android.bp b/tests/permission/Android.bp index bbc2358d206e..d06809b209a0 100644 --- a/tests/permission/Android.bp +++ b/tests/permission/Android.bp @@ -13,9 +13,14 @@ android_test { srcs: ["src/**/*.java"], libs: [ "android.test.runner", - "telephony-common", "android.test.base", + "telephony-common", + ], + static_libs: [ + "androidx.test.runner", + "junit", + "platform-test-annotations", ], - static_libs: ["junit"], platform_apis: true, + test_suites: ["device-tests"], } diff --git a/tests/permission/AndroidManifest.xml b/tests/permission/AndroidManifest.xml index b19bf006cfeb..9ff5fb39bc4b 100644 --- a/tests/permission/AndroidManifest.xml +++ b/tests/permission/AndroidManifest.xml @@ -24,9 +24,10 @@ <!-- 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:label="Tests for private API framework permissions"/> diff --git a/tests/permission/src/com/android/framework/permission/tests/VibratorManagerServicePermissionTest.java b/tests/permission/src/com/android/framework/permission/tests/VibratorManagerServicePermissionTest.java index 0f920b36cffd..fe6854316133 100644 --- a/tests/permission/src/com/android/framework/permission/tests/VibratorManagerServicePermissionTest.java +++ b/tests/permission/src/com/android/framework/permission/tests/VibratorManagerServicePermissionTest.java @@ -16,69 +16,135 @@ 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.os.Binder; import android.os.CombinedVibrationEffect; -import android.os.IBinder; import android.os.IVibratorManagerService; +import android.os.IVibratorStateListener; import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; import android.os.VibrationAttributes; 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. */ -@SmallTest -public class VibratorManagerServicePermissionTest extends TestCase { +@Presubmit +@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; - @Override - protected void setUp() throws Exception { + @Before + public void setUp() throws Exception { mVibratorService = IVibratorManagerService.Stub.asInterface( ServiceManager.getService(Context.VIBRATOR_MANAGER_SERVICE)); } - /** - * Test that calling {@link android.os.IVibratorManagerService#vibrate(int, String, - * CombinedVibrationEffect, VibrationAttributes, String, IBinder)} requires permissions. - * <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 - } + @After + public void cleanUp() { + getInstrumentation().getUiAutomation().dropShellPermissionIdentity(); + } + + @Test + public void testIsVibratingFails() throws RemoteException { + expectSecurityException("ACCESS_VIBRATOR_STATE"); + mVibratorService.isVibrating(1); + } + + @Test + public void testRegisterVibratorStateListenerFails() throws RemoteException { + expectSecurityException("ACCESS_VIBRATOR_STATE"); + IVibratorStateListener listener = new IVibratorStateListener.Stub() { + @Override + 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()); } - /** - * Test that calling {@link android.os.IVibratorManagerService#cancelVibrate(IBinder)} requires - * permissions. - * <p>Tests permission: - * {@link android.Manifest.permission#VIBRATE} - */ - public void testCancelVibrate() throws RemoteException { - try { - mVibratorService.cancelVibrate(new Binder()); - fail("cancelVibrate did not throw SecurityException as expected"); - } catch (SecurityException e) { - // expected - } + private void expectSecurityException(String expectedPermission) { + exceptionRule.expect(SecurityException.class); + exceptionRule.expectMessage("permission." + expectedPermission); } } |