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

prhomberg 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 a1b9725  GEODE-3539: Add missing test coverage for 'describe 
connection' command.
a1b9725 is described below

commit a1b9725a7cb351299a5239a79f96daed9d88865b
Author: Patrick Rhomberg <[email protected]>
AuthorDate: Mon Nov 6 10:40:46 2017 -0800

    GEODE-3539: Add missing test coverage for 'describe connection' command.
---
 .../DescribeConnectionCommandJUnitTest.java        | 90 ++++++++++++++++++++++
 .../assertions/GfshShellConnectionRuleAssert.java  | 25 ++++++
 2 files changed, 115 insertions(+)

diff --git 
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DescribeConnectionCommandJUnitTest.java
 
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DescribeConnectionCommandJUnitTest.java
new file mode 100644
index 0000000..ca93a02
--- /dev/null
+++ 
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DescribeConnectionCommandJUnitTest.java
@@ -0,0 +1,90 @@
+/*
+ * 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.management.internal.cli.commands;
+
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Spliterator;
+import java.util.Spliterators;
+import java.util.stream.StreamSupport;
+
+import com.google.common.collect.Iterators;
+import org.apache.logging.log4j.Logger;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.test.junit.categories.IntegrationTest;
+import org.apache.geode.test.junit.rules.GfshShellConnectionRule;
+import org.apache.geode.test.junit.rules.LocatorStarterRule;
+
+/**
+ * The GfshCommandJUnitTest class is a test suite of test cases testing the 
contract and
+ * functionality of the GfshCommand class for implementing GemFire shell 
(Gfsh) commands.
+ *
+ * @see org.apache.geode.management.internal.cli.commands.GfshCommand
+ * @see org.jmock.Expectations
+ * @see org.jmock.Mockery
+ * @see org.jmock.lib.legacy.ClassImposteriser
+ * @see org.junit.Assert
+ * @see org.junit.Test
+ * @since GemFire 7.0
+ */
+
+@Category(IntegrationTest.class)
+public class DescribeConnectionCommandJUnitTest {
+  public static Logger logger = LogService.getLogger();
+
+  @ClassRule
+  public static LocatorStarterRule locator = new 
LocatorStarterRule().withAutoStart();
+
+  @Rule
+  public GfshShellConnectionRule gfsh = new GfshShellConnectionRule();
+
+  @Test
+  public void executeWhileConnected() throws Exception {
+    gfsh.connectAndVerify(locator);
+    // We must be sure to catch either IPv4 or IPv6 descriptions.
+    String[] acceptableAddresses = getNetworkAddressArray();
+    logger.info(
+        "Expecting one of the following addresses: " + String.join(", ", 
acceptableAddresses));
+    gfsh.executeAndAssertThat("describe connection")
+        .tableHasColumnWithValueMatchingOneOf("Connection Endpoints", 
acceptableAddresses);
+  }
+
+  private String[] getNetworkAddressArray() throws SocketException {
+    Enumeration<NetworkInterface> networkInterfaces = 
NetworkInterface.getNetworkInterfaces();
+    NetworkInterface myInterface = networkInterfaces.nextElement();
+    Enumeration<InetAddress> myAddresses = myInterface.getInetAddresses();
+    return 
Collections.list(myAddresses).stream().map(InetAddress::getHostAddress)
+        .map(address -> formatAddressAndPort(address, 
locator.getJmxPort())).toArray(String[]::new);
+  }
+
+  @Test
+  public void executeWhileNotConnected() throws Exception {
+    gfsh.executeAndAssertThat("describe connection")
+        .tableHasColumnWithValuesContaining("Connection Endpoints", "Not 
connected");
+  }
+
+  private String formatAddressAndPort(String address, int port) {
+    address = address.startsWith("/") ? address.substring(1) : address;
+    return address + "[" + port + "]";
+  }
+}
diff --git 
a/geode-core/src/test/java/org/apache/geode/test/junit/assertions/GfshShellConnectionRuleAssert.java
 
b/geode-core/src/test/java/org/apache/geode/test/junit/assertions/GfshShellConnectionRuleAssert.java
index 79d54d9..84e979e 100644
--- 
a/geode-core/src/test/java/org/apache/geode/test/junit/assertions/GfshShellConnectionRuleAssert.java
+++ 
b/geode-core/src/test/java/org/apache/geode/test/junit/assertions/GfshShellConnectionRuleAssert.java
@@ -208,6 +208,31 @@ public class GfshShellConnectionRuleAssert
     return this;
   }
 
+  public GfshShellConnectionRuleAssert 
tableHasColumnWithValueMatchingOneOf(String header,
+      String... acceptedValues) {
+    GfJsonObject resultContentJSON = actual.getCommandResult().getContent();
+    Object content = resultContentJSON.get(header);
+
+    if (content == null) {
+      failWithMessage("Command result did not contain a table with column 
header <" + header + ">: "
+          + resultContentJSON.toString());
+    }
+
+    Object[] actualValues = toArray((JSONArray) content);
+
+    for (Object actualValue : actualValues) {
+      String actualValueString = (String) actualValue;
+      boolean actualValueContainsAnAcceptedValue =
+          Arrays.stream(acceptedValues).anyMatch(actualValueString::contains);
+
+      if (actualValueContainsAnAcceptedValue) {
+        return this;
+      }
+    }
+    failWithMessage("No accepted value found.");
+    return this;
+  }
+
   public GfshShellConnectionRuleAssert hasResult() {
     containsKeyValuePair("Result", "true");
 

-- 
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].

Reply via email to