@Test @Config(minSdk = 23) public void checkAdditionalSelfPermission() { shadowContextWrapper.grantPermissions("MY_PERMISSON"); assertThat(contextWrapper.checkSelfPermission("MY_PERMISSON")) .isEqualTo(PackageManager.PERMISSION_GRANTED); assertThat(contextWrapper.checkSelfPermission("ANOTHER_PERMISSON")) .isEqualTo(PackageManager.PERMISSION_DENIED); shadowContextWrapper.grantPermissions("ANOTHER_PERMISSON"); assertThat(contextWrapper.checkSelfPermission("ANOTHER_PERMISSON")) .isEqualTo(PackageManager.PERMISSION_GRANTED); }
@Test @Config(minSdk = 23) public void revokeSelfPermission() { shadowContextWrapper.grantPermissions("MY_PERMISSON"); assertThat(contextWrapper.checkSelfPermission("MY_PERMISSON")) .isEqualTo(PackageManager.PERMISSION_GRANTED); shadowContextWrapper.denyPermissions("MY_PERMISSON"); assertThat(contextWrapper.checkSelfPermission("MY_PERMISSON")) .isEqualTo(PackageManager.PERMISSION_DENIED); }
@Test @Config(minSdk = 23) public void checkSelfPermission() { assertThat(contextWrapper.checkSelfPermission("MY_PERMISSON")) .isEqualTo(PackageManager.PERMISSION_DENIED); shadowContextWrapper.grantPermissions("MY_PERMISSON"); assertThat(contextWrapper.checkSelfPermission("MY_PERMISSON")) .isEqualTo(PackageManager.PERMISSION_GRANTED); assertThat(contextWrapper.checkSelfPermission("UNKNOWN_PERMISSON")) .isEqualTo(PackageManager.PERMISSION_DENIED); }
@Test public void checkPermissionUidPid() { assertThat(contextWrapper.checkPermission("MY_PERMISSON", 1, 1)) .isEqualTo(PackageManager.PERMISSION_DENIED); shadowContextWrapper.grantPermissions(1, 1, "MY_PERMISSON"); assertThat(contextWrapper.checkPermission("MY_PERMISSON", 2, 1)) .isEqualTo(PackageManager.PERMISSION_DENIED); assertThat(contextWrapper.checkPermission("MY_PERMISSON", 1, 1)) .isEqualTo(PackageManager.PERMISSION_GRANTED); }
@Test public void revokePermissionUidPid() { shadowContextWrapper.grantPermissions(1, 1, "MY_PERMISSON"); assertThat(contextWrapper.checkPermission("MY_PERMISSON", 1, 1)) .isEqualTo(PackageManager.PERMISSION_GRANTED); shadowContextWrapper.denyPermissions(1, 1, "MY_PERMISSON"); assertThat(contextWrapper.checkPermission("MY_PERMISSON", 1, 1)) .isEqualTo(PackageManager.PERMISSION_DENIED); }
@Test public void checkCallingPermissionsShouldReturnPermissionGrantedToAddedPermissions() throws Exception { shadowOf(contextWrapper).grantPermissions("foo", "bar"); assertThat(contextWrapper.checkCallingPermission("foo")).isEqualTo(PERMISSION_GRANTED); assertThat(contextWrapper.checkCallingPermission("bar")).isEqualTo(PERMISSION_GRANTED); assertThat(contextWrapper.checkCallingPermission("baz")).isEqualTo(PERMISSION_DENIED); }
@Test public void checkCallingOrSelfPermissionsShouldReturnPermissionGrantedToAddedPermissions() throws Exception { shadowOf(contextWrapper).grantPermissions("foo", "bar"); assertThat(contextWrapper.checkCallingOrSelfPermission("foo")).isEqualTo(PERMISSION_GRANTED); assertThat(contextWrapper.checkCallingOrSelfPermission("bar")).isEqualTo(PERMISSION_GRANTED); assertThat(contextWrapper.checkCallingOrSelfPermission("baz")).isEqualTo(PERMISSION_DENIED); }
@Test public void checkCallingOrSelfPermission_shouldReturnPermissionDeniedForRemovedPermissions() throws Exception { shadowOf(contextWrapper).grantPermissions("foo", "bar"); shadowOf(contextWrapper).denyPermissions("foo", "qux"); assertThat(contextWrapper.checkCallingOrSelfPermission("foo")).isEqualTo(PERMISSION_DENIED); assertThat(contextWrapper.checkCallingOrSelfPermission("bar")).isEqualTo(PERMISSION_GRANTED); assertThat(contextWrapper.checkCallingOrSelfPermission("baz")).isEqualTo(PERMISSION_DENIED); assertThat(contextWrapper.checkCallingOrSelfPermission("qux")).isEqualTo(PERMISSION_DENIED); }
@Test public void checkCallingPermission_shouldReturnPermissionDeniedForRemovedPermissions() throws Exception { shadowOf(contextWrapper).grantPermissions("foo", "bar"); shadowOf(contextWrapper).denyPermissions("foo", "qux"); assertThat(contextWrapper.checkCallingPermission("foo")).isEqualTo(PERMISSION_DENIED); assertThat(contextWrapper.checkCallingPermission("bar")).isEqualTo(PERMISSION_GRANTED); assertThat(contextWrapper.checkCallingPermission("baz")).isEqualTo(PERMISSION_DENIED); assertThat(contextWrapper.checkCallingPermission("qux")).isEqualTo(PERMISSION_DENIED); }
@Test public void cannotStoreSecurelyWithNoHardware() { shadowContext.grantPermissions(USE_FINGERPRINT); when(fingerprintManager.isHardwareDetected()).thenReturn(false); when(fingerprintManager.hasEnrolledFingerprints()).thenReturn(true); assertThat(whorlwind.canStoreSecurely()).isFalse(); verifyZeroInteractions(storage); }
@Test public void cannotStoreSecurelyWithNoFingerprints() { shadowContext.grantPermissions(USE_FINGERPRINT); when(fingerprintManager.isHardwareDetected()).thenReturn(true); when(fingerprintManager.hasEnrolledFingerprints()).thenReturn(false); assertThat(whorlwind.canStoreSecurely()).isFalse(); verifyZeroInteractions(storage); }
@Test public void canStoreSecurelyWithPermissionAndHardwareAndFingerprints() { shadowContext.grantPermissions(USE_FINGERPRINT); when(fingerprintManager.isHardwareDetected()).thenReturn(true); when(fingerprintManager.hasEnrolledFingerprints()).thenReturn(true); assertThat(whorlwind.canStoreSecurely()).isTrue(); verifyZeroInteractions(storage); }
@Ignore @Test public void immediateUnsubscribeShouldntCallAuthenticate() throws UnrecoverableKeyException, NoSuchAlgorithmException, KeyStoreException, IOException { Key key = mock(Key.class); shadowContext.grantPermissions(USE_FINGERPRINT); when(fingerprintManager.isHardwareDetected()).thenReturn(true); when(fingerprintManager.hasEnrolledFingerprints()).thenReturn(true); when(keyStore.getKey("test", null)).thenReturn(key); Observable<ReadResult> read = whorlwind.read("test").take(1); ReadResult readResult = read.blockingSingle(); assertEquals(ReadResult.ReadState.NEEDS_AUTH, readResult.readState); verify(fingerprintManager, never()).authenticate(any(FingerprintManager.CryptoObject.class), any(CancellationSignal.class), anyInt(), any(FingerprintManager.AuthenticationCallback.class), any(Handler.class)); }
@Test public void readThrowsOnSubscribeWhenCannotStoreSecurely() { shadowContext.grantPermissions(USE_FINGERPRINT); when(fingerprintManager.isHardwareDetected()).thenReturn(true); when(fingerprintManager.hasEnrolledFingerprints()).thenReturn(true); Observable<ReadResult> read = whorlwind.read("a"); shadowContext.denyPermissions(USE_FINGERPRINT); try { read.blockingForEach(new Consumer<ReadResult>() { @Override public void accept(ReadResult readResult) throws Exception { fail(); } }); fail(); } catch (IllegalStateException expected) { assertThat(expected).hasMessage( "Can't store securely. Check canStoreSecurely() before attempting to read/write."); } verifyZeroInteractions(storage); }