package org.cad.interruptus.core.zookeeper; import com.google.common.collect.Lists; import java.util.HashMap; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import org.cad.interruptus.core.esper.FlowConfiguration; import org.cad.interruptus.core.esper.StatementConfiguration; import org.cad.interruptus.entity.Configuration; import org.cad.interruptus.entity.Flow; import org.cad.interruptus.entity.Statement; import org.cad.interruptus.entity.Type; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.*; import static org.mockito.Mockito.*; public class ZookeeperLeaderListenerTest { StatementConfiguration statementConfiguration; AtomicReference<Configuration> reference; FlowConfiguration flowConfiguration; AtomicBoolean isLeader; @Before public void setUp() { statementConfiguration = mock(StatementConfiguration.class); flowConfiguration = mock(FlowConfiguration.class); reference = new AtomicReference<>(); isLeader = new AtomicBoolean(false); } @Test public void testIsLeaderStartFlow() { final ZookeeperLeaderListener instance = new ZookeeperLeaderListener(isLeader, flowConfiguration, statementConfiguration, reference); final Flow f1 = new Flow("f1", "...", true); final Flow f2 = new Flow("f2", "...", false); final Configuration config = new Configuration(new HashMap<String, Type>(), new HashMap<String, Flow>(), new HashMap<String, Statement>()); config.put(f1); config.put(f2); when(flowConfiguration.list()).thenReturn(Lists.newArrayList("f1", "f2")); reference.set(config); isLeader.set(false); instance.isLeader(); assertTrue(isLeader.get()); verify(flowConfiguration).list(); verify(flowConfiguration).start(eq("f1")); verify(flowConfiguration).start(eq("f2")); } @Test public void testNotLeaderStopFlow() { final ZookeeperLeaderListener instance = new ZookeeperLeaderListener(isLeader, flowConfiguration, statementConfiguration, reference); final Flow f1 = new Flow("f1", "...", true); final Flow f2 = new Flow("f2", "...", false); final Configuration config = new Configuration(new HashMap<String, Type>(), new HashMap<String, Flow>(), new HashMap<String, Statement>()); config.put(f1); config.put(f2); when(flowConfiguration.list()).thenReturn(Lists.newArrayList("f1", "f2")); reference.set(config); isLeader.set(true); instance.notLeader(); assertFalse(isLeader.get()); verify(flowConfiguration).list(); verify(flowConfiguration).stop(eq("f1")); verify(flowConfiguration, never()).stop(eq("f2")); } @Test public void testIsLeaderStartStatement() { final ZookeeperLeaderListener instance = new ZookeeperLeaderListener(isLeader, flowConfiguration, statementConfiguration, reference); final Statement s1 = new Statement("s1", "...", true); final Statement s2 = new Statement("s2", "...", false); final Configuration config = new Configuration(new HashMap<String, Type>(), new HashMap<String, Flow>(), new HashMap<String, Statement>()); config.put(s1); config.put(s2); when(statementConfiguration.list()).thenReturn(Lists.newArrayList("s1", "s2")); reference.set(config); isLeader.set(false); instance.isLeader(); assertTrue(isLeader.get()); verify(statementConfiguration).list(); verify(statementConfiguration).start(eq("s1")); verify(statementConfiguration).start(eq("s2")); } @Test public void testNotLeaderStopStatement() { final ZookeeperLeaderListener instance = new ZookeeperLeaderListener(isLeader, flowConfiguration, statementConfiguration, reference); final Statement s1 = new Statement("s1", "...", true); final Statement s2 = new Statement("s2", "...", false); final Configuration config = new Configuration(new HashMap<String, Type>(), new HashMap<String, Flow>(), new HashMap<String, Statement>()); config.put(s1); config.put(s2); when(statementConfiguration.list()).thenReturn(Lists.newArrayList("s1", "s2")); reference.set(config); isLeader.set(true); instance.notLeader(); assertFalse(isLeader.get()); verify(statementConfiguration).list(); verify(statementConfiguration).stop(eq("s1")); verify(statementConfiguration, never()).stop(eq("s2")); } }