Author: angela
Date: Thu Jun 1 15:27:50 2017
New Revision: 1797233
URL: http://svn.apache.org/viewvc?rev=1797233&view=rev
Log:
OAK-5882 : Improve coverage for oak.security code in oak-core (wip)
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/internal/SecurityProviderRegistrationTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/internal/SecurityProviderRegistrationTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/internal/SecurityProviderRegistrationTest.java?rev=1797233&r1=1797232&r2=1797233&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/internal/SecurityProviderRegistrationTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/internal/SecurityProviderRegistrationTest.java
Thu Jun 1 15:27:50 2017
@@ -17,51 +17,64 @@
package org.apache.jackrabbit.oak.security.internal;
import java.lang.reflect.Field;
-import java.security.Principal;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import javax.annotation.Nonnull;
-import javax.jcr.security.AccessControlManager;
+import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableMap;
-import org.apache.jackrabbit.api.security.principal.PrincipalManager;
+import com.google.common.collect.Iterables;
import org.apache.jackrabbit.oak.AbstractSecurityTest;
import org.apache.jackrabbit.oak.api.PropertyState;
-import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.api.Tree;
-import org.apache.jackrabbit.oak.namepath.NamePathMapper;
import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
import org.apache.jackrabbit.oak.plugins.tree.TreeLocation;
import
org.apache.jackrabbit.oak.security.authorization.AuthorizationConfigurationImpl;
import
org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration;
+import
org.apache.jackrabbit.oak.security.authorization.restriction.WhiteboardRestrictionProvider;
import org.apache.jackrabbit.oak.security.principal.PrincipalConfigurationImpl;
import org.apache.jackrabbit.oak.spi.security.CompositeConfiguration;
-import org.apache.jackrabbit.oak.spi.security.ConfigurationBase;
import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
import org.apache.jackrabbit.oak.spi.security.Context;
+import org.apache.jackrabbit.oak.spi.security.SecurityConfiguration;
+import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
+import
org.apache.jackrabbit.oak.spi.security.authentication.AuthenticationConfiguration;
+import
org.apache.jackrabbit.oak.spi.security.authentication.token.CompositeTokenConfiguration;
+import
org.apache.jackrabbit.oak.spi.security.authentication.token.TokenConfiguration;
import
org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
-import
org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider;
import
org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
import
org.apache.jackrabbit.oak.spi.security.principal.CompositePrincipalConfiguration;
import org.apache.jackrabbit.oak.spi.security.principal.PrincipalConfiguration;
-import org.apache.jackrabbit.oak.spi.security.principal.PrincipalProvider;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConfiguration;
+import org.apache.jackrabbit.oak.spi.security.user.AuthorizableNodeName;
+import org.apache.jackrabbit.oak.spi.security.user.UserAuthenticationFactory;
+import org.apache.jackrabbit.oak.spi.security.user.UserConfiguration;
+import
org.apache.jackrabbit.oak.spi.security.user.action.AuthorizableActionProvider;
+import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
+import org.junit.Rule;
import org.junit.Test;
+import org.mockito.Mockito;
import org.osgi.framework.Constants;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.when;
public class SecurityProviderRegistrationTest extends AbstractSecurityTest {
private static final Map<String, Object> PROPS = ImmutableMap.<String,
Object>of("prop", "val");
+ @Rule
+ public final OsgiContext context = new OsgiContext();
+
private SecurityProviderRegistration registration = new
SecurityProviderRegistration();
private static void assertContext(@Nonnull Context context, int
expectedSize, @Nonnull Tree tree, boolean isDefined) throws Exception {
- Class c = context.getClass();
+ Class<?> c = context.getClass();
assertTrue(c.getName().endsWith("CompositeContext"));
Field f = c.getDeclaredField("delegatees");
@@ -79,19 +92,349 @@ public class SecurityProviderRegistratio
assertEquals(isDefined,
context.definesLocation(TreeLocation.create(tree)));
}
+ private static <T> T mockConfiguration(Class<? extends
SecurityConfiguration> cl) {
+ SecurityConfiguration sc = Mockito.mock(cl);
+ when(sc.getContext()).thenReturn(new ContextImpl());
+ when(sc.getParameters()).thenReturn(ConfigurationParameters.EMPTY);
+ return (T) sc;
+ }
+
+ private static Map<String, Object> requiredServiceIdMap(@Nonnull String...
ids) {
+ return ImmutableMap.of("requiredServicePids", ids);
+ }
+
+ @Test
+ public void testActivateWithRequiredId() {
+ registration.activate(context.bundleContext(),
requiredServiceIdMap("serviceId"));
+
+ SecurityProvider service = context.getService(SecurityProvider.class);
+ assertNull(service);
+
+
registration.bindAuthorizableNodeName(Mockito.mock(AuthorizableNodeName.class),
ImmutableMap.of(Constants.SERVICE_PID, "serviceId"));
+
+ service = context.getService(SecurityProvider.class);
+ assertNotNull(service);
+ }
+
+ @Test
+ public void testActivate() {
+ registration.activate(context.bundleContext(),
requiredServiceIdMap("serviceA", "serviceB"));
+
+ SecurityProvider service = context.getService(SecurityProvider.class);
+ assertNull(service);
+
+ RestrictionProvider mockRp = Mockito.mock(RestrictionProvider.class);
+ registration.bindRestrictionProvider(mockRp,
ImmutableMap.of(Constants.SERVICE_PID, "serviceA"));
+
+ service = context.getService(SecurityProvider.class);
+ assertNull(service);
+
+ registration.bindAuthorizationConfiguration(new
AuthorizationConfigurationImpl(), ImmutableMap.of(Constants.SERVICE_PID,
"serviceB"));
+ service = context.getService(SecurityProvider.class);
+ assertNotNull(service);
+ }
+
+ @Test
+ public void testActivateAddsPrecondition() throws Exception {
+ Field f = registration.getClass().getDeclaredField("preconditions");
+ f.setAccessible(true);
+
+ assertTrue(((Preconditions) f.get(registration)).areSatisfied());
+
+ registration.activate(context.bundleContext(),
requiredServiceIdMap("requiredService"));
+
+ assertFalse(((Preconditions) f.get(registration)).areSatisfied());
+ }
+
+ @Test
+ public void testActivateWithoutPreconditions() {
+ registration.activate(context.bundleContext(), requiredServiceIdMap());
+
+ SecurityProvider service = context.getService(SecurityProvider.class);
+ assertNotNull(service);
+ assertEquals(3,
Iterables.size(Iterables.filter(service.getConfigurations(),
Predicates.notNull())));
+ }
+
+ @Test
+ public void testModified() {
+ registration.activate(context.bundleContext(),
requiredServiceIdMap("rpId", "authorizationId"));
+
+ registration.bindAuthorizationConfiguration(new
AuthorizationConfigurationImpl(), ImmutableMap.of(Constants.SERVICE_PID,
"authorizationId"));
+
+ assertNull(context.getService(SecurityProvider.class));
+
+ // modify requiredServiceIds by removing the rpId from the mandatory
services
+ // => should re-register the security provider
+ registration.modified(requiredServiceIdMap("authorizationId"));
+
+ SecurityProvider service = context.getService(SecurityProvider.class);
+ assertNotNull(service);
+
+ RestrictionProvider rp =
service.getConfiguration(AuthorizationConfiguration.class).getRestrictionProvider();
+ assertTrue(rp instanceof WhiteboardRestrictionProvider);
+ }
+
+ @Test
+ public void testModifiedPreconditionStillSatisfied() {
+ registration.activate(context.bundleContext(),
requiredServiceIdMap("rpId", "authorizationId"));
+
+ RestrictionProvider mockRp = Mockito.mock(RestrictionProvider.class);
+ registration.bindRestrictionProvider(mockRp,
ImmutableMap.of(Constants.SERVICE_PID, "rpId"));
+ registration.bindAuthorizationConfiguration(new
AuthorizationConfigurationImpl(), ImmutableMap.of(Constants.SERVICE_PID,
"authorizationId"));
+
+ SecurityProvider service = context.getService(SecurityProvider.class);
+ assertNotNull(service);
+
+ registration.modified(requiredServiceIdMap("authorizationId"));
+
+ SecurityProvider service2 = context.getService(SecurityProvider.class);
+ assertSame(service, service2);
+ }
+
+ @Test
+ public void testDeactivate() throws Exception {
+ registration.activate(context.bundleContext(),
requiredServiceIdMap("nodeName"));
+ AuthorizableNodeName mock = Mockito.mock(AuthorizableNodeName.class);
+ registration.bindAuthorizableNodeName(mock,
ImmutableMap.of(Constants.SERVICE_PID, "nodeName"));
+
+ SecurityProvider service = context.getService(SecurityProvider.class);
+ assertNotNull(service);
+
+ registration.deactivate();
+
+ // provider must have been unregistered
+ assertNull(context.getService(SecurityProvider.class));
+ }
+
+ @Test
+ public void testDeactivateWithoutPreconditions() throws Exception {
+ registration.activate(context.bundleContext(), requiredServiceIdMap());
+ UserAuthenticationFactory mock =
Mockito.mock(UserAuthenticationFactory.class);
+ registration.bindUserAuthenticationFactory(mock,
ImmutableMap.of(Constants.SERVICE_PID, "nodeName"));
+
+ assertNotNull(context.getService(SecurityProvider.class));
+
+ registration.deactivate();
+
+ // securityprovider must have been unregistered
+ assertNull(context.getService(SecurityProvider.class));
+ }
+
+ @Test
+ public void testDeactivateClearsPreconditions() throws Exception {
+ Field f = registration.getClass().getDeclaredField("preconditions");
+ f.setAccessible(true);
+
+ registration.activate(context.bundleContext(),
requiredServiceIdMap("nodeName"));
+
+ assertFalse(((Preconditions) f.get(registration)).areSatisfied());
+
+ AuthorizableNodeName mock = Mockito.mock(AuthorizableNodeName.class);
+ registration.bindAuthorizableNodeName(mock,
ImmutableMap.of(Constants.SERVICE_PID, "nodeName"));
+
+ assertTrue(((Preconditions) f.get(registration)).areSatisfied());
+
+ registration.deactivate();
+
+ assertTrue(((Preconditions) f.get(registration)).areSatisfied());
+ }
+
+ @Test
+ public void testBindOptionalCandidate() throws Exception {
+ registration.activate(context.bundleContext(),
requiredServiceIdMap("serviceId"));
+
+ Field f = registration.getClass().getDeclaredField("preconditions");
+ f.setAccessible(true);
+
+ TokenConfiguration tc = mockConfiguration(TokenConfiguration.class);
+ registration.bindTokenConfiguration(tc,
ImmutableMap.of(Constants.SERVICE_PID, "otherServiceId"));
+
+ Preconditions preconditions = (Preconditions) f.get(registration);
+ assertFalse(preconditions.areSatisfied());
+
+ assertNull(context.getService(SecurityProvider.class));
+ }
+
+ @Test
+ public void testBindOptionalCandidateAfterRegistration() {
+ registration.activate(context.bundleContext(),
requiredServiceIdMap("serviceId"));
+
+
registration.bindTokenConfiguration(mockConfiguration(TokenConfiguration.class),
ImmutableMap.of(Constants.SERVICE_PID, "serviceId"));
+
+ SecurityProvider service = context.getService(SecurityProvider.class);
+ assertNotNull(service);
+
+ // binding another (optional configuration) must not result in
re-registration of the service
+
registration.bindPrincipalConfiguration(mockConfiguration(PrincipalConfiguration.class),
ImmutableMap.of(Constants.SERVICE_PID, "optionalService"));
+
+ SecurityProvider service2 = context.getService(SecurityProvider.class);
+ assertSame(service, service2);
+ }
+
+ @Test
+ public void testBindMandatoryCandidate() throws Exception {
+ registration.activate(context.bundleContext(),
requiredServiceIdMap("serviceId"));
+
+ Field f = registration.getClass().getDeclaredField("preconditions");
+ f.setAccessible(true);
+
+ TokenConfiguration tc = mockConfiguration(TokenConfiguration.class);
+ registration.bindTokenConfiguration(tc,
ImmutableMap.of(Constants.SERVICE_PID, "serviceId"));
+
+ Preconditions preconditions = (Preconditions) f.get(registration);
+ assertTrue(preconditions.areSatisfied());
+
+ assertNotNull(context.getService(SecurityProvider.class));
+ }
+
+ @Test
+ public void testUnbindMandatoryCandidate() {
+ registration.activate(context.bundleContext(),
requiredServiceIdMap("actionProvider"));
+
+
registration.bindUserConfiguration(mockConfiguration(UserConfiguration.class));
+
+ AuthorizableActionProvider ap =
Mockito.mock(AuthorizableActionProvider.class);
+ registration.bindAuthorizableActionProvider(ap,
ImmutableMap.of(Constants.SERVICE_PID, "actionProvider"));
+
+ SecurityProvider service = context.getService(SecurityProvider.class);
+ assertNotNull(service);
+
+ registration.unbindAuthorizableActionProvider(ap,
ImmutableMap.of(Constants.SERVICE_PID, "actionProvider"));
+ service = context.getService(SecurityProvider.class);
+ assertNull(service);
+ }
+
+ @Test
+ public void testUnbindMandatoryCandidateOnPreconditions() throws Exception
{
+ registration.activate(context.bundleContext(),
requiredServiceIdMap("nodeName"));
+
+ Field f = registration.getClass().getDeclaredField("preconditions");
+ f.setAccessible(true);
+
+ AuthorizableNodeName mock = Mockito.mock(AuthorizableNodeName.class);
+ registration.bindAuthorizableNodeName(mock,
ImmutableMap.of(Constants.SERVICE_PID, "nodeName"));
+ registration.unbindAuthorizableNodeName(mock,
ImmutableMap.of(Constants.SERVICE_PID, "nodeName"));
+
+ Preconditions preconditions = (Preconditions) f.get(registration);
+ assertFalse(preconditions.areSatisfied());
+ }
+
+ @Test
+ public void testUnbindOptionalCandidateAfterRegistration() {
+ registration.activate(context.bundleContext(),
requiredServiceIdMap("serviceId"));
+
+ UserAuthenticationFactory uaf =
Mockito.mock(UserAuthenticationFactory.class);
+ Map<String, Object> properties =
ImmutableMap.of(Constants.SERVICE_PID, "notMandatory");
+ registration.bindUserAuthenticationFactory(uaf, properties);
+
+ assertNull(context.getService(SecurityProvider.class));
+
+
registration.bindAuthorizableActionProvider(Mockito.mock(AuthorizableActionProvider.class),
ImmutableMap.of(Constants.SERVICE_PID, "serviceId"));
+
+ SecurityProvider service = context.getService(SecurityProvider.class);
+ assertNotNull(service);
+
+ // unbinding an optional configuration must not result in
unrregistration of the service
+ registration.unbindUserAuthenticationFactory(uaf, properties);
+
+ SecurityProvider service2 = context.getService(SecurityProvider.class);
+ assertSame(service, service2);
+ }
+
+ @Test
+ public void testBindUnbindAuthenticationConfiguration() throws Exception {
+ Field f =
registration.getClass().getDeclaredField("authenticationConfiguration");
+ f.setAccessible(true);
+
+ assertNull(f.get(registration));
+
+ AuthenticationConfiguration ac =
mockConfiguration(AuthenticationConfiguration.class);
+ registration.bindAuthenticationConfiguration(ac);
+
+ assertSame(ac, f.get(registration));
+
+ registration.unbindAuthenticationConfiguration(ac);
+ assertNull(f.get(registration));
+ }
+
+ @Test
+ public void testBindAnotherAuthenticationConfiguration() throws Exception {
+ Field f =
registration.getClass().getDeclaredField("authenticationConfiguration");
+ f.setAccessible(true);
+
+ AuthenticationConfiguration ac =
mockConfiguration(AuthenticationConfiguration.class);
+ registration.bindAuthenticationConfiguration(ac);
+ assertSame(ac, f.get(registration));
+
+ AuthenticationConfiguration ac2 =
mockConfiguration(AuthenticationConfiguration.class);
+ registration.bindAuthenticationConfiguration(ac2);
+ assertSame(ac2, f.get(registration));
+ }
+
+ @Test
+ public void testBindUnbindPrivilegeConfiguration() throws Exception {
+ Field f =
registration.getClass().getDeclaredField("privilegeConfiguration");
+ f.setAccessible(true);
+
+ assertNull(f.get(registration));
+
+ PrivilegeConfiguration pc =
mockConfiguration(PrivilegeConfiguration.class);
+ registration.bindPrivilegeConfiguration(pc);
+
+ assertSame(pc, f.get(registration));
+
+ registration.unbindPrivilegeConfiguration(pc);
+ assertNull(f.get(registration));
+ }
+
+ @Test
+ public void testBindUnbindUserConfiguration() throws Exception {
+ Field f =
registration.getClass().getDeclaredField("userConfiguration");
+ f.setAccessible(true);
+
+ assertNull(f.get(registration));
+
+ UserConfiguration uc = mockConfiguration(UserConfiguration.class);
+ registration.bindUserConfiguration(uc);
+
+ assertSame(uc, f.get(registration));
+
+ registration.unbindUserConfiguration(uc);
+ assertNull(f.get(registration));
+ }
+
+ @Test
+ public void testBindUnbindTokenConfiguration() throws Exception {
+ Field f =
registration.getClass().getDeclaredField("tokenConfiguration");
+ f.setAccessible(true);
+
+ assertTrue(f.get(registration) instanceof CompositeTokenConfiguration);
+
+ TokenConfiguration tc = mockConfiguration(TokenConfiguration.class);
+ registration.bindTokenConfiguration(tc, PROPS);
+
+ CompositeTokenConfiguration composite = (CompositeTokenConfiguration)
f.get(registration);
+ assertEquals(1, composite.getConfigurations().size());
+ assertTrue(composite.getConfigurations().contains(tc));
+
+ registration.unbindTokenConfiguration(tc, PROPS);
+ composite = (CompositeTokenConfiguration) f.get(registration);
+ assertTrue(composite.getConfigurations().isEmpty());
+ }
+
@Test
public void testAuthorizationRanking() throws Exception {
Field f =
registration.getClass().getDeclaredField("authorizationConfiguration");
f.setAccessible(true);
- AuthorizationConfiguration testAc = new
TestAuthorizationConfiguration();
+ AuthorizationConfiguration testAc =
mockConfiguration(AuthorizationConfiguration.class);
registration.bindAuthorizationConfiguration(testAc,
ConfigurationParameters.EMPTY);
AuthorizationConfigurationImpl ac = new
AuthorizationConfigurationImpl();
ac.setParameters(ConfigurationParameters.of(CompositeConfiguration.PARAM_RANKING,
500));
registration.bindAuthorizationConfiguration(ac, PROPS);
- AuthorizationConfiguration testAc2 = new
TestAuthorizationConfiguration();
+ AuthorizationConfiguration testAc2 =
mockConfiguration(AuthorizationConfiguration.class);
Map<String, Object> props = ImmutableMap.<String,
Object>of(Constants.SERVICE_RANKING, new Integer(100));
registration.bindAuthorizationConfiguration(testAc2, props);
@@ -118,13 +461,13 @@ public class SecurityProviderRegistratio
Context ctx = cac.getContext();
assertContext(ctx, 1, t, false);
- AuthorizationConfiguration ac1 = new TestAuthorizationConfiguration();
+ AuthorizationConfiguration ac1 =
mockConfiguration(AuthorizationConfiguration.class);
registration.bindAuthorizationConfiguration(ac1, PROPS);
cac = (CompositeAuthorizationConfiguration) f.get(registration);
ctx = cac.getContext();
assertContext(ctx, 2, t, true);
- AuthorizationConfiguration ac2 = new TestAuthorizationConfiguration();
+ AuthorizationConfiguration ac2 =
mockConfiguration(AuthorizationConfiguration.class);
registration.bindAuthorizationConfiguration(ac2, PROPS);
cac = (CompositeAuthorizationConfiguration) f.get(registration);
ctx = cac.getContext();
@@ -162,14 +505,14 @@ public class SecurityProviderRegistratio
// expected size = 0 because PrincipalConfigurationImpl comes with the
default ctx
assertContext(ctx, 0, t, false);
- PrincipalConfiguration pc1 = new TestPrincipalConfiguration();
+ PrincipalConfiguration pc1 =
mockConfiguration(PrincipalConfiguration.class);
registration.bindPrincipalConfiguration(pc1, PROPS);
cpc = (CompositePrincipalConfiguration) f.get(registration);
ctx = cpc.getContext();
// expected size 1 because the PrincipalConfigurationImpl comes with
the default ctx
assertContext(ctx, 1, t, true);
- PrincipalConfiguration pc2 = new TestPrincipalConfiguration();
+ PrincipalConfiguration pc2 =
mockConfiguration(PrincipalConfiguration.class);
registration.bindPrincipalConfiguration(pc2, PROPS);
cpc = (CompositePrincipalConfiguration) f.get(registration);
ctx = cpc.getContext();
@@ -193,51 +536,35 @@ public class SecurityProviderRegistratio
assertContext(ctx, 0, t, false);
}
- private class TestAuthorizationConfiguration extends ConfigurationBase
implements AuthorizationConfiguration {
+ @Test
+ public void testBindRestrictionProviderWithoutAuthorizationConfig() {
+ registration.activate(context.bundleContext(),
requiredServiceIdMap("serviceId"));
- @Nonnull
- @Override
- public AccessControlManager getAccessControlManager(@Nonnull Root
root, @Nonnull NamePathMapper namePathMapper) {
- return null;
- }
+ RestrictionProvider mockRp = Mockito.mock(RestrictionProvider.class);
+ registration.bindRestrictionProvider(mockRp,
ImmutableMap.of(Constants.SERVICE_PID, "serviceId"));
- @Nonnull
- @Override
- public RestrictionProvider getRestrictionProvider() {
- return null;
- }
+ SecurityProvider service = context.getService(SecurityProvider.class);
+ assertNotNull(service);
- @Nonnull
- @Override
- public PermissionProvider getPermissionProvider(@Nonnull Root root,
@Nonnull String workspaceName, @Nonnull Set<Principal> principals) {
- return null;
- }
+ AuthorizationConfiguration ac =
service.getConfiguration(AuthorizationConfiguration.class);
+ assertTrue(ac instanceof CompositeAuthorizationConfiguration);
- @Nonnull
- @Override
- public Context getContext() {
- return new ContextImpl();
- }
+ // empty composite configuration => empty rp
+ RestrictionProvider rp = ac.getRestrictionProvider();
+ assertSame(RestrictionProvider.EMPTY, rp);
}
- private class TestPrincipalConfiguration extends ConfigurationBase
implements PrincipalConfiguration {
- @Nonnull
- @Override
- public PrincipalManager getPrincipalManager(Root root, NamePathMapper
namePathMapper) {
- return null;
- }
-
- @Nonnull
- @Override
- public PrincipalProvider getPrincipalProvider(Root root,
NamePathMapper namePathMapper) {
- return null;
- }
+ @Test
+ public void testBindRestrictionProviderWithAuthorizationConfig() {
+ registration.activate(context.bundleContext(),
requiredServiceIdMap("rpId", "authorizationId"));
- @Nonnull
- @Override
- public Context getContext() {
- return new ContextImpl();
- }
+ RestrictionProvider mockRp = Mockito.mock(RestrictionProvider.class);
+ registration.bindRestrictionProvider(mockRp,
ImmutableMap.of(Constants.SERVICE_PID, "rpId"));
+ registration.bindAuthorizationConfiguration(new
AuthorizationConfigurationImpl(), ImmutableMap.of(Constants.SERVICE_PID,
"authorizationId"));
+
+ SecurityProvider service = context.getService(SecurityProvider.class);
+ RestrictionProvider rp =
service.getConfiguration(AuthorizationConfiguration.class).getRestrictionProvider();
+ assertTrue(rp instanceof WhiteboardRestrictionProvider);
}
private static class ContextImpl implements Context {