2015-04-17 1 views
1

У меня есть приложение, которое использует структуру куратора для определения лидерства. Мы хотели иметь возможность протестировать изменения состояния с сервера Zookeeper, есть ли способ сделать это?Как протестировать приложение против Zookeeper

С нашей точки зрения было бы полезно, если бы мы могли отправить серверу состояния подключения к подключенным клиентам (ПОДКЛЮЧЕННЫЕ, РЕКОНДРОВАННЫЕ, ПОДОЗРЕВАЕМЫЕ, ПОТЕРЯННЫЕ). Я знаю, что куратор предоставляет класс TestingServer, но он, похоже, не обладает этой функциональностью.

Любые решения или мысли были бы высоко оценены!

+1

Вы смотрели на собственных тестах кураторских? Многие из тестов имитируют эти события. – Randgalt

+0

Прохладный, не понял, что они существуют. Благодаря! – jpints14

ответ

0

https://apache.googlesource.com/curator/+/refs/heads/CURATOR-190/curator-recipes/src/test/java/org/apache/curator/framework/client/TestBackgroundStates.java

@Test 
public void testConnectionStateListener() throws Exception 
{ 
    server.close(); 
    Timing timing = new Timing(); 
    CuratorFramework client = CuratorFrameworkFactory.newClient(server.getConnectString(), timing.session(), timing.connection(), new RetryOneTime(timing.milliseconds())); 
    try 
    { 
     client.start(); 
     final BlockingQueue<ConnectionState> stateVector = Queues.newLinkedBlockingQueue(1); 
     ConnectionStateListener listener = new ConnectionStateListener() 
     { 
      @Override 
      public void stateChanged(CuratorFramework client, ConnectionState newState) 
      { 
       stateVector.offer(newState); 
      } 
     }; 
     Timing waitingTiming = timing.forWaiting(); 
     client.getConnectionStateListenable().addListener(listener); 
     server = new TestingServer(server.getPort()); 
     Assert.assertEquals(stateVector.poll(waitingTiming.milliseconds(), TimeUnit.MILLISECONDS), ConnectionState.CONNECTED); 
     server.stop(); 
     Assert.assertEquals(stateVector.poll(waitingTiming.milliseconds(), TimeUnit.MILLISECONDS), ConnectionState.SUSPENDED); 
     Assert.assertEquals(stateVector.poll(waitingTiming.milliseconds(), TimeUnit.MILLISECONDS), ConnectionState.LOST); 
     server.restart(); 
     Assert.assertEquals(stateVector.poll(waitingTiming.milliseconds(), TimeUnit.MILLISECONDS), ConnectionState.RECONNECTED); 
     server.close(); 
     Assert.assertEquals(stateVector.poll(waitingTiming.milliseconds(), TimeUnit.MILLISECONDS), ConnectionState.SUSPENDED); 
     Assert.assertEquals(stateVector.poll(waitingTiming.milliseconds(), TimeUnit.MILLISECONDS), ConnectionState.LOST); 
    } 
    finally 
    { 
     CloseableUtils.closeQuietly(client); 
    } 
}