Repository: incubator-geode
Updated Branches:
  refs/heads/develop 80026a7d6 -> 2777aec05


GEODE-1955: fix flaky tests by properly closing the gfsh instance in 
ConnectToLocatorSSLDUnitTest

GEODE-1955: fix flaky tests by properly closing the gfsh instance in 
ConnectToLocatorSSLDUnitTest

GEODE-1955: fix flaky tests by properly closing the gfsh instance in 
ConnectToLocatorSSLDUnitTest


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

Branch: refs/heads/develop
Commit: 2777aec05f1af920bf065d3f1117e525ed246a20
Parents: 80026a7
Author: Jinmei Liao <jil...@pivotal.io>
Authored: Fri Oct 28 14:46:10 2016 -0700
Committer: Jinmei Liao <jil...@pivotal.io>
Committed: Fri Nov 4 08:47:53 2016 -0700

----------------------------------------------------------------------
 .../ConnectToLocatorSSLDUnitTest.java           | 106 ++++++++-----------
 .../security/GfshCommandsPostProcessorTest.java |   7 +-
 .../security/GfshCommandsSecurityTest.java      |  11 +-
 .../dunit/rules/GfshShellConnectionRule.java    |  81 +++++++-------
 .../dunit/rules/LocatorServerStartupRule.java   |   8 +-
 .../GfshCommandsOverHttpSecurityTest.java       |   2 +-
 6 files changed, 101 insertions(+), 114 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2777aec0/geode-core/src/test/java/org/apache/geode/management/ConnectToLocatorSSLDUnitTest.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/test/java/org/apache/geode/management/ConnectToLocatorSSLDUnitTest.java
 
b/geode-core/src/test/java/org/apache/geode/management/ConnectToLocatorSSLDUnitTest.java
index 8426c6f..1c8079a 100644
--- 
a/geode-core/src/test/java/org/apache/geode/management/ConnectToLocatorSSLDUnitTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/management/ConnectToLocatorSSLDUnitTest.java
@@ -15,16 +15,35 @@
 
 package org.apache.geode.management;
 
-import static org.apache.geode.distributed.ConfigurationProperties.*;
+import static 
org.apache.geode.distributed.ConfigurationProperties.CLUSTER_SSL_ENABLED;
+import static 
org.apache.geode.distributed.ConfigurationProperties.CLUSTER_SSL_KEYSTORE;
+import static 
org.apache.geode.distributed.ConfigurationProperties.CLUSTER_SSL_KEYSTORE_PASSWORD;
+import static 
org.apache.geode.distributed.ConfigurationProperties.CLUSTER_SSL_KEYSTORE_TYPE;
+import static 
org.apache.geode.distributed.ConfigurationProperties.CLUSTER_SSL_TRUSTSTORE;
+import static 
org.apache.geode.distributed.ConfigurationProperties.CLUSTER_SSL_TRUSTSTORE_PASSWORD;
+import static 
org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_SSL_ENABLED;
+import static 
org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_SSL_KEYSTORE;
+import static 
org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_SSL_KEYSTORE_PASSWORD;
+import static 
org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_SSL_KEYSTORE_TYPE;
+import static 
org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_SSL_TRUSTSTORE;
+import static 
org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_SSL_TRUSTSTORE_PASSWORD;
+import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_ENABLED_COMPONENTS;
+import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_KEYSTORE;
+import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_KEYSTORE_PASSWORD;
+import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_KEYSTORE_TYPE;
+import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_PROTOCOLS;
+import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_TRUSTSTORE;
+import static 
org.apache.geode.distributed.ConfigurationProperties.SSL_TRUSTSTORE_PASSWORD;
 import static org.apache.geode.internal.Assert.assertTrue;
-import static org.apache.geode.util.test.TestUtil.*;
-import static org.junit.Assert.*;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-import java.util.Properties;
+import static org.apache.geode.util.test.TestUtil.getResourcePath;
 
+import org.apache.geode.internal.security.SecurableCommunicationChannel;
+import org.apache.geode.management.internal.cli.i18n.CliStrings;
+import org.apache.geode.test.dunit.internal.JUnit4DistributedTestCase;
+import org.apache.geode.test.dunit.rules.GfshShellConnectionRule;
+import org.apache.geode.test.dunit.rules.LocatorServerStartupRule;
+import org.apache.geode.test.junit.categories.DistributedTest;
+import 
org.apache.geode.test.junit.rules.serializable.SerializableTemporaryFolder;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
@@ -32,47 +51,36 @@ import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.junit.rules.TemporaryFolder;
 
-import org.apache.geode.distributed.Locator;
-import org.apache.geode.internal.AvailablePortHelper;
-import org.apache.geode.internal.security.SecurableCommunicationChannel;
-import org.apache.geode.management.cli.Result.Status;
-import org.apache.geode.management.internal.cli.CliUtil;
-import org.apache.geode.management.internal.cli.HeadlessGfsh;
-import org.apache.geode.management.internal.cli.i18n.CliStrings;
-import org.apache.geode.management.internal.cli.result.CommandResult;
-import org.apache.geode.management.internal.cli.util.CommandStringBuilder;
-import org.apache.geode.test.dunit.Host;
-import org.apache.geode.test.dunit.VM;
-import org.apache.geode.test.dunit.internal.JUnit4DistributedTestCase;
-import org.apache.geode.test.junit.categories.DistributedTest;
-import 
org.apache.geode.test.junit.rules.serializable.SerializableTemporaryFolder;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.util.Properties;
 
 @Category(DistributedTest.class)
 public class ConnectToLocatorSSLDUnitTest extends JUnit4DistributedTestCase {
-  protected VM locator = null;
-  protected File jks = null;
-  protected File securityPropsFile = null;
-
   @Rule
   public TemporaryFolder folder = new SerializableTemporaryFolder();
+  @Rule
+  public LocatorServerStartupRule lsRule = new LocatorServerStartupRule();
+
+  protected File jks = null;
+  protected File securityPropsFile = null;
+  protected Properties securityProps;
 
   @Before
   public void before() throws Exception {
-    final Host host = Host.getHost(0);
-    this.locator = host.getVM(0);
     this.jks = new File(getResourcePath(getClass(), "/ssl/trusted.keystore"));
     securityPropsFile = folder.newFile("security.properties");
+    securityProps = new Properties();
   }
 
   @After
   public void after() throws Exception {
     securityPropsFile.delete();
-    CliUtil.isGfshVM = false;
   }
 
   @Test
   public void testConnectToLocatorWithSSL() throws Exception {
-    Properties securityProps = new Properties();
     securityProps.setProperty(SSL_ENABLED_COMPONENTS,
         SecurableCommunicationChannel.LOCATOR.getConstant());
     securityProps.setProperty(SSL_KEYSTORE, jks.getCanonicalPath());
@@ -82,12 +90,12 @@ public class ConnectToLocatorSSLDUnitTest extends 
JUnit4DistributedTestCase {
     securityProps.setProperty(SSL_TRUSTSTORE_PASSWORD, "password");
     securityProps.setProperty(SSL_PROTOCOLS, "TLSv1.2,TLSv1.1");
 
+
     setUpLocatorAndConnect(securityProps);
   }
 
   @Test
   public void testConnectToLocatorWithLegacyClusterSSL() throws Exception {
-    Properties securityProps = new Properties();
     securityProps.setProperty(CLUSTER_SSL_ENABLED, "true");
     securityProps.setProperty(CLUSTER_SSL_KEYSTORE, jks.getCanonicalPath());
     securityProps.setProperty(CLUSTER_SSL_KEYSTORE_PASSWORD, "password");
@@ -100,7 +108,6 @@ public class ConnectToLocatorSSLDUnitTest extends 
JUnit4DistributedTestCase {
 
   @Test
   public void testConnectToLocatorWithLegacyJMXSSL() throws Exception {
-    Properties securityProps = new Properties();
     securityProps.setProperty(JMX_MANAGER_SSL_ENABLED, "true");
     securityProps.setProperty(JMX_MANAGER_SSL_KEYSTORE, 
jks.getCanonicalPath());
     securityProps.setProperty(JMX_MANAGER_SSL_KEYSTORE_PASSWORD, "password");
@@ -112,41 +119,18 @@ public class ConnectToLocatorSSLDUnitTest extends 
JUnit4DistributedTestCase {
   }
 
   public void setUpLocatorAndConnect(Properties securityProps) throws 
Exception {
-    // set up locator with cluster-ssl-*
-    int[] ports = AvailablePortHelper.getRandomAvailableTCPPorts(2);
-    int locatorPort = ports[0];
-    int jmxPort = ports[1];
-
-    locator.invoke(() -> {
-      Properties props = new Properties();
-      props.setProperty(MCAST_PORT, "0");
-      props.put(JMX_MANAGER, "true");
-      props.put(JMX_MANAGER_START, "true");
-      props.put(JMX_MANAGER_PORT, jmxPort + "");
-      props.putAll(securityProps);
-      Locator.startLocatorAndDS(locatorPort, folder.newFile("locator.log"), 
props);
-    });
+    lsRule.getLocatorVM(0, securityProps);
 
     // saving the securityProps to a file
     OutputStream out = new FileOutputStream(securityPropsFile);
     securityProps.store(out, "");
 
-    // run gfsh connect command in this vm
-    CliUtil.isGfshVM = true;
-    String shellId = getClass().getSimpleName();
-    HeadlessGfsh gfsh =
-        new HeadlessGfsh(shellId, 30, 
folder.newFolder("gfsh_files").getCanonicalPath());
-
-    // connect to the locator with the saved property file
-    final CommandStringBuilder command = new 
CommandStringBuilder(CliStrings.CONNECT);
-    command.addOption(CliStrings.CONNECT__LOCATOR, "localhost[" + locatorPort 
+ "]");
-    command.addOption(CliStrings.CONNECT__SECURITY_PROPERTIES,
+    GfshShellConnectionRule gfshConnector =
+        new GfshShellConnectionRule(lsRule.getPort(0), 
GfshShellConnectionRule.PortType.locator);
+    gfshConnector.connect(CliStrings.CONNECT__SECURITY_PROPERTIES,
         securityPropsFile.getCanonicalPath());
-
-    gfsh.executeCommand(command.toString());
-    CommandResult result = (CommandResult) gfsh.getResult();
-    assertEquals(Status.OK, result.getStatus());
-    assertTrue(result.getContent().toString().contains("Successfully connected 
to"));
+    assertTrue(gfshConnector.isConnected());
+    gfshConnector.close();
   }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2777aec0/geode-core/src/test/java/org/apache/geode/management/internal/security/GfshCommandsPostProcessorTest.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/test/java/org/apache/geode/management/internal/security/GfshCommandsPostProcessorTest.java
 
b/geode-core/src/test/java/org/apache/geode/management/internal/security/GfshCommandsPostProcessorTest.java
index d3390ba..37d1795 100644
--- 
a/geode-core/src/test/java/org/apache/geode/management/internal/security/GfshCommandsPostProcessorTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/management/internal/security/GfshCommandsPostProcessorTest.java
@@ -50,7 +50,9 @@ public class GfshCommandsPostProcessorTest {
           "org/apache/geode/management/internal/security/cacheServer.json");
     }
   };
-
+  @Rule
+  public GfshShellConnectionRule gfshConnection =
+      new GfshShellConnectionRule(jmxPort, 
GfshShellConnectionRule.PortType.jmxManger);
   private HeadlessGfsh gfsh = null;
 
   @BeforeClass
@@ -60,9 +62,6 @@ public class GfshCommandsPostProcessorTest {
     
serverStarter.cache.createRegionFactory(RegionShortcut.REPLICATE).create("region1");
   }
 
-  @Rule
-  public GfshShellConnectionRule gfshConnection = new 
GfshShellConnectionRule(jmxPort);
-
   @Before
   public void before() {
     gfsh = gfshConnection.getGfsh();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2777aec0/geode-core/src/test/java/org/apache/geode/management/internal/security/GfshCommandsSecurityTest.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/test/java/org/apache/geode/management/internal/security/GfshCommandsSecurityTest.java
 
b/geode-core/src/test/java/org/apache/geode/management/internal/security/GfshCommandsSecurityTest.java
index b2dc6fe..9480a03 100644
--- 
a/geode-core/src/test/java/org/apache/geode/management/internal/security/GfshCommandsSecurityTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/management/internal/security/GfshCommandsSecurityTest.java
@@ -74,7 +74,9 @@ public class GfshCommandsSecurityTest {
           "org/apache/geode/management/internal/security/cacheServer.json");
     }
   };
-
+  @Rule
+  public GfshShellConnectionRule gfshConnection =
+      new GfshShellConnectionRule(jmxPort, 
GfshShellConnectionRule.PortType.jmxManger);
   private HeadlessGfsh gfsh = null;
 
   @BeforeClass
@@ -84,9 +86,6 @@ public class GfshCommandsSecurityTest {
     
serverStarter.cache.createRegionFactory(RegionShortcut.REPLICATE).create("region1");
   }
 
-  @Rule
-  public GfshShellConnectionRule gfshConnection = new 
GfshShellConnectionRule(jmxPort);
-
   @Before
   public void before() {
     gfsh = gfshConnection.getGfsh();
@@ -95,13 +94,13 @@ public class GfshCommandsSecurityTest {
   @Test
   @ConnectionConfiguration(user = "data-admin", password = "wrongPwd")
   public void testInvalidCredentials() throws Exception {
-    assertFalse(gfshConnection.isAuthenticated());
+    assertFalse(gfshConnection.isConnected());
   }
 
   @Test
   @ConnectionConfiguration(user = "data-admin", password = "1234567")
   public void testValidCredentials() throws Exception {
-    assertTrue(gfshConnection.isAuthenticated());
+    assertTrue(gfshConnection.isConnected());
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2777aec0/geode-core/src/test/java/org/apache/geode/test/dunit/rules/GfshShellConnectionRule.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/test/java/org/apache/geode/test/dunit/rules/GfshShellConnectionRule.java
 
b/geode-core/src/test/java/org/apache/geode/test/dunit/rules/GfshShellConnectionRule.java
index 25780e6..44da08b 100644
--- 
a/geode-core/src/test/java/org/apache/geode/test/dunit/rules/GfshShellConnectionRule.java
+++ 
b/geode-core/src/test/java/org/apache/geode/test/dunit/rules/GfshShellConnectionRule.java
@@ -14,12 +14,11 @@
  */
 package org.apache.geode.test.dunit.rules;
 
+import org.apache.geode.management.cli.Result;
 import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.cli.HeadlessGfsh;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.cli.result.CommandResult;
-import org.apache.geode.management.internal.cli.result.ErrorResultData;
-import org.apache.geode.management.internal.cli.result.ResultBuilder;
 import org.apache.geode.management.internal.cli.util.CommandStringBuilder;
 import org.apache.geode.test.junit.rules.DescribedExternalResource;
 import org.junit.runner.Description;
@@ -32,39 +31,41 @@ import org.junit.runner.Description;
 public class GfshShellConnectionRule extends DescribedExternalResource {
 
   private int port = 0;
-  private boolean useHttp = false;
+  private PortType portType = null;
   private HeadlessGfsh gfsh;
-  private boolean authenticated;
+  private boolean connected;
 
-  /**
-   * Rule constructor
-   */
-
-  public GfshShellConnectionRule(int port) {
-    this.useHttp = false;
-    this.port = port;
-  }
-
-  public GfshShellConnectionRule(int port, boolean useHttp) {
-    this.useHttp = useHttp;
+  public GfshShellConnectionRule(int port, PortType portType) {
+    this.portType = portType;
     this.port = port;
+    try {
+      this.gfsh = new HeadlessGfsh(getClass().getName(), 30, "gfsh_files");
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+    this.connected = false;
   }
 
   protected void before(Description description) throws Throwable {
-    CliUtil.isGfshVM = true;
-    String shellId = getClass().getSimpleName() + "_" + 
description.getMethodName();
-    gfsh = new HeadlessGfsh(shellId, 30, "gfsh_files"); // TODO: move to 
TemporaryFolder
-
-    final CommandStringBuilder connectCommand = new 
CommandStringBuilder(CliStrings.CONNECT);
-
     ConnectionConfiguration config = 
description.getAnnotation(ConnectionConfiguration.class);
     if (config != null) {
-      connectCommand.addOption(CliStrings.CONNECT__USERNAME, config.user());
-      connectCommand.addOption(CliStrings.CONNECT__PASSWORD, 
config.password());
+      connect(CliStrings.CONNECT__USERNAME, config.user(), 
CliStrings.CONNECT__PASSWORD,
+          config.password());
+    } else {
+      connect();
     }
+  }
+
+  public void connect(String... options) throws Exception {
+    CliUtil.isGfshVM = true;
+    final CommandStringBuilder connectCommand = new 
CommandStringBuilder(CliStrings.CONNECT);
 
     String endpoint;
-    if (useHttp) {
+    if (portType == PortType.locator) {
+      // port is the locator port
+      endpoint = "localhost[" + port + "]";
+      connectCommand.addOption(CliStrings.CONNECT__LOCATOR, endpoint);
+    } else if (portType == PortType.http) {
       endpoint = "http://localhost:"; + port + "/gemfire/v1";
       connectCommand.addOption(CliStrings.CONNECT__USE_HTTP, 
Boolean.TRUE.toString());
       connectCommand.addOption(CliStrings.CONNECT__URL, endpoint);
@@ -72,30 +73,32 @@ public class GfshShellConnectionRule extends 
DescribedExternalResource {
       endpoint = "localhost[" + port + "]";
       connectCommand.addOption(CliStrings.CONNECT__JMX_MANAGER, endpoint);
     }
-    System.out.println(getClass().getSimpleName() + " using endpoint: " + 
endpoint);
+
+    // add the extra options
+    if (options != null) {
+      for (int i = 0; i < options.length; i += 2) {
+        connectCommand.addOption(options[i], options[i + 1]);
+      }
+    }
 
     gfsh.executeCommand(connectCommand.toString());
 
     CommandResult result = (CommandResult) gfsh.getResult();
-    if (result.getResultData() instanceof ErrorResultData) {
-      ErrorResultData errorResultData = (ErrorResultData) 
result.getResultData();
-      this.authenticated =
-          !(errorResultData.getErrorCode() == 
ResultBuilder.ERRORCODE_CONNECTION_ERROR);
-    } else {
-      this.authenticated = true;
-    }
+    connected = (result.getStatus() == Result.Status.OK);
   }
 
   /**
    * Override to tear down your specific external resource.
    */
   protected void after(Description description) throws Throwable {
+    close();
+  }
+
+  public void close() throws Exception {
     if (gfsh != null) {
-      gfsh.clearEvents();
-      gfsh.executeCommand("disconnect");
+      gfsh.clear();
       gfsh.executeCommand("exit");
       gfsh.terminate();
-      gfsh.setThreadLocalInstance();
       gfsh = null;
     }
     CliUtil.isGfshVM = false;
@@ -105,7 +108,11 @@ public class GfshShellConnectionRule extends 
DescribedExternalResource {
     return gfsh;
   }
 
-  public boolean isAuthenticated() {
-    return authenticated;
+  public boolean isConnected() {
+    return connected;
+  }
+
+  public enum PortType {
+    locator, jmxManger, http
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2777aec0/geode-core/src/test/java/org/apache/geode/test/dunit/rules/LocatorServerStartupRule.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/test/java/org/apache/geode/test/dunit/rules/LocatorServerStartupRule.java
 
b/geode-core/src/test/java/org/apache/geode/test/dunit/rules/LocatorServerStartupRule.java
index 4e10b0a..6053e1e 100644
--- 
a/geode-core/src/test/java/org/apache/geode/test/dunit/rules/LocatorServerStartupRule.java
+++ 
b/geode-core/src/test/java/org/apache/geode/test/dunit/rules/LocatorServerStartupRule.java
@@ -36,14 +36,11 @@ import java.util.Properties;
  */
 public class LocatorServerStartupRule extends ExternalResource implements 
Serializable {
 
-  private Host host = getHost(0);
-
-  public int[] ports = new int[4];
-
-
   // these are only avaialbe in each VM
   public static ServerStarterRule serverStarter;
   public static LocatorStarterRule locatorStarter;
+  public int[] ports = new int[4];
+  private Host host = getHost(0);
 
   @Before
   public void before() {
@@ -67,6 +64,7 @@ public class LocatorServerStartupRule extends 
ExternalResource implements Serial
    */
   public VM getLocatorVM(int index, Properties locatorProperties) throws 
IOException {
     VM locatorVM = host.getVM(index);
+    locatorProperties.setProperty(NAME, "locator-" + index);
     int locatorPort = locatorVM.invoke(() -> {
       locatorStarter = new LocatorStarterRule(locatorProperties);
       locatorStarter.startLocator();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2777aec0/geode-web/src/test/java/org/apache/geode/management/internal/security/GfshCommandsOverHttpSecurityTest.java
----------------------------------------------------------------------
diff --git 
a/geode-web/src/test/java/org/apache/geode/management/internal/security/GfshCommandsOverHttpSecurityTest.java
 
b/geode-web/src/test/java/org/apache/geode/management/internal/security/GfshCommandsOverHttpSecurityTest.java
index d477565..5449568 100644
--- 
a/geode-web/src/test/java/org/apache/geode/management/internal/security/GfshCommandsOverHttpSecurityTest.java
+++ 
b/geode-web/src/test/java/org/apache/geode/management/internal/security/GfshCommandsOverHttpSecurityTest.java
@@ -24,6 +24,6 @@ import org.junit.experimental.categories.Category;
 @Category({IntegrationTest.class, SecurityTest.class})
 public class GfshCommandsOverHttpSecurityTest extends GfshCommandsSecurityTest 
{
   public GfshCommandsOverHttpSecurityTest() {
-    gfshConnection = new GfshShellConnectionRule(httpPort, true);
+    gfshConnection = new GfshShellConnectionRule(httpPort, 
GfshShellConnectionRule.PortType.http);
   }
 }

Reply via email to