diff --git a/brouter-core/src/main/java/btools/router/RoutingEngine.java b/brouter-core/src/main/java/btools/router/RoutingEngine.java index ad276bc..36fd442 100644 --- a/brouter-core/src/main/java/btools/router/RoutingEngine.java +++ b/brouter-core/src/main/java/btools/router/RoutingEngine.java @@ -166,6 +166,11 @@ public class RoutingEngine extends Thread long endTime = System.currentTimeMillis(); logInfo( "execution time = " + (endTime-startTime)/1000. + " seconds" ); } + catch( IllegalArgumentException e) + { + errorMessage = e.getMessage(); + logInfo( "Exception (linksProcessed=" + linksProcessed + ": " + errorMessage ); + } catch( Exception e) { errorMessage = e instanceof IllegalArgumentException ? e.getMessage() : e.toString(); diff --git a/brouter-mapaccess/src/main/java/btools/mapaccess/OsmFile.java b/brouter-mapaccess/src/main/java/btools/mapaccess/OsmFile.java index 0df7ece..9868119 100644 --- a/brouter-mapaccess/src/main/java/btools/mapaccess/OsmFile.java +++ b/brouter-mapaccess/src/main/java/btools/mapaccess/OsmFile.java @@ -83,7 +83,8 @@ final class OsmFile { long sum = 0; ghost = true; - for( int i=0; i< microCaches.length; i++ ) + int nc = microCaches == null ? 0 : microCaches.length; + for( int i=0; i< nc; i++ ) { MicroCache mc = microCaches[i]; if ( mc == null ) continue; @@ -102,7 +103,8 @@ final class OsmFile void cleanAll() { - for( int i=0; i< microCaches.length; i++ ) + int nc = microCaches == null ? 0 : microCaches.length; + for( int i=0; i< nc; i++ ) { MicroCache mc = microCaches[i]; if ( mc == null ) continue; diff --git a/brouter-server/src/test/java/btools/server/RouterTest.java b/brouter-server/src/test/java/btools/server/RouterTest.java index 12f4ad9..6933536 100644 --- a/brouter-server/src/test/java/btools/server/RouterTest.java +++ b/brouter-server/src/test/java/btools/server/RouterTest.java @@ -12,28 +12,52 @@ import btools.mapaccess.*; public class RouterTest { + private File workingDir; + @Test public void routerTest() throws Exception { URL resulturl = this.getClass().getResource( "/testtrack0.gpx" ); Assert.assertTrue( "reference result not found: ", resulturl != null ); File resultfile = new File(resulturl.getFile()); - File workingDir = resultfile.getParentFile(); + workingDir = resultfile.getParentFile(); + String msg; + + // first test: route within dreiech test-map crossing tile border + + msg = calcRoute( 8.720897, 50.002515, 8.723658, 49.997510, "testtrack" ); + + // error message from router? + Assert.assertTrue( "routing failed: " + msg, msg == null ); + + // if the track didn't change, we expect the first alternative also + File a1 = new File( workingDir, "testtrack1.gpx" ); + Assert.assertTrue( "result content missmatch", a1.exists() ); + + // second test: to-point far off + + msg = calcRoute( 8.720897, 50.002515, 16.723658, 49.997510, "notrack" ); + + Assert.assertTrue( msg, msg != null && msg.indexOf( "not mapped" ) >= 0 ); + } + + private String calcRoute( double flon, double flat, double tlon, double tlat, String trackname ) throws Exception + { String wd = workingDir.getAbsolutePath(); List wplist = new ArrayList(); OsmNodeNamed n; n = new OsmNodeNamed(); n.name = "from"; - n.ilon = 180000000 + 8720897; - n.ilat = 90000000 + 50002515; + n.ilon = 180000000 + (int)(flon*1000000 + 0.5); + n.ilat = 90000000 + (int)(flat*1000000 + 0.5); wplist.add( n ); n = new OsmNodeNamed(); n.name = "to"; - n.ilon = 180000000 + 8723658; - n.ilat = 90000000 + 49997510; + n.ilon = 180000000 + (int)(tlon*1000000 + 0.5); + n.ilat = 90000000 + (int)(tlat*1000000 + 0.5); wplist.add( n ); RoutingContext rctx = new RoutingContext(); @@ -41,16 +65,12 @@ public class RouterTest // c.setAlternativeIdx( 1 ); RoutingEngine re = new RoutingEngine( - wd + "/testtrack", - wd + "/testlog", + wd + "/" + trackname, + wd + "/" + trackname, wd + "/../../../brouter-map-creator/target/test-classes/tmp/segments", wplist, rctx ); re.doRun( 0 ); - - // error message from router? - Assert.assertTrue( "routing failed: " + re.getErrorMessage(), re.getErrorMessage() == null ); - - // if the track didn't change, we expect the first alternative also - File a1 = new File( workingDir, "testtrack1.gpx" ); - Assert.assertTrue( "result content missmatch", a1.exists() ); + + return re.getErrorMessage(); } + }