Repository: geode Updated Branches: refs/heads/feature/GEODE-2632-21 288158d1f -> 6f7f51cce
fixup Project: http://git-wip-us.apache.org/repos/asf/geode/repo Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/6f7f51cc Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/6f7f51cc Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/6f7f51cc Branch: refs/heads/feature/GEODE-2632-21 Commit: 6f7f51cce1c6558dc227fc115782fb243c9f67ff Parents: 288158d Author: Kirk Lund <[email protected]> Authored: Tue Jun 6 12:08:38 2017 -0700 Committer: Kirk Lund <[email protected]> Committed: Tue Jun 6 12:08:38 2017 -0700 ---------------------------------------------------------------------- .../security/CustomSecurityService.java | 59 ++++- .../internal/security/PostProcessorService.java | 264 ------------------- .../security/SecurityServiceFactory.java | 18 +- .../internal/security/SecurityServiceType.java | 2 - .../security/SecurityServiceFactoryTest.java | 20 +- .../security/AccessControlMBeanJUnitTest.java | 1 + .../security/MBeanSecurityJUnitTest.java | 1 + .../security/MemberMBeanSecurityJUnitTest.java | 1 + .../CacheFactoryWithSecurityObjectTest.java | 26 +- .../java/org/apache/geode/test/fake/Fakes.java | 3 + 10 files changed, 102 insertions(+), 293 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/geode/blob/6f7f51cc/geode-core/src/main/java/org/apache/geode/internal/security/CustomSecurityService.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/security/CustomSecurityService.java b/geode-core/src/main/java/org/apache/geode/internal/security/CustomSecurityService.java index 1fcf38f..038f04b 100644 --- a/geode-core/src/main/java/org/apache/geode/internal/security/CustomSecurityService.java +++ b/geode-core/src/main/java/org/apache/geode/internal/security/CustomSecurityService.java @@ -14,15 +14,21 @@ */ package org.apache.geode.internal.security; +import java.io.IOException; +import java.io.Serializable; import java.security.AccessController; import java.util.Properties; import java.util.Set; import java.util.concurrent.Callable; +import org.apache.commons.lang.SerializationException; import org.apache.commons.lang.StringUtils; +import org.apache.geode.GemFireIOException; +import org.apache.geode.internal.cache.EntryEventImpl; import org.apache.geode.internal.logging.LogService; import org.apache.geode.internal.security.shiro.GeodeAuthenticationToken; import org.apache.geode.internal.security.shiro.ShiroPrincipal; +import org.apache.geode.internal.util.BlobHelper; import org.apache.geode.security.AuthenticationFailedException; import org.apache.geode.security.GemFireSecurityException; import org.apache.geode.security.NotAuthorizedException; @@ -44,13 +50,17 @@ import org.apache.geode.security.SecurityManager; public class CustomSecurityService implements SecurityService { private static Logger logger = LogService.getLogger(LogService.SECURITY_LOGGER_NAME); - CustomSecurityService() { - // nothing + private final PostProcessor postProcessor; + + CustomSecurityService(PostProcessor postProcessor) { + this.postProcessor = postProcessor; } @Override public void initSecurity(final Properties securityProps) { - // nothing + if (this.postProcessor != null) { + this.postProcessor.init(securityProps); + } } @Override @@ -270,19 +280,48 @@ public class CustomSecurityService implements SecurityService { @Override public boolean needPostProcess() { - return false; + return this.postProcessor != null; } @Override public Object postProcess(final String regionPath, final Object key, final Object value, - final boolean valueIsSerialized) { - return value; + final boolean valueIsSerialized) { + return postProcess(null, regionPath, key, value, valueIsSerialized); } @Override - public Object postProcess(final Object principal, final String regionPath, final Object key, - final Object value, final boolean valueIsSerialized) { - return value; + public Object postProcess(Object principal, final String regionPath, final Object key, + final Object value, final boolean valueIsSerialized) { + if (!needPostProcess()) { + return value; + } + + if (principal == null) { + Subject subject = getSubject(); + if (subject == null) { + return value; + } + principal = (Serializable) subject.getPrincipal(); + } + + String regionName = StringUtils.stripStart(regionPath, "/"); + Object newValue; + + // if the data is a byte array, but the data itself is supposed to be an object, we need to + // deserialize it before we pass it to the callback. + if (valueIsSerialized && value instanceof byte[]) { + try { + Object oldObj = EntryEventImpl.deserialize((byte[]) value); + Object newObj = this.postProcessor.processRegionValue(principal, regionName, key, oldObj); + newValue = BlobHelper.serializeToBlob(newObj); + } catch (IOException | SerializationException e) { + throw new GemFireIOException("Exception de/serializing entry value", e); + } + } else { + newValue = this.postProcessor.processRegionValue(principal, regionName, key, value); + } + + return newValue; } @Override @@ -307,6 +346,6 @@ public class CustomSecurityService implements SecurityService { @Override public PostProcessor getPostProcessor() { - return null; + return this.postProcessor; } } http://git-wip-us.apache.org/repos/asf/geode/blob/6f7f51cc/geode-core/src/main/java/org/apache/geode/internal/security/PostProcessorService.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/security/PostProcessorService.java b/geode-core/src/main/java/org/apache/geode/internal/security/PostProcessorService.java deleted file mode 100644 index 3c1e4d8..0000000 --- a/geode-core/src/main/java/org/apache/geode/internal/security/PostProcessorService.java +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more contributor license - * agreements. See the NOTICE file distributed with this work for additional information regarding - * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. You may obtain a - * copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - */ -package org.apache.geode.internal.security; - -import org.apache.commons.lang.SerializationException; -import org.apache.commons.lang.StringUtils; -import org.apache.geode.GemFireIOException; -import org.apache.geode.internal.cache.EntryEventImpl; -import org.apache.geode.internal.logging.LogService; -import org.apache.geode.internal.util.BlobHelper; -import org.apache.geode.management.internal.security.ResourceOperation; -import org.apache.geode.security.PostProcessor; -import org.apache.geode.security.ResourcePermission; -import org.apache.geode.security.SecurityManager; -import org.apache.logging.log4j.Logger; -import org.apache.shiro.subject.Subject; -import org.apache.shiro.util.ThreadState; - -import java.io.IOException; -import java.io.Serializable; -import java.util.Properties; -import java.util.concurrent.Callable; - -/** - * Security service with PostProcessor but no SecurityManager - */ -public class PostProcessorService implements SecurityService { - private static Logger logger = LogService.getLogger(LogService.SECURITY_LOGGER_NAME); - - private final PostProcessor postProcessor; - - PostProcessorService(final PostProcessor postProcessor) { - if (postProcessor == null) { - throw new IllegalArgumentException("PostProcessor must not be null"); - } - this.postProcessor = postProcessor; - } - - @Override - public void initSecurity(final Properties securityProps) { - this.postProcessor.init(securityProps); - } - - @Override - public void setSecurityManager(final SecurityManager securityManager) { - // nothing - } - - @Override - public void setPostProcessor(final PostProcessor postProcessor) { - // nothing - } - - /** - * It first looks the shiro subject in AccessControlContext since JMX will use multiple threads to - * process operations from the same client, then it looks into Shiro's thead context. - * - * @return the shiro subject, null if security is not enabled - */ - @Override - public Subject getSubject() { - return null; - } - - /** - * @return null if security is not enabled, otherwise return a shiro subject - */ - @Override - public Subject login(final Properties credentials) { - return null; - } - - @Override - public void logout() { - // nothing - } - - @Override - public Callable associateWith(final Callable callable) { - return null; - } - - @Override - public ThreadState bindSubject(final Subject subject) { - return null; - } - - @Override - public void authorize(final ResourceOperation resourceOperation) { - // nothing - } - - @Override - public void authorizeClusterManage() { - // nothing - } - - @Override - public void authorizeClusterWrite() { - // nothing - } - - @Override - public void authorizeClusterRead() { - // nothing - } - - @Override - public void authorizeDataManage() { - // nothing - } - - @Override - public void authorizeDataWrite() { - // nothing - } - - @Override - public void authorizeDataRead() { - // nothing - } - - @Override - public void authorizeRegionManage(final String regionName) { - // nothing - } - - @Override - public void authorizeRegionManage(final String regionName, final String key) { - // nothing - } - - @Override - public void authorizeRegionWrite(final String regionName) { - // nothing - } - - @Override - public void authorizeRegionWrite(final String regionName, final String key) { - // nothing - } - - @Override - public void authorizeRegionRead(final String regionName) { - // nothing - } - - @Override - public void authorizeRegionRead(final String regionName, final String key) { - // nothing - } - - @Override - public void authorize(final String resource, final String operation) { - // nothing - } - - @Override - public void authorize(final String resource, final String operation, final String regionName) { - // nothing - } - - @Override - public void authorize(final String resource, final String operation, String regionName, - final String key) { - // nothing - } - - @Override - public void authorize(final ResourcePermission context) { - // nothing - } - - @Override - public void close() { - if (this.postProcessor != null) { - this.postProcessor.close(); - } - } - - /** - * postProcess call already has this logic built in, you don't need to call this everytime you - * call postProcess. But if your postProcess is pretty involved with preparations and you need to - * bypass it entirely, call this first. - */ - @Override - public boolean needPostProcess() { - return true; - } - - @Override - public Object postProcess(final String regionPath, final Object key, final Object value, - final boolean valueIsSerialized) { - return postProcess(null, regionPath, key, value, valueIsSerialized); - } - - @Override - public Object postProcess(Object principal, final String regionPath, final Object key, - final Object value, final boolean valueIsSerialized) { - if (principal == null) { - Subject subject = getSubject(); - if (subject == null) { - return value; - } - principal = (Serializable) subject.getPrincipal(); - } - - String regionName = StringUtils.stripStart(regionPath, "/"); - Object newValue; - - // if the data is a byte array, but the data itself is supposed to be an object, we need to - // deserialize it before we pass it to the callback. - if (valueIsSerialized && value instanceof byte[]) { - try { - Object oldObj = EntryEventImpl.deserialize((byte[]) value); - Object newObj = this.postProcessor.processRegionValue(principal, regionName, key, oldObj); - newValue = BlobHelper.serializeToBlob(newObj); - } catch (IOException | SerializationException e) { - throw new GemFireIOException("Exception de/serializing entry value", e); - } - } else { - newValue = this.postProcessor.processRegionValue(principal, regionName, key, value); - } - - return newValue; - } - - @Override - public SecurityManager getSecurityManager() { - return null; - } - - @Override - public PostProcessor getPostProcessor() { - return this.postProcessor; - } - - @Override - public boolean isIntegratedSecurity() { - return false; - } - - @Override - public boolean isClientSecurityRequired() { - return false; - } - - @Override - public boolean isPeerSecurityRequired() { - return false; - } -} http://git-wip-us.apache.org/repos/asf/geode/blob/6f7f51cc/geode-core/src/main/java/org/apache/geode/internal/security/SecurityServiceFactory.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/security/SecurityServiceFactory.java b/geode-core/src/main/java/org/apache/geode/internal/security/SecurityServiceFactory.java index 481c385..25f32a8 100644 --- a/geode-core/src/main/java/org/apache/geode/internal/security/SecurityServiceFactory.java +++ b/geode-core/src/main/java/org/apache/geode/internal/security/SecurityServiceFactory.java @@ -55,6 +55,11 @@ public class SecurityServiceFactory { SecurityManager securityManager, PostProcessor postProcessor) { Properties securityConfig = getSecurityConfig(distributionConfig); + securityManager = + getSecurityManager(securityManager, securityConfig); + postProcessor = + getPostProcessor(postProcessor, securityConfig); + SecurityService securityService = create(securityConfig, securityManager, postProcessor); initialize(securityService, distributionConfig); return securityService; @@ -74,11 +79,9 @@ public class SecurityServiceFactory { ConfigInitialization configInitialization = new ConfigInitialization(shiroConfig); configInitialization.initialize(); } - return new CustomSecurityService(); + return new CustomSecurityService(postProcessor); case ENABLED: return new EnabledSecurityService(securityManager, postProcessor); - case POST_PROCESSOR: - return new PostProcessorService(postProcessor); case LEGACY: String clientAuthenticator = getProperty(securityConfig, SECURITY_CLIENT_AUTHENTICATOR); String peerAuthenticator = getProperty(securityConfig, SECURITY_PEER_AUTHENTICATOR); @@ -95,7 +98,7 @@ public class SecurityServiceFactory { return SecurityServiceType.CUSTOM; } - boolean hasSecurityManager = securityManager != null; + boolean hasSecurityManager = securityManager != null || hasProperty(securityConfig, SECURITY_MANAGER); if (hasSecurityManager) { return SecurityServiceType.ENABLED; } @@ -111,11 +114,6 @@ public class SecurityServiceFactory { return SecurityServiceType.CUSTOM; } - boolean hasPostProcessor = postProcessor != null; - if (hasPostProcessor) { - return SecurityServiceType.POST_PROCESSOR; - } - return SecurityServiceType.DISABLED; } @@ -148,7 +146,7 @@ public class SecurityServiceFactory { return postProcessor; } - public static boolean isShiroInUse() { + private static boolean isShiroInUse() { try { return SecurityUtils.getSecurityManager() != null; } catch (UnavailableSecurityManagerException ignore) { http://git-wip-us.apache.org/repos/asf/geode/blob/6f7f51cc/geode-core/src/main/java/org/apache/geode/internal/security/SecurityServiceType.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/security/SecurityServiceType.java b/geode-core/src/main/java/org/apache/geode/internal/security/SecurityServiceType.java index 73fde6b..8ae76d2 100644 --- a/geode-core/src/main/java/org/apache/geode/internal/security/SecurityServiceType.java +++ b/geode-core/src/main/java/org/apache/geode/internal/security/SecurityServiceType.java @@ -19,8 +19,6 @@ public enum SecurityServiceType { ENABLED, /** Security is Disabled */ DISABLED, - /** Has PostProcessor only */ - POST_PROCESSOR, /** Legacy Security is Enabled */ LEGACY, /** Shiro Config is specified */ http://git-wip-us.apache.org/repos/asf/geode/blob/6f7f51cc/geode-core/src/test/java/org/apache/geode/internal/security/SecurityServiceFactoryTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/internal/security/SecurityServiceFactoryTest.java b/geode-core/src/test/java/org/apache/geode/internal/security/SecurityServiceFactoryTest.java index 2029642..e977957 100644 --- a/geode-core/src/test/java/org/apache/geode/internal/security/SecurityServiceFactoryTest.java +++ b/geode-core/src/test/java/org/apache/geode/internal/security/SecurityServiceFactoryTest.java @@ -144,12 +144,12 @@ public class SecurityServiceFactoryTest { } @Test - public void determineType_postProcessor_returnsPOST_PROCESSOR() throws Exception { + public void determineType_postProcessor_returnsDISABLED() throws Exception { Properties securityConfig = new Properties(); PostProcessor mockPostProcessor = mock(PostProcessor.class); assertThat(SecurityServiceFactory.determineType(securityConfig, null, mockPostProcessor)) - .isSameAs(SecurityServiceType.POST_PROCESSOR); + .isSameAs(SecurityServiceType.DISABLED); } @Test @@ -247,16 +247,16 @@ public class SecurityServiceFactoryTest { } @Test - public void create_postProcessor_createsPostProcessorService() throws Exception { + public void create_postProcessor_createsDisabledSecurityService() throws Exception { Properties securityConfig = new Properties(); PostProcessor mockPostProcessor = mock(PostProcessor.class); assertThat(SecurityServiceFactory.create(securityConfig, null, mockPostProcessor)) - .isInstanceOf(PostProcessorService.class); + .isInstanceOf(DisabledSecurityService.class); } @Test - public void create_securityManager_createsPostProcessorService() throws Exception { + public void create_securityManager_createsEnabledSecurityService() throws Exception { Properties securityConfig = new Properties(); SecurityManager mockSecurityManager = mock(SecurityManager.class); @@ -264,4 +264,14 @@ public class SecurityServiceFactoryTest { .isInstanceOf(EnabledSecurityService.class); } + @Test + public void create_securityManagerAndPostProcessor_createsEnabledSecurityService() throws Exception { + Properties securityConfig = new Properties(); + SecurityManager mockSecurityManager = mock(SecurityManager.class); + PostProcessor mockPostProcessor = mock(PostProcessor.class); + + assertThat(SecurityServiceFactory.create(securityConfig, mockSecurityManager, mockPostProcessor)) + .isInstanceOf(EnabledSecurityService.class); + } + } http://git-wip-us.apache.org/repos/asf/geode/blob/6f7f51cc/geode-core/src/test/java/org/apache/geode/management/internal/security/AccessControlMBeanJUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/security/AccessControlMBeanJUnitTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/security/AccessControlMBeanJUnitTest.java index 626ca45..49b8347 100644 --- a/geode-core/src/test/java/org/apache/geode/management/internal/security/AccessControlMBeanJUnitTest.java +++ b/geode-core/src/test/java/org/apache/geode/management/internal/security/AccessControlMBeanJUnitTest.java @@ -31,6 +31,7 @@ import org.junit.experimental.categories.Category; @Category({IntegrationTest.class, SecurityTest.class}) public class AccessControlMBeanJUnitTest { + private AccessControlMXBean bean; @ClassRule http://git-wip-us.apache.org/repos/asf/geode/blob/6f7f51cc/geode-core/src/test/java/org/apache/geode/management/internal/security/MBeanSecurityJUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/security/MBeanSecurityJUnitTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/security/MBeanSecurityJUnitTest.java index 30ed267..091b1db 100644 --- a/geode-core/src/test/java/org/apache/geode/management/internal/security/MBeanSecurityJUnitTest.java +++ b/geode-core/src/test/java/org/apache/geode/management/internal/security/MBeanSecurityJUnitTest.java @@ -46,6 +46,7 @@ import javax.management.ReflectionException; @Category({IntegrationTest.class, SecurityTest.class}) public class MBeanSecurityJUnitTest { + @ClassRule public static ServerStarterRule server = new ServerStarterRule().withJMXManager() .withProperty(SECURITY_MANAGER, TestSecurityManager.class.getName()) http://git-wip-us.apache.org/repos/asf/geode/blob/6f7f51cc/geode-core/src/test/java/org/apache/geode/management/internal/security/MemberMBeanSecurityJUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/security/MemberMBeanSecurityJUnitTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/security/MemberMBeanSecurityJUnitTest.java index 6ae8d3f..77ddcc9 100644 --- a/geode-core/src/test/java/org/apache/geode/management/internal/security/MemberMBeanSecurityJUnitTest.java +++ b/geode-core/src/test/java/org/apache/geode/management/internal/security/MemberMBeanSecurityJUnitTest.java @@ -32,6 +32,7 @@ import org.junit.experimental.categories.Category; @Category({IntegrationTest.class, SecurityTest.class}) public class MemberMBeanSecurityJUnitTest { + private MemberMXBean bean; @Rule http://git-wip-us.apache.org/repos/asf/geode/blob/6f7f51cc/geode-core/src/test/java/org/apache/geode/security/CacheFactoryWithSecurityObjectTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/security/CacheFactoryWithSecurityObjectTest.java b/geode-core/src/test/java/org/apache/geode/security/CacheFactoryWithSecurityObjectTest.java index 827ae3d..17ac1bd 100644 --- a/geode-core/src/test/java/org/apache/geode/security/CacheFactoryWithSecurityObjectTest.java +++ b/geode-core/src/test/java/org/apache/geode/security/CacheFactoryWithSecurityObjectTest.java @@ -16,14 +16,13 @@ package org.apache.geode.security; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import org.apache.geode.cache.Cache; import org.apache.geode.cache.CacheFactory; import org.apache.geode.distributed.ConfigurationProperties; import org.apache.geode.internal.cache.InternalCache; import org.apache.geode.internal.security.SecurityService; -import org.apache.geode.internal.security.SecurityServiceFactory; import org.apache.geode.security.templates.DummyAuthenticator; import org.apache.geode.test.junit.categories.IntegrationTest; import org.apache.geode.test.junit.categories.SecurityTest; @@ -53,6 +52,8 @@ public class CacheFactoryWithSecurityObjectTest { .setSecurityManager(this.simpleSecurityManager).setPostProcessor(null).create(); SecurityService securityService = this.cache.getSecurityService(); assertTrue(securityService.isIntegratedSecurity()); + assertTrue(securityService.isClientSecurityRequired()); + assertTrue(securityService.isPeerSecurityRequired()); assertFalse(securityService.needPostProcess()); assertNotNull(securityService.getSecurityManager()); } @@ -63,10 +64,29 @@ public class CacheFactoryWithSecurityObjectTest { .setPostProcessor(new TestPostProcessor()).setSecurityManager(null).create(); SecurityService securityService = this.cache.getSecurityService(); assertFalse(securityService.isIntegratedSecurity()); + assertFalse(securityService.isClientSecurityRequired()); + assertFalse(securityService.isPeerSecurityRequired()); assertFalse(securityService.needPostProcess()); + assertNull(securityService.getPostProcessor()); + } + + @Test + public void testCreateCacheWithSecurityManagerAndPostProcessor() throws Exception { + this.cache = (InternalCache) new CacheFactory(this.properties) + .setSecurityManager(this.simpleSecurityManager).setPostProcessor(new TestPostProcessor()).create(); + SecurityService securityService = this.cache.getSecurityService(); + assertTrue(securityService.isIntegratedSecurity()); + assertTrue(securityService.isClientSecurityRequired()); + assertTrue(securityService.isPeerSecurityRequired()); + assertTrue(securityService.needPostProcess()); + assertNotNull(securityService.getSecurityManager()); assertNotNull(securityService.getPostProcessor()); } + /** + * This test seems to be misleading. Nothing is overridden here. SecurityManager + * is preferred over SECURITY_CLIENT_AUTHENTICATOR. + */ @Test public void testOverride() throws Exception { this.properties.setProperty(ConfigurationProperties.SECURITY_CLIENT_AUTHENTICATOR, @@ -80,8 +100,10 @@ public class CacheFactoryWithSecurityObjectTest { assertTrue(securityService.isIntegratedSecurity()); assertTrue(securityService.isClientSecurityRequired()); + assertTrue(securityService.isPeerSecurityRequired()); assertTrue(securityService.needPostProcess()); assertNotNull(securityService.getSecurityManager()); + assertNotNull(securityService.getPostProcessor()); } @After http://git-wip-us.apache.org/repos/asf/geode/blob/6f7f51cc/geode-core/src/test/java/org/apache/geode/test/fake/Fakes.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/test/fake/Fakes.java b/geode-core/src/test/java/org/apache/geode/test/fake/Fakes.java index 6a1e26f..af38a1c 100644 --- a/geode-core/src/test/java/org/apache/geode/test/fake/Fakes.java +++ b/geode-core/src/test/java/org/apache/geode/test/fake/Fakes.java @@ -34,6 +34,7 @@ import org.apache.geode.distributed.internal.InternalDistributedSystem; import org.apache.geode.distributed.internal.membership.InternalDistributedMember; import org.apache.geode.internal.cache.CachePerfStats; import org.apache.geode.internal.cache.GemFireCacheImpl; +import org.apache.geode.internal.security.SecurityService; /** * Factory methods for fake objects for use in test. @@ -79,6 +80,7 @@ public class Fakes { when(cache.getDistributionManager()).thenReturn(distributionManager); when(cache.getCancelCriterion()).thenReturn(systemCancelCriterion); when(cache.getCachePerfStats()).thenReturn(mock(CachePerfStats.class)); + when(cache.getSecurityService()).thenReturn(mock(SecurityService.class)); when(system.getDistributedMember()).thenReturn(member); when(system.getConfig()).thenReturn(config); @@ -86,6 +88,7 @@ public class Fakes { when(system.getCancelCriterion()).thenReturn(systemCancelCriterion); when(system.getClock()).thenReturn(clock); when(system.getLogWriter()).thenReturn(logger); + when(system.getSecurityService()).thenReturn(mock(SecurityService.class)); when(system.createAtomicStatistics(any(), any(), anyLong())).thenReturn(stats); when(system.createAtomicStatistics(any(), any())).thenReturn(stats);
