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

sai_boorlagadda 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 4e53223  GEODE-5146: WAN Information view in Pulse shows wrong status 
for remo… (#1877)
4e53223 is described below

commit 4e53223979761a23a9e73a68ffbbe40d9ae75aaf
Author: Sai Boorlagadda <sai.boorlaga...@gmail.com>
AuthorDate: Fri May 4 15:08:10 2018 -0700

    GEODE-5146: WAN Information view in Pulse shows wrong status for remo… 
(#1877)
---
 .../internal/beans/DistributedSystemBridge.java    |  12 +-
 .../beans/DistributedSystemBridgeJUnitTest.java    | 142 ++++++++++++++++++++-
 2 files changed, 146 insertions(+), 8 deletions(-)

diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/beans/DistributedSystemBridge.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/beans/DistributedSystemBridge.java
index a0618f3..3fa419e 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/beans/DistributedSystemBridge.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/beans/DistributedSystemBridge.java
@@ -1405,11 +1405,17 @@ public class DistributedSystemBridge {
       Map<String, Boolean> senderMap = new HashMap<>();
       for (GatewaySenderMXBean bean : mapOfGatewaySenders.values()) {
         Integer dsId = bean.getRemoteDSId();
-        if (dsId != null) {
-          senderMap.merge(dsId.toString(), bean.isRunning(), 
Boolean::logicalAnd);
+        if (dsId == null || dsId <= -1) {
+          continue;
+        }
+        if (bean.isParallel()) {
+          senderMap.merge(dsId.toString(), bean.isConnected(), 
Boolean::logicalAnd);
+        } else {
+          if (bean.isPrimary()) {
+            senderMap.put(dsId.toString(), bean.isConnected());
+          }
         }
       }
-
       return senderMap;
     }
 
diff --git 
a/geode-core/src/test/java/org/apache/geode/management/internal/beans/DistributedSystemBridgeJUnitTest.java
 
b/geode-core/src/test/java/org/apache/geode/management/internal/beans/DistributedSystemBridgeJUnitTest.java
index 236497a..f56d674 100644
--- 
a/geode-core/src/test/java/org/apache/geode/management/internal/beans/DistributedSystemBridgeJUnitTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/management/internal/beans/DistributedSystemBridgeJUnitTest.java
@@ -14,16 +14,23 @@
  */
 package org.apache.geode.management.internal.beans;
 
+import static 
org.apache.geode.management.internal.ManagementConstants.OBJECTNAME__GATEWAYSENDER_MXBEAN;
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.ArgumentMatchers.isA;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.Map;
+
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
 
 import org.junit.After;
 import org.junit.Before;
@@ -40,6 +47,8 @@ import org.apache.geode.internal.cache.backup.BackupService;
 import org.apache.geode.internal.cache.backup.FinishBackupRequest;
 import org.apache.geode.internal.cache.backup.PrepareBackupRequest;
 import org.apache.geode.internal.cache.persistence.PersistentMemberManager;
+import org.apache.geode.management.GatewaySenderMXBean;
+import org.apache.geode.management.internal.FederationComponent;
 import org.apache.geode.test.fake.Fakes;
 import org.apache.geode.test.junit.categories.UnitTest;
 
@@ -49,8 +58,13 @@ public class DistributedSystemBridgeJUnitTest {
   private GemFireCacheImpl cache;
   private BackupService backupService;
 
+  private DistributedSystemBridge bridge;
+
+  private ObjectName name1, name2, name3, name4;
+  private GatewaySenderMXBean bean1, bean2, bean3, bean4;
+
   @Before
-  public void createCache() throws IOException {
+  public void createCache() throws MalformedObjectNameException {
     cache = Fakes.cache();
     PersistentMemberManager memberManager = 
mock(PersistentMemberManager.class);
     backupService = mock(BackupService.class);
@@ -62,6 +76,31 @@ public class DistributedSystemBridgeJUnitTest {
     when(dlock.lock(any(), anyLong(), anyLong())).thenReturn(true);
 
     
DLockService.addLockServiceForTests(BackupDataStoreHelper.LOCK_SERVICE_NAME, 
dlock);
+
+    name1 = ObjectName
+        .getInstance(MessageFormat.format(OBJECTNAME__GATEWAYSENDER_MXBEAN, 
"sender1", "server1"));
+    name2 = ObjectName
+        .getInstance(MessageFormat.format(OBJECTNAME__GATEWAYSENDER_MXBEAN, 
"sender2", "server2"));
+    name3 = ObjectName
+        .getInstance(MessageFormat.format(OBJECTNAME__GATEWAYSENDER_MXBEAN, 
"sender3", "server3"));
+    name4 = ObjectName
+        .getInstance(MessageFormat.format(OBJECTNAME__GATEWAYSENDER_MXBEAN, 
"sender4", "server4"));
+
+    bean1 = mock(GatewaySenderMXBean.class);
+    bean2 = mock(GatewaySenderMXBean.class);
+    bean3 = mock(GatewaySenderMXBean.class);
+    bean4 = mock(GatewaySenderMXBean.class);
+
+    doReturn(2).when(bean1).getRemoteDSId();
+    doReturn(2).when(bean2).getRemoteDSId();
+    doReturn(3).when(bean3).getRemoteDSId();
+    doReturn(3).when(bean4).getRemoteDSId();
+
+    bridge = new DistributedSystemBridge(null, cache);
+    bridge.addGatewaySenderToSystem(name1, bean1, 
mock(FederationComponent.class));
+    bridge.addGatewaySenderToSystem(name2, bean2, 
mock(FederationComponent.class));
+    bridge.addGatewaySenderToSystem(name3, bean3, 
mock(FederationComponent.class));
+    bridge.addGatewaySenderToSystem(name4, bean4, 
mock(FederationComponent.class));
   }
 
   @After
@@ -73,7 +112,6 @@ public class DistributedSystemBridgeJUnitTest {
   public void testSuccessfulBackup() throws Exception {
     DistributionManager dm = cache.getDistributionManager();
 
-    DistributedSystemBridge bridge = new DistributedSystemBridge(null, cache);
     bridge.backupAllMembers("/tmp", null);
 
     InOrder inOrder = inOrder(dm, backupService);
@@ -94,8 +132,6 @@ public class DistributedSystemBridgeJUnitTest {
     when(dm.putOutgoing(isA(PrepareBackupRequest.class)))
         .thenThrow(new RuntimeException("Fail the prepare"));
 
-
-    DistributedSystemBridge bridge = new DistributedSystemBridge(null, cache);
     try {
       bridge.backupAllMembers("/tmp", null);
       fail("Should have failed with an exception");
@@ -105,4 +141,100 @@ public class DistributedSystemBridgeJUnitTest {
     verify(dm).putOutgoing(isA(AbortBackupRequest.class));
     verify(backupService).abortBackup();
   }
+
+  @Test
+  public void viewClusterStatusShouldBeTrueIfAllParallelSendersAreConnected() {
+    // parallel senders for dsid = 2
+    doReturn(true).when(bean1).isParallel();
+    doReturn(true).when(bean1).isConnected();
+    doReturn(true).when(bean2).isParallel();
+    doReturn(true).when(bean2).isConnected();
+
+    // parallel senders for dsid = 3
+    doReturn(true).when(bean3).isParallel();
+    doReturn(true).when(bean3).isConnected();
+    doReturn(true).when(bean4).isParallel();
+    doReturn(true).when(bean4).isConnected();
+
+    Map<String, Boolean> status = bridge.viewRemoteClusterStatus();
+    assertThat(status.keySet()).hasSize(2);
+    assertThat(status.keySet()).contains("2", "3");
+    assertThat(status.values()).contains(true, true);
+  }
+
+  @Test
+  public void 
viewClusterStatusShouldBeFalseIfAnyParallelSendersIsNotConnected() {
+    // parallel senders for dsid = 2
+    doReturn(true).when(bean1).isParallel();
+    doReturn(true).when(bean1).isConnected();
+    doReturn(true).when(bean2).isParallel();
+    doReturn(true).when(bean2).isConnected();
+
+    // parallel senders for dsid = 3
+    doReturn(true).when(bean3).isParallel();
+    doReturn(true).when(bean3).isConnected();
+    doReturn(true).when(bean4).isParallel();
+    doReturn(false).when(bean4).isConnected();
+
+    Map<String, Boolean> status = bridge.viewRemoteClusterStatus();
+    assertThat(status.keySet()).hasSize(2);
+    assertThat(status.keySet()).contains("2", "3");
+    assertThat(status.values()).contains(true, false);
+  }
+
+  @Test
+  public void viewClusterStatusShouldBeTrueIfASerialPrimaryIsConnected() {
+    // serial primary for dsid = 2
+    doReturn(false).when(bean1).isParallel();
+    doReturn(true).when(bean1).isPrimary();
+    doReturn(true).when(bean1).isConnected();
+
+    // serial secondary for dsid = 2
+    doReturn(false).when(bean2).isParallel();
+    doReturn(false).when(bean2).isPrimary();
+    doReturn(false).when(bean2).isConnected();
+
+    // serial primary for dsid = 3
+    doReturn(false).when(bean3).isParallel();
+    doReturn(true).when(bean3).isPrimary();
+    doReturn(true).when(bean3).isConnected();
+
+    // serial secondary for dsid = 3
+    doReturn(false).when(bean4).isParallel();
+    doReturn(false).when(bean4).isPrimary();
+    doReturn(false).when(bean4).isConnected();
+
+    Map<String, Boolean> status = bridge.viewRemoteClusterStatus();
+    assertThat(status.keySet()).hasSize(2);
+    assertThat(status.keySet()).contains("2", "3");
+    assertThat(status.values()).contains(true, true);
+  }
+
+  @Test
+  public void viewClusterStatusShouldBeFalseIfASerialPrimaryIsNotConnected() {
+    // serial primary for dsid = 2
+    doReturn(false).when(bean1).isParallel();
+    doReturn(true).when(bean1).isPrimary();
+    doReturn(true).when(bean1).isConnected();
+
+    // serial secondary for dsid = 2
+    doReturn(false).when(bean2).isParallel();
+    doReturn(false).when(bean2).isPrimary();
+    doReturn(false).when(bean2).isConnected();
+
+    // serial primary for dsid = 3
+    doReturn(false).when(bean3).isParallel();
+    doReturn(true).when(bean3).isPrimary();
+    doReturn(false).when(bean3).isConnected();
+
+    // serial secondary for dsid = 3
+    doReturn(false).when(bean4).isParallel();
+    doReturn(false).when(bean4).isPrimary();
+    doReturn(true).when(bean4).isConnected();
+
+    Map<String, Boolean> status = bridge.viewRemoteClusterStatus();
+    assertThat(status.keySet()).hasSize(2);
+    assertThat(status.keySet()).contains("2", "3");
+    assertThat(status.values()).contains(true, false);
+  }
 }

-- 
To stop receiving notification emails like this one, please contact
sai_boorlaga...@apache.org.

Reply via email to