package me.prettyprint.cassandra.connection; import me.prettyprint.cassandra.BaseEmbededServerSetupTest; import me.prettyprint.cassandra.service.CassandraHost; import me.prettyprint.cassandra.service.CassandraHostConfigurator; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; public class HConnectionManagerListenerTest extends BaseEmbededServerSetupTest { private String listenerName = "test-listener"; @Test public void testOnRemoveHost() { setupClient(); final boolean[] eventFired = {false}; final CassandraHost host = new CassandraHost("127.0.0.1", 9170); connectionManager.addListener(listenerName, new ConnectionManagerEmptyListener() { @Override public void onRemoveHost(CassandraHost cassandraHost, boolean removed, String message) { assertEquals(cassandraHost, host); assertTrue(removed); eventFired[0] = true; } }); connectionManager.removeCassandraHost(host); assertTrue(eventFired[0]); } @Test public void testOnAddCassandraHostFail() { setupClient(); final CassandraHost host = new CassandraHost("127.0.0.1", 9180); final boolean[] eventFired = {false}; connectionManager.addListener(listenerName, new ConnectionManagerEmptyListener() { @Override public void onAddHost(CassandraHost cassandraHost, boolean added, String errorMessage, Exception e) { assertEquals(cassandraHost, host); assertFalse(added); eventFired[0] = true; } }); assertFalse(connectionManager.addCassandraHost(host)); assertTrue(eventFired[0]); } @Test public void testOnAddCassandraHostFailExists() { setupClient(); final CassandraHost host = new CassandraHost("127.0.0.1", 9170); final boolean[] eventFired = {false}; connectionManager.addListener(listenerName, new ConnectionManagerEmptyListener() { @Override public void onAddHost(CassandraHost cassandraHost, boolean added, String errorMessage, Exception e) { assertEquals(cassandraHost, host); assertFalse(added); eventFired[0] = true; } }); assertFalse(connectionManager.addCassandraHost(host)); assertTrue(eventFired[0]); } @Test public void testOnAddCassandraHostSuccess() { setupClient(); final CassandraHost host = new CassandraHost("127.0.0.1", 9170); final boolean[] eventFired = {false}; connectionManager.addListener(listenerName, new ConnectionManagerEmptyListener() { @Override public void onAddHost(CassandraHost cassandraHost, boolean added, String errorMessage, Exception e) { assertEquals(cassandraHost, host); assertTrue(added); eventFired[0] = true; } }); connectionManager.removeCassandraHost(host); assertTrue(connectionManager.addCassandraHost(host)); assertTrue(eventFired[0]); } @Test public void testOnHostDown() { setupClient(); final CassandraHost host = new CassandraHost("127.0.0.1", 9170); final boolean[] eventFired = {false}; connectionManager.addListener(listenerName, new ConnectionManagerEmptyListener() { @Override public void onHostDown(CassandraHost cassandraHost) { assertEquals(cassandraHost, host); eventFired[0] = true; } }); connectionManager.markHostAsDown(host); assertTrue(eventFired[0]); } @Test public void testOnHostRestored() throws InterruptedException { cassandraHostConfigurator = new CassandraHostConfigurator("127.0.0.1:9170"); cassandraHostConfigurator.setRetryDownedHostsDelayInSeconds(1); cassandraHostConfigurator.setRetryDownedHosts(true); connectionManager = new HConnectionManager(clusterName,cassandraHostConfigurator); final CassandraHost host = new CassandraHost("127.0.0.1", 9170); final boolean[] eventFired = {false}; connectionManager.addListener(listenerName, new ConnectionManagerEmptyListener() { @Override public void onHostRestored(CassandraHost cassandraHost) { assertEquals(cassandraHost, host); eventFired[0] = true; } }); connectionManager.markHostAsDown(host); Thread.sleep(1100); assertTrue(eventFired[0]); } @Test public void testOnSuspendCassandraHost() { setupClient(); final CassandraHost host = new CassandraHost("127.0.0.1", 9170); assertTrue(connectionManager.suspendCassandraHost(host)); final boolean[] eventFired = {false}; connectionManager.addListener(listenerName, new ConnectionManagerEmptyListener() { @Override public void onSuspendHost(CassandraHost cassandraHost, boolean removed) { assertEquals(cassandraHost, host); assertTrue(removed); eventFired[0] = true; } }); } @Test public void testOnUnSuspendCassandraHost() { setupClient(); final CassandraHost host = new CassandraHost("127.0.0.1", 9170); assertTrue(connectionManager.suspendCassandraHost(host)); final boolean[] eventFired = {false}; connectionManager.addListener(listenerName, new ConnectionManagerEmptyListener() { @Override public void onUnSuspendHost(CassandraHost cassandraHost, boolean readded) { assertEquals(cassandraHost, host); assertTrue(readded); eventFired[0] = true; } }); assertTrue(connectionManager.unsuspendCassandraHost(host)); } }