@Test public void testRestartTopology() throws Exception { HttpServiceSchedulerClient client = Mockito.spy(new HttpServiceSchedulerClient(config, runtime, SCHEDULER_HTTP_ENDPOINT)); Mockito.doReturn(true) .when(client) .requestSchedulerService(Command.RESTART, restartTopologyRequest.toByteArray()); Assert.assertTrue(client.restartTopology(restartTopologyRequest)); Mockito.verify(client) .requestSchedulerService(Command.RESTART, restartTopologyRequest.toByteArray()); Mockito.doReturn(false) .when(client) .requestSchedulerService(Command.RESTART, restartTopologyRequest.toByteArray()); Assert.assertFalse(client.restartTopology(restartTopologyRequest)); Mockito.verify(client, Mockito.times(2)) .requestSchedulerService(Command.RESTART, restartTopologyRequest.toByteArray()); }
@RunWith(PowerMockRunner.class) @PrepareForTest(NetworkUtils.class) public class HttpServiceSchedulerClientTest { private static final String TOPOLOGY_NAME = "topologyName"; private static final String SCHEDULER_HTTP_ENDPOINT = ""; private final Config config = Mockito.mock(Config.class); private final Config runtime = Mockito.mock(Config.class); private Scheduler.RestartTopologyRequest restartTopologyRequest = Scheduler.RestartTopologyRequest.newBuilder() .setTopologyName(TOPOLOGY_NAME) .setContainerIndex(-1) .build(); private Scheduler.KillTopologyRequest killTopologyRequest = Scheduler.KillTopologyRequest.newBuilder().setTopologyName(TOPOLOGY_NAME).build(); @Test public void testRestartTopology() throws Exception { HttpServiceSchedulerClient client = Mockito.spy(new HttpServiceSchedulerClient(config, runtime, SCHEDULER_HTTP_ENDPOINT)); Mockito.doReturn(true) .when(client) .requestSchedulerService(Command.RESTART, restartTopologyRequest.toByteArray()); Assert.assertTrue(client.restartTopology(restartTopologyRequest)); Mockito.verify(client) .requestSchedulerService(Command.RESTART, restartTopologyRequest.toByteArray()); Mockito.doReturn(false) .when(client) .requestSchedulerService(Command.RESTART, restartTopologyRequest.toByteArray()); Assert.assertFalse(client.restartTopology(restartTopologyRequest)); Mockito.verify(client, Mockito.times(2)) .requestSchedulerService(Command.RESTART, restartTopologyRequest.toByteArray()); } @Test public void testKillTopology() throws Exception { HttpServiceSchedulerClient client = Mockito.spy(new HttpServiceSchedulerClient(config, runtime, SCHEDULER_HTTP_ENDPOINT)); Mockito.doReturn(true) .when(client) .requestSchedulerService(Command.KILL, killTopologyRequest.toByteArray()); Assert.assertTrue(client.killTopology(killTopologyRequest)); Mockito.verify(client).requestSchedulerService(Command.KILL, killTopologyRequest.toByteArray()); Mockito.doReturn(false) .when(client) .requestSchedulerService(Command.KILL, killTopologyRequest.toByteArray()); Assert.assertFalse(client.killTopology(killTopologyRequest)); Mockito.verify(client, Mockito.times(2)) .requestSchedulerService(Command.KILL, killTopologyRequest.toByteArray()); } /** Test Request Scheduler Service */ @Test public void testRequestSchedulerService() throws Exception { HttpServiceSchedulerClient client = Mockito.spy(new HttpServiceSchedulerClient(config, runtime, SCHEDULER_HTTP_ENDPOINT)); // Failed to create new http connection Mockito.doReturn(null).when(client).createHttpConnection(Mockito.any(Command.class)); Assert.assertFalse( client.requestSchedulerService(Mockito.any(Command.class), Mockito.any(byte[].class))); HttpURLConnection connection = Mockito.mock(HttpURLConnection.class); Mockito.doReturn(connection).when(client).createHttpConnection(Mockito.any(Command.class)); // Failed to send http post request PowerMockito.spy(NetworkUtils.class); PowerMockito.doReturn(false) .when( NetworkUtils.class, "sendHttpPostRequest", Mockito.eq(connection), Mockito.any(byte[].class)); Assert.assertFalse( client.requestSchedulerService(Mockito.any(Command.class), Mockito.any(byte[].class))); Mockito.verify(connection).disconnect(); // Received non-ok response PowerMockito.doReturn(true) .when( NetworkUtils.class, "sendHttpPostRequest", Mockito.eq(connection), Mockito.any(byte[].class)); Scheduler.SchedulerResponse notOKResponse = SchedulerUtils.constructSchedulerResponse(false); PowerMockito.doReturn(notOKResponse.toByteArray()) .when(NetworkUtils.class, "readHttpResponse", Mockito.eq(connection)); Assert.assertFalse( client.requestSchedulerService(Mockito.any(Command.class), Mockito.any(byte[].class))); Mockito.verify(connection, Mockito.times(2)).disconnect(); // Received ok response -- success case Scheduler.SchedulerResponse oKResponse = SchedulerUtils.constructSchedulerResponse(true); PowerMockito.doReturn(oKResponse.toByteArray()) .when(NetworkUtils.class, "readHttpResponse", Mockito.eq(connection)); Assert.assertTrue( client.requestSchedulerService(Mockito.any(Command.class), Mockito.any(byte[].class))); Mockito.verify(connection, Mockito.times(3)).disconnect(); } }