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"));