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

technoboy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere-elasticjob.git


The following commit(s) were added to refs/heads/master by this push:
     new 5112c6e  Fix ZookeeperElectionServiceTest.assertContend failed for 
travis-ci (#1665)
5112c6e is described below

commit 5112c6ecf27357e4a9b924d916905dfa25f42f6d
Author: wwj <[email protected]>
AuthorDate: Tue Oct 27 23:32:22 2020 +0800

    Fix ZookeeperElectionServiceTest.assertContend failed for travis-ci (#1665)
    
    * Fix ZookeeperElectionServiceTest.assertContend failed for travis-ci #1660
---
 .../zookeeper/ZookeeperElectionServiceTest.java    | 29 +++++++++++++++++-----
 1 file changed, 23 insertions(+), 6 deletions(-)

diff --git 
a/elasticjob-infra/elasticjob-registry-center/src/test/java/org/apache/shardingsphere/elasticjob/reg/zookeeper/ZookeeperElectionServiceTest.java
 
b/elasticjob-infra/elasticjob-registry-center/src/test/java/org/apache/shardingsphere/elasticjob/reg/zookeeper/ZookeeperElectionServiceTest.java
index c03b631..9634575 100644
--- 
a/elasticjob-infra/elasticjob-registry-center/src/test/java/org/apache/shardingsphere/elasticjob/reg/zookeeper/ZookeeperElectionServiceTest.java
+++ 
b/elasticjob-infra/elasticjob-registry-center/src/test/java/org/apache/shardingsphere/elasticjob/reg/zookeeper/ZookeeperElectionServiceTest.java
@@ -32,9 +32,12 @@ import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
 import java.lang.reflect.Field;
+import java.util.concurrent.CountDownLatch;
+import java.util.function.Supplier;
 
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.atLeastOnce;
 
 @RunWith(MockitoJUnitRunner.class)
 public class ZookeeperElectionServiceTest {
@@ -66,16 +69,30 @@ public class ZookeeperElectionServiceTest {
         anotherService.start();
         KillSession.kill(client.getZookeeperClient().getZooKeeper());
         service.stop();
-        blockUtilHasLeadership(anotherService);
-        verify(anotherElectionCandidate).startLeadership();
+        blockUntilCondition(() -> hasLeadership(anotherService));
+        ((CountDownLatch) getFieldValue(anotherService, 
"leaderLatch")).countDown();
+        blockUntilCondition(() -> !hasLeadership(anotherService));
+        anotherService.stop();
+        verify(anotherElectionCandidate, atLeastOnce()).startLeadership();
+        verify(anotherElectionCandidate, atLeastOnce()).stopLeadership();
     }
     
     @SneakyThrows
-    private void blockUtilHasLeadership(final Object obj) {
-        Field field = 
ZookeeperElectionService.class.getDeclaredField("leaderSelector");
-        field.setAccessible(true);
-        while (!((LeaderSelector) field.get(obj)).hasLeadership()) {
+    private void blockUntilCondition(final Supplier<Boolean> condition) {
+        while (!condition.get()) {
             Thread.sleep(100);
         }
     }
+
+    @SneakyThrows
+    private boolean hasLeadership(final ZookeeperElectionService 
zookeeperElectionService) {
+        return ((LeaderSelector) getFieldValue(zookeeperElectionService, 
"leaderSelector")).hasLeadership();
+    }
+
+    @SneakyThrows
+    private Object getFieldValue(final Object target, final String fieldName) {
+        Field field = target.getClass().getDeclaredField(fieldName);
+        field.setAccessible(true);
+        return field.get(target);
+    }
 }

Reply via email to