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

jxue pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/helix.git


The following commit(s) were added to refs/heads/master by this push:
     new 788869c  Fix test logic for testExternalViewDiffFromTargetExternalView 
(#1835)
788869c is described below

commit 788869c001e2e41ae24e08981d9ab35274934ff9
Author: Junkai Xue <[email protected]>
AuthorDate: Mon Aug 9 11:44:07 2021 -0700

    Fix test logic for testExternalViewDiffFromTargetExternalView (#1835)
---
 .../TestRoutingTableProviderFromTargetEV.java      | 61 ++++++++++------------
 1 file changed, 28 insertions(+), 33 deletions(-)

diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/spectator/TestRoutingTableProviderFromTargetEV.java
 
b/helix-core/src/test/java/org/apache/helix/integration/spectator/TestRoutingTableProviderFromTargetEV.java
index 18f353f..35f15ca 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/spectator/TestRoutingTableProviderFromTargetEV.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/spectator/TestRoutingTableProviderFromTargetEV.java
@@ -19,11 +19,11 @@ package org.apache.helix.integration.spectator;
  * under the License.
  */
 
-import java.util.HashSet;
-import java.util.Map;
+import java.util.List;
 import java.util.Set;
-
+import java.util.concurrent.atomic.AtomicBoolean;
 import org.apache.helix.ConfigAccessor;
+import org.apache.helix.HelixDataAccessor;
 import org.apache.helix.HelixException;
 import org.apache.helix.HelixManager;
 import org.apache.helix.HelixManagerFactory;
@@ -37,16 +37,22 @@ import 
org.apache.helix.integration.manager.MockParticipantManager;
 import org.apache.helix.integration.task.WorkflowGenerator;
 import org.apache.helix.mock.participant.MockDelayMSStateModelFactory;
 import org.apache.helix.model.ClusterConfig;
+import org.apache.helix.model.ExternalView;
 import org.apache.helix.model.IdealState;
 import org.apache.helix.model.InstanceConfig;
+import org.apache.helix.model.MasterSlaveSMD;
+import org.apache.helix.model.Message;
 import org.apache.helix.participant.StateMachineEngine;
 import org.apache.helix.spectator.RoutingTableProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.testng.Assert;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
 public class TestRoutingTableProviderFromTargetEV extends ZkTestBase {
+  private static Logger LOG = 
LoggerFactory.getLogger(TestRoutingTableProviderFromTargetEV.class);
   private HelixManager _manager;
   private final String MASTER_SLAVE_STATE_MODEL = "MasterSlave";
   private final int NUM_NODES = 10;
@@ -87,7 +93,6 @@ public class TestRoutingTableProviderFromTargetEV extends 
ZkTestBase {
       stateMachine.registerStateModelFactory(MASTER_SLAVE_STATE_MODEL, 
delayFactory);
       _participants[i].syncStart();
     }
-
     _manager = HelixManagerFactory
         .getZKHelixManager(CLUSTER_NAME, "Admin", InstanceType.ADMINISTRATOR, 
ZK_ADDR);
     _manager.connect();
@@ -119,7 +124,7 @@ public class TestRoutingTableProviderFromTargetEV extends 
ZkTestBase {
     new RoutingTableProvider(_manager, PropertyType.TARGETEXTERNALVIEW);
   }
 
-  @Test
+  @Test (dependsOnMethods = "testTargetExternalViewWithoutEnable")
   public void testExternalViewDoesNotExist() {
     String resourceName = WorkflowGenerator.DEFAULT_TGT_DB + 1;
     RoutingTableProvider externalViewProvider =
@@ -132,7 +137,7 @@ public class TestRoutingTableProviderFromTargetEV extends 
ZkTestBase {
     }
   }
 
-  @Test (dependsOnMethods = "testTargetExternalViewWithoutEnable")
+  @Test (dependsOnMethods = "testExternalViewDoesNotExist")
   public void testExternalViewDiffFromTargetExternalView() throws Exception {
     ClusterConfig clusterConfig = 
_configAccessor.getClusterConfig(CLUSTER_NAME);
     clusterConfig.enableTargetExternalView(true);
@@ -146,38 +151,28 @@ public class TestRoutingTableProviderFromTargetEV extends 
ZkTestBase {
         new RoutingTableProvider(_manager, PropertyType.TARGETEXTERNALVIEW);
 
     try {
-      // ExternalView should not contain any MASTERS
-      // TargetExternalView should contain MASTERS same as the partition number
+      // If there is a pending message. TEV reflect to its target state and EV 
reflect to its current state.
       Set<InstanceConfig> externalViewMasters =
           
externalViewProvider.getInstancesForResource(WorkflowGenerator.DEFAULT_TGT_DB, 
"MASTER");
       Assert.assertEquals(externalViewMasters.size(), 0);
-
-      final Set<InstanceConfig> targetExternalViewMasters = new HashSet<>();
+      HelixDataAccessor accessor = _manager.getHelixDataAccessor();
       Assert.assertTrue(TestHelper.verify(() -> {
-        targetExternalViewMasters.clear();
-        targetExternalViewMasters.addAll(targetExternalViewProvider
-            .getInstancesForResource(WorkflowGenerator.DEFAULT_TGT_DB, 
"MASTER"));
-        return targetExternalViewMasters.size() == NUM_NODES;
+        ExternalView ev = 
accessor.getProperty(accessor.keyBuilder().externalView(WorkflowGenerator.DEFAULT_TGT_DB));
+        ExternalView tev =
+            
accessor.getProperty(accessor.keyBuilder().targetExternalView(WorkflowGenerator.DEFAULT_TGT_DB));
+        AtomicBoolean valid = new AtomicBoolean(true);
+        List<String> instances = 
accessor.getChildNames(accessor.keyBuilder().instanceConfigs());
+        instances.stream().forEach(i -> {
+          List<Message> messages = 
accessor.getChildValues(accessor.keyBuilder().messages(i));
+          messages.stream().forEach(m -> {
+            if 
(!m.getFromState().equals(ev.getStateMap(m.getPartitionName()).get(i)) || 
!m.getToState()
+                .equals(tev.getStateMap(m.getPartitionName()).get(i))) {
+              valid.set(false);
+            }
+          });
+        });
+        return valid.get();
       }, 3000));
-
-      // TargetExternalView MASTERS mapping should exactly match IdealState 
MASTERS mapping
-      Map<String, Map<String, String>> stateMap = 
_gSetupTool.getClusterManagementTool()
-          .getResourceIdealState(CLUSTER_NAME, 
WorkflowGenerator.DEFAULT_TGT_DB).getRecord().getMapFields();
-
-      Set<String> idealMasters = new HashSet<>();
-      Set<String> targetMasters = new HashSet<>();
-      for (Map<String, String> instanceMap : stateMap.values()) {
-        for (String instance : instanceMap.keySet()) {
-          if (instanceMap.get(instance).equals("MASTER")) {
-            idealMasters.add(instance);
-          }
-        }
-      }
-
-      for (InstanceConfig instanceConfig : targetExternalViewMasters) {
-        targetMasters.add(instanceConfig.getInstanceName());
-      }
-      Assert.assertEquals(targetMasters, idealMasters);
     } finally {
       externalViewProvider.shutdown();
       targetExternalViewProvider.shutdown();

Reply via email to