115 lines
4.2 KiB
Java
115 lines
4.2 KiB
Java
package btools.server;
|
|
|
|
|
|
import org.json.JSONObject;
|
|
import org.junit.Assert;
|
|
import org.junit.BeforeClass;
|
|
import org.junit.Ignore;
|
|
import org.junit.Test;
|
|
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.net.ConnectException;
|
|
import java.net.HttpURLConnection;
|
|
import java.net.URL;
|
|
import java.nio.charset.StandardCharsets;
|
|
|
|
public class RouteServerTest {
|
|
private static final String host = "localhost";
|
|
private static final String port = "17777";
|
|
private static final String baseUrl = "http://" + host + ":" + port + "/";
|
|
|
|
@BeforeClass
|
|
public static void setupServer() throws IOException {
|
|
File workingDir = new File(".").getCanonicalFile();
|
|
File segmentDir = new File(workingDir, "../brouter-map-creator/build/resources/test/tmp/segments");
|
|
File profileDir = new File(workingDir, "../misc/profiles2");
|
|
File customProfileDir = workingDir;
|
|
|
|
Runnable runnable = () -> {
|
|
try {
|
|
RouteServer.main(new String[]{segmentDir.getAbsolutePath(), profileDir.getAbsolutePath(), customProfileDir.getAbsolutePath(), port, "1"});
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
};
|
|
|
|
Thread thread = new Thread(runnable);
|
|
thread.start();
|
|
|
|
// Busy-wait for server startup
|
|
URL requestUrl = new URL(baseUrl);
|
|
HttpURLConnection httpConnection = (HttpURLConnection) requestUrl.openConnection();
|
|
for (int i = 10; i >= 0; i--) {
|
|
try {
|
|
httpConnection.setConnectTimeout(10);
|
|
httpConnection.connect();
|
|
break;
|
|
} catch (ConnectException e) {
|
|
if (i == 0) {
|
|
throw e;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void defaultRouteTrekking() throws IOException {
|
|
URL requestUrl = new URL(baseUrl + "brouter?lonlats=8.723037,50.000491|8.712737,50.002899&nogos=&profile=trekking&alternativeidx=0&format=geojson");
|
|
|
|
HttpURLConnection httpConnection = (HttpURLConnection) requestUrl.openConnection();
|
|
httpConnection.connect();
|
|
|
|
Assert.assertEquals(HttpURLConnection.HTTP_OK, httpConnection.getResponseCode());
|
|
|
|
InputStream inputStream = httpConnection.getInputStream();
|
|
JSONObject geoJson = new JSONObject(new String(inputStream.readAllBytes(), StandardCharsets.UTF_8));
|
|
Assert.assertEquals("1204", geoJson.query("/features/0/properties/track-length"));
|
|
}
|
|
|
|
@Test
|
|
public void overrideParameter() throws IOException {
|
|
URL requestUrl = new URL(baseUrl + "brouter?lonlats=8.723037,50.000491|8.712737,50.002899&nogos=&profile=trekking&alternativeidx=0&format=geojson&profile:avoid_unsafe=1");
|
|
HttpURLConnection httpConnection = (HttpURLConnection) requestUrl.openConnection();
|
|
httpConnection.connect();
|
|
|
|
Assert.assertEquals(HttpURLConnection.HTTP_OK, httpConnection.getResponseCode());
|
|
|
|
InputStream inputStream = httpConnection.getInputStream();
|
|
JSONObject geoJson = new JSONObject(new String(inputStream.readAllBytes(), StandardCharsets.UTF_8));
|
|
Assert.assertEquals("1902", geoJson.query("/features/0/properties/track-length"));
|
|
}
|
|
|
|
@Test
|
|
public void robots() throws IOException {
|
|
URL requestUrl = new URL(baseUrl + "robots.txt");
|
|
HttpURLConnection httpConnection = (HttpURLConnection) requestUrl.openConnection();
|
|
httpConnection.connect();
|
|
|
|
Assert.assertEquals(HttpURLConnection.HTTP_OK, httpConnection.getResponseCode());
|
|
|
|
String content = new String(httpConnection.getInputStream().readAllBytes(), StandardCharsets.UTF_8);
|
|
Assert.assertTrue(content.contains("Disallow: /"));
|
|
}
|
|
|
|
@Test
|
|
public void invalidUrl() throws IOException {
|
|
URL requestUrl = new URL(baseUrl + "invalid");
|
|
HttpURLConnection httpConnection = (HttpURLConnection) requestUrl.openConnection();
|
|
httpConnection.connect();
|
|
|
|
Assert.assertEquals(HttpURLConnection.HTTP_NOT_FOUND, httpConnection.getResponseCode());
|
|
}
|
|
|
|
@Test
|
|
@Ignore("Broken implementation (uppercase / lowercase issue)")
|
|
public void invalidReferrer() throws IOException {
|
|
URL requestUrl = new URL(baseUrl + "brouter/%7C/%2C");
|
|
HttpURLConnection httpConnection = (HttpURLConnection) requestUrl.openConnection();
|
|
httpConnection.setRequestProperty("Referer", "http://brouter.de/brouter-web/");
|
|
httpConnection.connect();
|
|
|
|
Assert.assertEquals(HttpURLConnection.HTTP_FORBIDDEN, httpConnection.getResponseCode());
|
|
}
|
|
}
|