GEODE-8742: fix list gateways command when dispatcher-threads is set … (#5803)

* GEODE-8742: fix list gateways command when dispatcher-threads is set to 1

* empty commit to re-launch CI

* using CommandStringBuilder instead of hard-coding command

* small test change

* empty commit to re-launch CI

* empty commit to re-launch CI
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/beans/GatewaySenderMBeanBridge.java b/geode-core/src/main/java/org/apache/geode/management/internal/beans/GatewaySenderMBeanBridge.java
index 7eda2b4..c07802b 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/beans/GatewaySenderMBeanBridge.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/beans/GatewaySenderMBeanBridge.java
@@ -324,10 +324,20 @@
         }
       }
     } else {
-      ConcurrentSerialGatewaySenderEventProcessor cProc =
-          (ConcurrentSerialGatewaySenderEventProcessor) ((AbstractGatewaySender) sender)
-              .getEventProcessor();
-      for (SerialGatewaySenderEventProcessor lProc : cProc.getProcessors()) {
+      if (getDispatcherThreads() > 1) {
+        ConcurrentSerialGatewaySenderEventProcessor cProc =
+            (ConcurrentSerialGatewaySenderEventProcessor) ((AbstractGatewaySender) sender)
+                .getEventProcessor();
+        for (SerialGatewaySenderEventProcessor lProc : cProc.getProcessors()) {
+          if (lProc.getDispatcher() != null && lProc.getDispatcher().isConnectedToRemote()) {
+            this.dispatcher = lProc.getDispatcher();
+            return true;
+          }
+        }
+      } else {
+        SerialGatewaySenderEventProcessor lProc =
+            (SerialGatewaySenderEventProcessor) ((AbstractGatewaySender) sender)
+                .getEventProcessor();
         if (lProc.getDispatcher() != null && lProc.getDispatcher().isConnectedToRemote()) {
           this.dispatcher = lProc.getDispatcher();
           return true;
diff --git a/geode-wan/src/distributedTest/java/org/apache/geode/internal/cache/wan/wancommand/ListGatewaysCommandDUnitTest.java b/geode-wan/src/distributedTest/java/org/apache/geode/internal/cache/wan/wancommand/ListGatewaysCommandDUnitTest.java
index ba1de8e..b90159c 100644
--- a/geode-wan/src/distributedTest/java/org/apache/geode/internal/cache/wan/wancommand/ListGatewaysCommandDUnitTest.java
+++ b/geode-wan/src/distributedTest/java/org/apache/geode/internal/cache/wan/wancommand/ListGatewaysCommandDUnitTest.java
@@ -35,6 +35,7 @@
 import org.junit.experimental.categories.Category;
 
 import org.apache.geode.management.GatewayReceiverMXBean;
+import org.apache.geode.management.internal.cli.util.CommandStringBuilder;
 import org.apache.geode.management.internal.i18n.CliStrings;
 import org.apache.geode.test.awaitility.GeodeAwaitility;
 import org.apache.geode.test.dunit.rules.ClusterStartupRule;
@@ -450,6 +451,35 @@
         .hasRowSize(expectedGwReceiverSectionSize).hasColumns().contains("Port", "Member");
   }
 
+  @Test
+  public void testListGatewaysWithOneDispatcherThread() {
+    String command = new CommandStringBuilder(CliStrings.CREATE_GATEWAYSENDER)
+        .addOption(CliStrings.CREATE_GATEWAYSENDER__ID, "ln_Serial")
+        .addOption(CliStrings.CREATE_GATEWAYSENDER__REMOTEDISTRIBUTEDSYSTEMID, "2")
+        .addOption(CliStrings.CREATE_GATEWAYSENDER__DISPATCHERTHREADS, "1")
+        .getCommandString();
+
+    int lnPort = locatorSite1.getPort();
+
+    // setup servers in Site #1 (London)
+    server1 = clusterStartupRule.startServerVM(3, lnPort);
+    server2 = clusterStartupRule.startServerVM(4, lnPort);
+    server3 = clusterStartupRule.startServerVM(5, lnPort);
+
+    gfsh.executeAndAssertThat(command).statusIsSuccess();
+
+    gfsh.executeAndAssertThat(CliStrings.LIST_GATEWAY).statusIsSuccess()
+        .hasTableSection("gatewaySenders")
+        .hasRowSize(3).hasColumn("Status").contains("Running, not Connected");
+
+    gfsh.executeAndAssertThat(
+        CliStrings.LIST_GATEWAY + " --" + CliStrings.LIST_GATEWAY__SHOW_SENDERS_ONLY)
+        .statusIsSuccess()
+        .hasNoSection("gatewayReceivers")
+        .hasTableSection("gatewaySenders")
+        .hasRowSize(3).hasColumn("Status").contains("Running, not Connected");
+  }
+
   void setupClusters() {
     Integer lnPort = locatorSite1.getPort();
     Integer nyPort = locatorSite2.getPort();