Github user cammckenzie commented on a diff in the pull request:

    https://github.com/apache/curator/pull/262#discussion_r179001451
  
    --- Diff: 
curator-recipes/src/test/java/org/apache/curator/framework/recipes/leader/TestLeaderLatch.java
 ---
    @@ -222,6 +223,35 @@ public void notLeader()
                 next.add(states.poll(timing.forSessionSleep().milliseconds(), 
TimeUnit.MILLISECONDS));
                 next.add(states.poll(timing.forSessionSleep().milliseconds(), 
TimeUnit.MILLISECONDS));
                 
Assert.assertTrue(next.equals(Arrays.asList(ConnectionState.LOST.name(), 
"false")) || next.equals(Arrays.asList("false", ConnectionState.LOST.name())), 
next.toString());
    +
    +            latch.close();
    +            client.close();
    +
    +            timing.sleepABit();
    +            states.clear();
    +            server = new TestingServer();
    +            client = CuratorFrameworkFactory.builder()
    +                    .connectString(server.getConnectString())
    +                    .connectionTimeoutMs(1000)
    +                    .sessionTimeoutMs(timing.session())
    +                    .retryPolicy(new RetryOneTime(1))
    +                    .connectionStateErrorPolicy(new 
SessionConnectionStateErrorPolicy())
    +                    .connectionHandlingPolicy(new 
StandardConnectionHandlingPolicy(30))
    +                    .build();
    +            
client.getConnectionStateListenable().addListener(stateListener);
    +            client.start();
    +            latch = new LeaderLatch(client, "/test");
    +            latch.addListener(listener);
    +            latch.start();
    +            
Assert.assertEquals(states.poll(timing.forWaiting().milliseconds(), 
TimeUnit.MILLISECONDS), ConnectionState.CONNECTED.name());
    +            
Assert.assertEquals(states.poll(timing.forWaiting().milliseconds(), 
TimeUnit.MILLISECONDS), "true");
    +            server.close();
    +            
Assert.assertEquals(states.poll(timing.forWaiting().milliseconds(), 
TimeUnit.MILLISECONDS), ConnectionState.SUSPENDED.name());
    +            next = Lists.newArrayList();
    +
    +            next.add(states.poll(timing.session() / 3, 
TimeUnit.MILLISECONDS));
    +            next.add(states.poll(timing.forSleepingABit().milliseconds(), 
TimeUnit.MILLISECONDS));
    +            
Assert.assertTrue(next.equals(Arrays.asList(ConnectionState.LOST.name(), 
"false")) || next.equals(Arrays.asList("false", ConnectionState.LOST.name())), 
next.toString());
    --- End diff --
    
    The issue isn't really the LeaderLatch specifically is it? I think it's 
probably cleaner to create a test case under curator-framework for the 
ConnectionStateManager and then have a test explicitly for injected LOST 
events, rather than have something in the LeaderLatch tests.
    
    Because, this test doesn't really cover the use case that was discussed 
originally (2 clients being leader at the same time).


---

Reply via email to