You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kl...@apache.org on 2016/07/08 18:45:48 UTC

incubator-geode git commit: GEODE-1571: Write DUnit test for SecurityManager init() and close()

Repository: incubator-geode
Updated Branches:
  refs/heads/develop dfd481e0b -> 617d31327


GEODE-1571: Write DUnit test for SecurityManager init() and close()

This closes #192


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/617d3132
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/617d3132
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/617d3132

Branch: refs/heads/develop
Commit: 617d31327abaa85150b7a6795ee04d1dfd542ce1
Parents: dfd481e
Author: gmeilen <gr...@gmail.com>
Authored: Fri Jul 8 11:36:50 2016 -0700
Committer: Kirk Lund <kl...@apache.org>
Committed: Fri Jul 8 11:40:19 2016 -0700

----------------------------------------------------------------------
 ...edSecurityCacheLifecycleDistributedTest.java | 146 +++++++++++++++++++
 1 file changed, 146 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/617d3132/geode-core/src/test/java/com/gemstone/gemfire/security/IntegratedSecurityCacheLifecycleDistributedTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/security/IntegratedSecurityCacheLifecycleDistributedTest.java b/geode-core/src/test/java/com/gemstone/gemfire/security/IntegratedSecurityCacheLifecycleDistributedTest.java
new file mode 100644
index 0000000..7649f89
--- /dev/null
+++ b/geode-core/src/test/java/com/gemstone/gemfire/security/IntegratedSecurityCacheLifecycleDistributedTest.java
@@ -0,0 +1,146 @@
+/*
+ * 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 com.gemstone.gemfire.security;
+
+
+import static com.gemstone.gemfire.distributed.ConfigurationProperties.*;
+import static org.assertj.core.api.Assertions.*;
+
+import java.security.Principal;
+import java.util.Properties;
+
+import com.gemstone.gemfire.cache.Region;
+import com.gemstone.gemfire.cache.RegionShortcut;
+import com.gemstone.gemfire.cache.client.ClientCache;
+import com.gemstone.gemfire.cache.client.ClientCacheFactory;
+import com.gemstone.gemfire.cache.client.ClientRegionShortcut;
+import com.gemstone.gemfire.cache.server.CacheServer;
+import com.gemstone.gemfire.distributed.internal.InternalLocator;
+import com.gemstone.gemfire.internal.AvailablePort;
+import com.gemstone.gemfire.management.internal.security.JSONAuthorization;
+import com.gemstone.gemfire.security.templates.UserPasswordAuthInit;
+import com.gemstone.gemfire.test.dunit.DistributedTestUtils;
+import com.gemstone.gemfire.test.dunit.Host;
+import com.gemstone.gemfire.test.dunit.NetworkUtils;
+import com.gemstone.gemfire.test.dunit.VM;
+import com.gemstone.gemfire.test.dunit.cache.internal.JUnit4CacheTestCase;
+import com.gemstone.gemfire.test.junit.categories.DistributedTest;
+import com.gemstone.gemfire.test.junit.categories.SecurityTest;
+
+import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.mockito.Spy;
+
+@Category({DistributedTest.class, SecurityTest.class})
+public class IntegratedSecurityCacheLifecycleDistributedTest extends JUnit4CacheTestCase {
+
+  private static SpySecurityManager spySecurityManager;
+
+  private VM locator;
+
+  @Override
+  public final void postSetUp() throws Exception {
+    Host host = Host.getHost(0);
+    locator = host.getVM(0);
+    JSONAuthorization.setUpWithJsonFile("clientServer.json");
+    int locatorPort = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
+    String locators =  NetworkUtils.getServerHostName(host) + "[" + locatorPort + "]";
+
+    spySecurityManager = new SpySecurityManager();
+
+    locator.invoke(() -> {
+      spySecurityManager = new SpySecurityManager();
+      DistributedTestUtils.deleteLocatorStateFile(locatorPort);
+
+      final Properties properties = new Properties();
+      properties.setProperty(MCAST_PORT, "0");
+      properties.setProperty(START_LOCATOR, locators);
+      properties.setProperty(SECURITY_MANAGER, SpySecurityManager.class.getName()+".create");
+      properties.setProperty(USE_CLUSTER_CONFIGURATION, "false");
+      getSystem(properties);
+      getCache();
+    });
+
+    final Properties properties = new Properties();
+    properties.setProperty(MCAST_PORT, "0");
+    properties.setProperty(SECURITY_MANAGER, SpySecurityManager.class.getName()+".create");
+    properties.setProperty(LOCATORS, locators);
+    properties.setProperty(USE_CLUSTER_CONFIGURATION, "false");
+    getSystem(properties);
+
+    CacheServer server1 = getCache().addCacheServer();
+    server1.setPort(0);
+    server1.start();
+
+    getCache();
+  }
+
+  @Test
+  public void initAndCloseTest () {
+    locator.invoke(() -> {
+      verifyInitInvoked();
+    });
+    verifyInitInvoked();
+    getCache().close();
+    verifyCloseInvoked();
+    locator.invoke(() -> {
+      getCache().close();
+      verifyCloseInvoked();
+    });
+  }
+
+  @Override
+  public void postTearDownCacheTestCase() throws Exception {
+    closeAllCache();
+  }
+
+  private static void verifyInitInvoked() {
+    assertThat(spySecurityManager.initInvoked).isEqualTo(1);
+  }
+
+  private static void verifyCloseInvoked() {
+    assertThat(spySecurityManager.closeInvoked).isEqualTo(1);
+  }
+
+
+  public static class SpySecurityManager extends JSONAuthorization {
+
+    private static int initInvoked = 0;
+    private static int closeInvoked = 0;
+
+    public static SpySecurityManager create() {
+      return spySecurityManager;
+    }
+
+    @Override
+    public void init(final Properties securityProps) {
+      initInvoked++;
+      super.init(securityProps);
+    }
+
+    @Override
+    public Principal authenticate(final Properties props) throws AuthenticationFailedException {
+      return null;
+    }
+
+    @Override
+    public void close() {
+      closeInvoked++;
+    }
+  }
+}