You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ji...@apache.org on 2018/06/25 22:11:50 UTC

[geode] branch develop updated: GEODE-4511: rework ClientAuthDUnitRule to illustrate when authenticat… (#2077)

This is an automated email from the ASF dual-hosted git repository.

jinmeiliao pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new 87c0ec3  GEODE-4511: rework ClientAuthDUnitRule to illustrate when authenticat… (#2077)
87c0ec3 is described below

commit 87c0ec3940b4ddfc90613389c252036f6be2a93c
Author: jinmeiliao <ji...@pivotal.io>
AuthorDate: Mon Jun 25 15:11:45 2018 -0700

    GEODE-4511: rework ClientAuthDUnitRule to illustrate when authenticat… (#2077)
    
    * GEODE-4511: rework ClientAuthDUnitRule to illustrate when authentication is executed on client operations.
---
 .../apache/geode/security/ClientAuthDUnitTest.java | 64 ++++++++++++----------
 ...tAuthorizationLegacyConfigurationDUnitTest.java | 13 ++---
 ...aAuthorizationUsingLegacySecurityDUnitTest.java | 22 +++-----
 ...onUsingLegacySecurityWithFailoverDUnitTest.java | 12 ++--
 .../geode/test/dunit/rules/ClusterStartupRule.java | 43 ++-------------
 ...tartupRuleCanSpecifyOlderVersionsDUnitTest.java |  7 +--
 6 files changed, 59 insertions(+), 102 deletions(-)

diff --git a/geode-core/src/test/java/org/apache/geode/security/ClientAuthDUnitTest.java b/geode-core/src/test/java/org/apache/geode/security/ClientAuthDUnitTest.java
index ae0313e..0ae31a2 100644
--- a/geode-core/src/test/java/org/apache/geode/security/ClientAuthDUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/security/ClientAuthDUnitTest.java
@@ -15,19 +15,20 @@
 package org.apache.geode.security;
 
 import static org.apache.geode.distributed.ConfigurationProperties.SECURITY_MANAGER;
-import static org.apache.geode.test.dunit.Disconnect.disconnectAllFromDS;
-import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
-import org.junit.After;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
+import org.apache.geode.cache.Region;
+import org.apache.geode.cache.RegionShortcut;
 import org.apache.geode.cache.client.ClientCache;
 import org.apache.geode.cache.client.ClientRegionFactory;
 import org.apache.geode.cache.client.ClientRegionShortcut;
+import org.apache.geode.cache.client.ServerOperationException;
 import org.apache.geode.test.dunit.IgnoredException;
-import org.apache.geode.test.dunit.SerializableRunnableIF;
+import org.apache.geode.test.dunit.rules.ClientVM;
 import org.apache.geode.test.dunit.rules.ClusterStartupRule;
 import org.apache.geode.test.junit.categories.DistributedTest;
 import org.apache.geode.test.junit.categories.FlakyTest;
@@ -42,42 +43,45 @@ public class ClientAuthDUnitTest {
 
   @Rule
   public ServerStarterRule server = new ServerStarterRule()
-      .withProperty(SECURITY_MANAGER, SimpleTestSecurityManager.class.getName()).withAutoStart();
-
-  @After
-  public void tearDown() throws Exception {
-    disconnectAllFromDS();
-  }
+      .withProperty(SECURITY_MANAGER, SimpleTestSecurityManager.class.getName())
+      .withRegion(RegionShortcut.REPLICATE, "region");
 
   @Test
   public void authWithCorrectPasswordShouldPass() throws Exception {
-    lsRule.startClientVM(0, "test", "test", true, server.getPort(),
-        new ClientCacheHook(lsRule));
+    ClientVM clientVM = lsRule.startClientVM(0, "data", "data", true, server.getPort());
+    clientVM.invoke(() -> {
+      ClientCache clientCache = ClusterStartupRule.getClientCache();
+      ClientRegionFactory clientRegionFactory =
+          clientCache.createClientRegionFactory(ClientRegionShortcut.PROXY);
+      Region region = clientRegionFactory.create("region");
+      region.put("A", "A");
+    });
   }
 
   @Test
-  public void authWithIncorrectPasswordShouldFail() throws Exception {
+  public void authWithIncorrectPasswordWithSubscriptionEnabled() throws Exception {
     IgnoredException.addIgnoredException(AuthenticationFailedException.class.getName());
-
-    assertThatThrownBy(() -> lsRule.startClientVM(0, "test", "invalidPassword", true,
-        server.getPort(), new ClientCacheHook(lsRule)))
-            .isInstanceOf(AuthenticationFailedException.class);
+    ClientVM clientVM = lsRule.startClientVM(0, "test", "invalidPassword", true, server.getPort());
+    clientVM.invoke(() -> {
+      ClientCache clientCache = ClusterStartupRule.getClientCache();
+      ClientRegionFactory clientRegionFactory =
+          clientCache.createClientRegionFactory(ClientRegionShortcut.PROXY);
+      assertThatThrownBy(() -> clientRegionFactory.create("region"))
+          .isInstanceOf(AuthenticationFailedException.class);
+    });
   }
 
-  static class ClientCacheHook implements SerializableRunnableIF {
-    final ClusterStartupRule lsRule;
-
-    ClientCacheHook(ClusterStartupRule lsRule) {
-      this.lsRule = lsRule;
-    }
-
-    public void run() {
-      // Perform an operation that causes the cache to lazy-initialize a pool with the invalid
-      // authentication so as to induce the exception.
-      ClientCache clientCache = lsRule.getClientCache();
+  @Test
+  public void authWithIncorrectPasswordWithSubscriptionNotEnabled() throws Exception {
+    IgnoredException.addIgnoredException(AuthenticationFailedException.class.getName());
+    ClientVM clientVM = lsRule.startClientVM(0, "test", "invalidPassword", false, server.getPort());
+    clientVM.invoke(() -> {
+      ClientCache clientCache = ClusterStartupRule.getClientCache();
       ClientRegionFactory clientRegionFactory =
           clientCache.createClientRegionFactory(ClientRegionShortcut.PROXY);
-      clientRegionFactory.create("region");
-    }
+      Region region = clientRegionFactory.create("region");
+      assertThatThrownBy(() -> region.put("A", "A")).isInstanceOf(ServerOperationException.class)
+          .hasCauseInstanceOf(AuthenticationFailedException.class);
+    });
   }
 }
diff --git a/geode-core/src/test/java/org/apache/geode/security/ClientAuthorizationLegacyConfigurationDUnitTest.java b/geode-core/src/test/java/org/apache/geode/security/ClientAuthorizationLegacyConfigurationDUnitTest.java
index 9838e05..bc71000 100644
--- a/geode-core/src/test/java/org/apache/geode/security/ClientAuthorizationLegacyConfigurationDUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/security/ClientAuthorizationLegacyConfigurationDUnitTest.java
@@ -36,13 +36,11 @@ import org.apache.geode.cache.Region;
 import org.apache.geode.cache.RegionFactory;
 import org.apache.geode.cache.RegionShortcut;
 import org.apache.geode.cache.client.ClientCache;
-import org.apache.geode.cache.client.ClientCacheFactory;
 import org.apache.geode.cache.client.ClientRegionFactory;
 import org.apache.geode.cache.client.ClientRegionShortcut;
 import org.apache.geode.security.templates.SimpleAccessController;
 import org.apache.geode.security.templates.SimpleAuthenticator;
 import org.apache.geode.security.templates.UserPasswordAuthInit;
-import org.apache.geode.test.dunit.SerializableConsumerIF;
 import org.apache.geode.test.dunit.rules.ClientVM;
 import org.apache.geode.test.dunit.rules.ClusterStartupRule;
 import org.apache.geode.test.dunit.rules.MemberVM;
@@ -119,10 +117,10 @@ public class ClientAuthorizationLegacyConfigurationDUnitTest {
         UserPasswordAuthInit.class.getCanonicalName() + ".create");
 
     int locatorPort = locator.getPort();
-    SerializableConsumerIF<ClientCacheFactory> cacheSetup = cf -> cf
-        .addPoolLocator("localhost", locatorPort);
 
-    ClientVM client = csRule.startClientVM(2, clientProps, cacheSetup, clientVersion);
+    ClientVM client = csRule.startClientVM(2, clientProps, cf -> cf
+        .addPoolLocator("localhost", locatorPort), clientVersion);
+
     client.invoke(() -> {
       ClientCache cache = ClusterStartupRule.getClientCache();
       ClientRegionFactory<String, String> rf =
@@ -181,10 +179,9 @@ public class ClientAuthorizationLegacyConfigurationDUnitTest {
         UserPasswordAuthInit.class.getCanonicalName() + ".create");
 
     int locatorPort = locator.getPort();
-    SerializableConsumerIF<ClientCacheFactory> cacheSetup = cf -> cf
-        .addPoolLocator("localhost", locatorPort);
 
-    ClientVM client = csRule.startClientVM(2, clientProps, cacheSetup, clientVersion);
+    ClientVM client = csRule.startClientVM(2, clientProps, cf -> cf
+        .addPoolLocator("localhost", locatorPort), clientVersion);
     client.invoke(() -> {
       ClientCache cache = ClusterStartupRule.getClientCache();
       ClientRegionFactory<String, String> rf =
diff --git a/geode-core/src/test/java/org/apache/geode/security/ClientDataAuthorizationUsingLegacySecurityDUnitTest.java b/geode-core/src/test/java/org/apache/geode/security/ClientDataAuthorizationUsingLegacySecurityDUnitTest.java
index c0cdcfc..9e5074c 100644
--- a/geode-core/src/test/java/org/apache/geode/security/ClientDataAuthorizationUsingLegacySecurityDUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/security/ClientDataAuthorizationUsingLegacySecurityDUnitTest.java
@@ -38,7 +38,6 @@ import org.apache.geode.cache.Region;
 import org.apache.geode.cache.RegionFactory;
 import org.apache.geode.cache.RegionShortcut;
 import org.apache.geode.cache.client.ClientCache;
-import org.apache.geode.cache.client.ClientCacheFactory;
 import org.apache.geode.cache.client.ClientRegionFactory;
 import org.apache.geode.cache.client.ClientRegionShortcut;
 import org.apache.geode.distributed.ConfigurationProperties;
@@ -46,7 +45,6 @@ import org.apache.geode.security.templates.SimpleAccessController;
 import org.apache.geode.security.templates.SimpleAuthenticator;
 import org.apache.geode.security.templates.UserPasswordAuthInit;
 import org.apache.geode.security.templates.UsernamePrincipal;
-import org.apache.geode.test.dunit.SerializableConsumerIF;
 import org.apache.geode.test.dunit.rules.ClientVM;
 import org.apache.geode.test.dunit.rules.ClusterStartupRule;
 import org.apache.geode.test.dunit.rules.MemberVM;
@@ -122,9 +120,8 @@ public class ClientDataAuthorizationUsingLegacySecurityDUnitTest {
     Properties props = getVMPropertiesWithPermission("dataWrite");
     int locatorPort = locator.getPort();
 
-    SerializableConsumerIF<ClientCacheFactory> cacheSetup = cf -> cf
-        .addPoolLocator("localhost", locatorPort);
-    ClientVM clientVM = csRule.startClientVM(2, props, cacheSetup, clientVersion);
+    ClientVM clientVM = csRule.startClientVM(2, props, cf -> cf
+        .addPoolLocator("localhost", locatorPort), clientVersion);
 
     // Client adds data
     clientVM.invoke(() -> {
@@ -156,9 +153,8 @@ public class ClientDataAuthorizationUsingLegacySecurityDUnitTest {
     }
     int locatorPort = locator.getPort();
 
-    SerializableConsumerIF<ClientCacheFactory> cacheSetup = cf -> cf
-        .addPoolLocator("localhost", locatorPort);
-    ClientVM client = csRule.startClientVM(2, props, cacheSetup, clientVersion);
+    ClientVM client = csRule.startClientVM(2, props, cf -> cf
+        .addPoolLocator("localhost", locatorPort), clientVersion);
 
     // Client cannot get through any avenue
     client.invoke(() -> {
@@ -183,9 +179,8 @@ public class ClientDataAuthorizationUsingLegacySecurityDUnitTest {
     Properties props = getVMPropertiesWithPermission("dataRead");
     int locatorPort = locator.getPort();
 
-    SerializableConsumerIF<ClientCacheFactory> cacheSetup = cf -> cf
-        .addPoolLocator("localhost", locatorPort);
-    ClientVM client = csRule.startClientVM(2, props, cacheSetup, clientVersion);
+    ClientVM client = csRule.startClientVM(2, props, cf -> cf
+        .addPoolLocator("localhost", locatorPort), clientVersion);
 
     // Add some values for the client to get
     server.invoke(() -> {
@@ -219,10 +214,9 @@ public class ClientDataAuthorizationUsingLegacySecurityDUnitTest {
     }
 
     int locatorPort = locator.getPort();
-    SerializableConsumerIF<ClientCacheFactory> cacheSetup = cf -> cf
-        .addPoolLocator("localhost", locatorPort);
 
-    ClientVM clientVM = csRule.startClientVM(2, props, cacheSetup, clientVersion);
+    ClientVM clientVM = csRule.startClientVM(2, props, cf -> cf
+        .addPoolLocator("localhost", locatorPort), clientVersion);
 
     clientVM.invoke(() -> {
       ClientCache cache = ClusterStartupRule.getClientCache();
diff --git a/geode-core/src/test/java/org/apache/geode/security/ClientDataAuthorizationUsingLegacySecurityWithFailoverDUnitTest.java b/geode-core/src/test/java/org/apache/geode/security/ClientDataAuthorizationUsingLegacySecurityWithFailoverDUnitTest.java
index c2cf154..4871133 100644
--- a/geode-core/src/test/java/org/apache/geode/security/ClientDataAuthorizationUsingLegacySecurityWithFailoverDUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/security/ClientDataAuthorizationUsingLegacySecurityWithFailoverDUnitTest.java
@@ -42,7 +42,6 @@ import org.apache.geode.cache.Region;
 import org.apache.geode.cache.RegionFactory;
 import org.apache.geode.cache.RegionShortcut;
 import org.apache.geode.cache.client.ClientCache;
-import org.apache.geode.cache.client.ClientCacheFactory;
 import org.apache.geode.cache.client.ClientRegionFactory;
 import org.apache.geode.cache.client.ClientRegionShortcut;
 import org.apache.geode.cache.client.internal.PoolImpl;
@@ -53,7 +52,6 @@ import org.apache.geode.security.templates.SimpleAccessController;
 import org.apache.geode.security.templates.SimpleAuthenticator;
 import org.apache.geode.security.templates.UserPasswordAuthInit;
 import org.apache.geode.security.templates.UsernamePrincipal;
-import org.apache.geode.test.dunit.SerializableConsumerIF;
 import org.apache.geode.test.dunit.rules.ClientVM;
 import org.apache.geode.test.dunit.rules.ClusterStartupRule;
 import org.apache.geode.test.dunit.rules.MemberVM;
@@ -329,10 +327,9 @@ public class ClientDataAuthorizationUsingLegacySecurityWithFailoverDUnitTest {
     int server1Port = this.server1.getPort();
     int server2Port = this.server2.getPort();
 
-    SerializableConsumerIF<ClientCacheFactory> cacheSetup = cf -> cf
+    ClientVM client1 = csRule.startClientVM(3, props, cf -> cf
         .addPoolServer("localhost", server1Port).addPoolServer("localhost", server2Port)
-        .setPoolSubscriptionEnabled(true).setPoolSubscriptionRedundancy(2);
-    ClientVM client1 = csRule.startClientVM(3, props, cacheSetup, clientVersion);
+        .setPoolSubscriptionEnabled(true).setPoolSubscriptionRedundancy(2), clientVersion);
 
     // Initialize cache
     client1.invoke(() -> {
@@ -388,10 +385,9 @@ public class ClientDataAuthorizationUsingLegacySecurityWithFailoverDUnitTest {
           "org.apache.geode.security.templates.UsernamePrincipal");
     }
 
-    SerializableConsumerIF<ClientCacheFactory> cacheSetup = cf -> cf
+    ClientVM client = csRule.startClientVM(3, props, cf -> cf
         .addPoolServer("localhost", server1Port).addPoolServer("localhost", server2Port)
-        .setPoolSubscriptionEnabled(true).setPoolSubscriptionRedundancy(2);
-    ClientVM client = csRule.startClientVM(3, props, cacheSetup, clientVersion);
+        .setPoolSubscriptionEnabled(true).setPoolSubscriptionRedundancy(2), clientVersion);
 
     // Initialize cache
     client.invoke(() -> {
diff --git a/geode-core/src/test/java/org/apache/geode/test/dunit/rules/ClusterStartupRule.java b/geode-core/src/test/java/org/apache/geode/test/dunit/rules/ClusterStartupRule.java
index 875ecd4..67cdc89 100644
--- a/geode-core/src/test/java/org/apache/geode/test/dunit/rules/ClusterStartupRule.java
+++ b/geode-core/src/test/java/org/apache/geode/test/dunit/rules/ClusterStartupRule.java
@@ -45,7 +45,6 @@ import org.apache.geode.security.templates.UserPasswordAuthInit;
 import org.apache.geode.test.dunit.Host;
 import org.apache.geode.test.dunit.RMIException;
 import org.apache.geode.test.dunit.SerializableConsumerIF;
-import org.apache.geode.test.dunit.SerializableRunnableIF;
 import org.apache.geode.test.dunit.VM;
 import org.apache.geode.test.dunit.standalone.DUnitLauncher;
 import org.apache.geode.test.dunit.standalone.VersionManager;
@@ -238,28 +237,15 @@ public class ClusterStartupRule extends ExternalResource implements Serializable
     return memberVM;
   }
 
-  /**
-   * Starts a client with the given properties, configuring the cacheFactory with the provided
-   * Consumer
-   */
   public ClientVM startClientVM(int index, Properties properties,
       SerializableConsumerIF<ClientCacheFactory> cacheFactorySetup, String clientVersion)
       throws Exception {
-    return startClientVM(index, properties, cacheFactorySetup, clientVersion,
-        () -> {
-        });
-  }
-
-  public ClientVM startClientVM(int index, Properties properties,
-      SerializableConsumerIF<ClientCacheFactory> cacheFactorySetup, String clientVersion,
-      SerializableRunnableIF clientCacheHook) throws Exception {
     VM client = getVM(index, clientVersion);
     Exception error = client.invoke(() -> {
       clientCacheRule =
           new ClientCacheRule().withProperties(properties).withCacheSetup(cacheFactorySetup);
       try {
         clientCacheRule.before();
-        clientCacheHook.run();
         return null;
       } catch (Exception e) {
         return e;
@@ -285,32 +271,15 @@ public class ClusterStartupRule extends ExternalResource implements Serializable
     props.setProperty(UserPasswordAuthInit.PASSWORD, password);
     props.setProperty(SECURITY_CLIENT_AUTH_INIT, UserPasswordAuthInit.class.getName());
 
-    SerializableConsumerIF<ClientCacheFactory> consumer =
-        ((cacheFactory) -> {
-          cacheFactory.setPoolSubscriptionEnabled(subscriptionEnabled);
-          for (int serverPort : serverPorts) {
-            cacheFactory.addPoolServer("localhost", serverPort);
-          }
-        });
+    SerializableConsumerIF<ClientCacheFactory> consumer = ((cacheFactory) -> {
+      cacheFactory.setPoolSubscriptionEnabled(subscriptionEnabled);
+      for (int serverPort : serverPorts) {
+        cacheFactory.addPoolServer("localhost", serverPort);
+      }
+    });
     return startClientVM(index, props, consumer);
   }
 
-  public ClientVM startClientVM(int index, String username, String password,
-      boolean subscriptionEnabled, int serverPort, SerializableRunnableIF clientCacheHook)
-      throws Exception {
-    Properties props = new Properties();
-    props.setProperty(UserPasswordAuthInit.USER_NAME, username);
-    props.setProperty(UserPasswordAuthInit.PASSWORD, password);
-    props.setProperty(SECURITY_CLIENT_AUTH_INIT, UserPasswordAuthInit.class.getName());
-
-    SerializableConsumerIF<ClientCacheFactory> consumer =
-        ((cacheFactory) -> {
-          cacheFactory.setPoolSubscriptionEnabled(subscriptionEnabled);
-          cacheFactory.addPoolServer("localhost", serverPort);
-        });
-    return startClientVM(index, props, consumer, VersionManager.CURRENT_VERSION, clientCacheHook);
-  }
-
   /**
    * Returns the {@link Member} running inside the VM with the specified {@code index}
    */
diff --git a/geode-core/src/test/java/org/apache/geode/test/dunit/rules/tests/ClusterStartupRuleCanSpecifyOlderVersionsDUnitTest.java b/geode-core/src/test/java/org/apache/geode/test/dunit/rules/tests/ClusterStartupRuleCanSpecifyOlderVersionsDUnitTest.java
index b980333..d234937 100644
--- a/geode-core/src/test/java/org/apache/geode/test/dunit/rules/tests/ClusterStartupRuleCanSpecifyOlderVersionsDUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/test/dunit/rules/tests/ClusterStartupRuleCanSpecifyOlderVersionsDUnitTest.java
@@ -26,9 +26,7 @@ import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
-import org.apache.geode.cache.client.ClientCacheFactory;
 import org.apache.geode.internal.GemFireVersion;
-import org.apache.geode.test.dunit.SerializableConsumerIF;
 import org.apache.geode.test.dunit.rules.ClientVM;
 import org.apache.geode.test.dunit.rules.ClusterStartupRule;
 import org.apache.geode.test.dunit.rules.MemberVM;
@@ -81,9 +79,8 @@ public class ClusterStartupRuleCanSpecifyOlderVersionsDUnitTest {
 
   @Test
   public void clientVersioningTest() throws Exception {
-    SerializableConsumerIF<ClientCacheFactory> consumer = cf -> {
-    };
-    ClientVM locator = csRule.startClientVM(0, new Properties(), consumer, version);
+    ClientVM locator = csRule.startClientVM(0, new Properties(), (cf) -> {
+    }, version);
     String locatorVMVersion = locator.getVM().getVersion();
     String locatorActualVersion = locator.invoke(GemFireVersion::getGemFireVersion);
     assertThat(locatorVMVersion).isEqualTo(version);