package io.monokkel.actors; import akka.actor.PoisonPill; import akka.actor.Props; import io.monokkel.messages.StartElastic; import org.elasticsearch.node.Node; import org.elasticsearch.node.NodeBuilder; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.*; import static org.powermock.api.mockito.PowerMockito.mockStatic; import static org.powermock.api.mockito.PowerMockito.when; @RunWith(PowerMockRunner.class) @PrepareForTest({NodeBuilder.class}) public class ElasticNodeActorTest extends ActorTest { @Before public void before(){ super.before(); } @Test public void onReceive_with_expect() throws Exception { mockStatic(NodeBuilder.class); NodeBuilder mockedNode = createNodeBuilder(); subject.tell(new StartElastic(),javaTestKit.getRef()); Thread.sleep(1000L); verify(mockedNode, times(1)).node(); } @Test public void postRestart() throws Exception { } @Test public void postStop_withNodeInitialized_expectNodeToBeClosed() throws Exception { mockStatic(NodeBuilder.class); NodeBuilder mockedNodeBuilder = createNodeBuilder(); Node mockedNode = mock(Node.class); when(mockedNodeBuilder.node()).thenReturn(mockedNode); subject.tell(new StartElastic(),javaTestKit.getRef()); subject.tell(PoisonPill.getInstance(),javaTestKit.getRef()); Thread.sleep(1000L); verify(mockedNode,times(1)).close(); } @Test public void postStop_withNoNodeInitialized_expectActorShutdownToNotFail() throws Exception { mockStatic(NodeBuilder.class); NodeBuilder mockedNodeBuilder = createNodeBuilder(); Node mockedNode = mock(Node.class); when(mockedNodeBuilder.node()).thenReturn(mockedNode); subject.tell(PoisonPill.getInstance(),javaTestKit.getRef()); Thread.sleep(1000L); } @Test public void postStop_withNodeFailingToBeCreated_expectActorShutdownToNotFail() throws Exception { mockStatic(NodeBuilder.class); NodeBuilder mockedNodeBuilder = createNodeBuilder(); Node mockedNode = mock(Node.class); when(mockedNodeBuilder.node()).thenThrow(new RuntimeException()).thenReturn(mockedNode); subject.tell(new StartElastic(),javaTestKit.getRef()); Thread.sleep(1000L); verify(mockedNodeBuilder,times(2)).node(); } @Override protected String getActorName() { return "ElasticNodeActor"; } @Override protected Props getActor() { return ElasticNodeActor.props(); } private NodeBuilder createNodeBuilder() { NodeBuilder mockedNode = mock(NodeBuilder.class); when(NodeBuilder.nodeBuilder()).thenReturn(mockedNode); return mockedNode; } }