You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ro...@apache.org on 2019/09/18 08:24:38 UTC
svn commit: r1867103 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/security/internal/SecurityProviderRegistration.java
test/java/org/apache/jackrabbit/oak/security/internal/SecurityProviderRegistrationTest.java
Author: rombert
Date: Wed Sep 18 08:24:37 2019
New Revision: 1867103
URL: http://svn.apache.org/viewvc?rev=1867103&view=rev
Log:
OAK-8529 - Deregister MBeans on SecurityProviderRegistration component deactivation
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/internal/SecurityProviderRegistration.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/internal/SecurityProviderRegistrationTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/internal/SecurityProviderRegistration.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/internal/SecurityProviderRegistration.java?rev=1867103&r1=1867102&r2=1867103&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/internal/SecurityProviderRegistration.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/internal/SecurityProviderRegistration.java Wed Sep 18 08:24:37 2019
@@ -225,6 +225,7 @@ public class SecurityProviderRegistratio
if (registration != null) {
registration.unregister();
}
+ closeQuietly(closer);
}
//--------------------------------------< unary security configurations >---
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=1867103&r1=1867102&r2=1867103&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 Wed Sep 18 08:24:37 2019
@@ -31,6 +31,7 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.plugins.tree.RootProvider;
import org.apache.jackrabbit.oak.plugins.tree.TreeLocation;
import org.apache.jackrabbit.oak.plugins.tree.TreeProvider;
+import org.apache.jackrabbit.oak.security.authentication.AuthenticationConfigurationImpl;
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.RestrictionProviderImpl;
@@ -48,6 +49,7 @@ import org.apache.jackrabbit.oak.spi.sec
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.LoginModuleMBean;
import org.apache.jackrabbit.oak.spi.security.authentication.LoginModuleMonitor;
import org.apache.jackrabbit.oak.spi.security.authentication.LoginModuleStatsCollector;
import org.apache.jackrabbit.oak.spi.security.authentication.token.CompositeTokenConfiguration;
@@ -86,11 +88,14 @@ import java.util.Set;
import java.util.SortedMap;
import static org.apache.jackrabbit.oak.spi.security.RegistrationConstants.OAK_SECURITY_NAME;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.hamcrest.Matchers.nullValue;
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.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
@@ -300,6 +305,43 @@ public class SecurityProviderRegistratio
}
@Test
+ public void testDeactivateUnregistersMBeans() {
+ // activate
+ registration.activate(context.bundleContext(), configWithRequiredServiceIds("serviceA"));
+
+ // validate that registration is not performed
+ SecurityProvider service = context.getService(SecurityProvider.class);
+ assertNull(service);
+
+ // register AuthenticationConfiguration to trigger MBean registration
+ AuthenticationConfigurationImpl mockAc = mock(AuthenticationConfigurationImpl.class);
+ registration.bindAuthenticationConfiguration(mockAc);
+
+ // register required service
+ RestrictionProvider mockRp = mock(RestrictionProvider.class);
+ ServiceReference sr = when(mock(ServiceReference.class).getProperty(SERVICE_PID)).thenReturn("serviceA").getMock();
+
+ registration.bindRestrictionProvider(sr, mockRp);
+
+ // assert that SecurityProvider is registered
+ service = context.getService(SecurityProvider.class);
+ assertNotNull(service);
+
+ // assert that MBean is registered
+ assertThat("LoginModuleMBean is not registered", context.getService(LoginModuleMBean.class), notNullValue());
+
+ // manually deactivate, simulate AuthenticationConfiguration going away due to new config for it coming in
+ registration.deactivate();
+
+ // assert that service is now unregistered
+ service = context.getService(SecurityProvider.class);
+ assertNull(service);
+
+ // assert that MBean is no longer registered
+ assertThat("LoginModuleMBean is still registered", context.getService(LoginModuleMBean.class), nullValue());
+ }
+
+ @Test
public void testBindOptionalCandidate() throws Exception {
registration.activate(context.bundleContext(), configWithRequiredServiceIds("serviceId"));