//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.core.web;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.doReturn;
import java.io.IOException;
import java.net.URL;
import java.util.Collections;
import org.apache.commons.io.IOUtils;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import uk.gov.dstl.baleen.core.manager.BaleenManager;
import uk.gov.dstl.baleen.core.pipelines.BaleenPipelineManager;
import uk.gov.dstl.baleen.core.utils.YamlConfiguration;
import uk.gov.dstl.baleen.exceptions.BaleenException;
/**
* Integration style test for {@link BaleenWebApi}.
*
*
*
*/
@RunWith(MockitoJUnitRunner.Silent.class)
public class BaleenWebApiTest {
@Mock
BaleenPipelineManager pipelineManager;
@Mock
BaleenManager baleenManager;
@Before
public void before() {
doReturn(pipelineManager).when(baleenManager).getPipelineManager();
doReturn(Collections.emptyList()).when(pipelineManager).getAll();
}
@Test
public void teststartStopWithoutServer() {
try {
new BaleenWebApi(baleenManager).start();
fail("No exception for unconfigured web api");
} catch (BaleenException e) {
// Exception is good
}
try {
new BaleenWebApi(baleenManager).stop();
} catch (BaleenException e) {
fail("Exception on stop unconfigured web api");
}
}
@Test
public void run() throws Exception {
BaleenWebApi web = new BaleenWebApi(baleenManager);
try {
web.configure(new YamlConfiguration());
web.start();
// Wait for the server to be up
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// Do nothing
}
String metrics = getResponse("/metrics");
assertFalse(metrics.isEmpty());
String status = getResponse("/status");
assertTrue(status.contains("ok"));
String pipelines = getResponse("/pipelines");
assertFalse(pipelines.isEmpty());
} finally {
web.stop();
}
}
private String getResponse(String path) throws IOException {
int port = BaleenWebApi.getPort(BaleenWebApi.DEFAULT_PORT);
URL url = new URL("http://localhost:" + port + "/api/1" + path);
return IOUtils.toString(url.openStream());
}
@Test
public void testPortFromString() {
assertNull(BaleenWebApi.getPortFromString("test"));
assertNull(BaleenWebApi.getPortFromString("-1"));
assertNull(BaleenWebApi.getPortFromString("123456789"));
assertEquals(new Integer(1234), BaleenWebApi.getPortFromString("1234"));
}
}