/******************************************************************************* * Gisgraphy Project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA * * Copyright 2008 Gisgraphy project * David Masclet <davidmasclet@gisgraphy.com> * * *******************************************************************************/ package com.gisgraphy.importer; import static com.gisgraphy.importer.ImporterConfig.ACCEPT_ALL_REGEX_OPTION; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; import java.util.Properties; import java.util.Random; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import com.gisgraphy.test.GisgraphyTestHelper; public class ImporterConfigTest { public static final String GISGRAPHY_DOWNLOAD_SERVER = "http://download.gisgraphy.com"; public static final String GISGRAPHY_DOWNLOAD_SERVER2 = "http://dl.gisgraphy.com"; public static String accessiblePath; public static String pathNotAccessible; public static String filePath; public static File tempDir; @BeforeClass public static void setUpClass() throws IOException { accessiblePath = System.getProperty("java.io.tmpdir") + System.getProperty("file.separator") + ImporterConfig.class.getSimpleName() + "-" + System.currentTimeMillis(); tempDir = new File(accessiblePath); tempDir.mkdir(); pathNotAccessible = System.getProperty("java.io.tmpdir") + System.getProperty("file.separator") + ImporterConfig.class.getSimpleName() + "-" + new Random().nextLong(); filePath = tempDir.getAbsolutePath() + System.getProperty("file.separator") + "test.txt"; File file = new File(filePath); file.createNewFile(); } @AfterClass public static void TearDownClass() throws IOException { // delete temp dir assertTrue("the tempDir has not been deleted", GisgraphyTestHelper.DeleteNonEmptyDirectory(tempDir)); } @Test public void isGeonamesDownloadDirectoryAccessible() { ImporterConfig importerConfig = new ImporterConfig(); importerConfig.setGeonamesDir(accessiblePath); assertTrue(importerConfig.isGeonamesDownloadDirectoryAccessible()); importerConfig.setGeonamesDir(pathNotAccessible); assertFalse(importerConfig.isGeonamesDownloadDirectoryAccessible()); importerConfig.setGeonamesDir(filePath); assertFalse(importerConfig.isGeonamesDownloadDirectoryAccessible()); } @Test public void isQuattroshapesDirectoryAccessible() { ImporterConfig importerConfig = new ImporterConfig(); importerConfig.setQuattroshapesDir(accessiblePath); assertTrue(importerConfig.isQuattroshapesDirectoryAccessible()); importerConfig.setQuattroshapesDir(pathNotAccessible); assertFalse(importerConfig.isQuattroshapesDirectoryAccessible()); importerConfig.setQuattroshapesDir(filePath); assertFalse(importerConfig.isQuattroshapesDirectoryAccessible()); } @Test public void isOpenAddressesDirectoryAccessible() { ImporterConfig importerConfig = new ImporterConfig(); importerConfig.setOpenAddressesDir(accessiblePath); assertTrue(importerConfig.isOpenAddressesDirectoryAccessible()); importerConfig.setOpenAddressesDir(pathNotAccessible); assertFalse(importerConfig.isOpenAddressesDirectoryAccessible()); importerConfig.setOpenAddressesDir(filePath); assertFalse(importerConfig.isOpenAddressesDirectoryAccessible()); } @Test public void setOpenStreetMapImporterShouldDisableHouseNumber() { ImporterConfig importerConfig = new ImporterConfig(); //setup importerConfig.setOpenstreetmapImporterEnabled(true); importerConfig.setOpenstreetmapHouseNumberImporterEnabled(true); assertTrue(importerConfig.isOpenstreetmapHouseNumberImporterEnabled()); assertTrue(importerConfig.isOpenstreetmapImporterEnabled()); //exercise importerConfig.setOpenstreetmapImporterEnabled(false); //check assertFalse(importerConfig.isOpenstreetmapHouseNumberImporterEnabled()); assertFalse(importerConfig.isOpenstreetmapImporterEnabled()); } @Test public void setOpenStreetMapHouseNumberImporterShouldNotBeEnabledIfOpenstreetmapIsDisabled() { ImporterConfig importerConfig = new ImporterConfig(); //setup importerConfig.setOpenstreetmapImporterEnabled(false); //exercise importerConfig.setOpenstreetmapHouseNumberImporterEnabled(true); //check assertFalse(importerConfig.isOpenstreetmapHouseNumberImporterEnabled()); assertFalse(importerConfig.isOpenstreetmapImporterEnabled()); } @Test public void isOpenStreetMapDownloadDirectoryAccessible() { ImporterConfig importerConfig = new ImporterConfig(); importerConfig.setOpenStreetMapDir(accessiblePath); assertTrue(importerConfig.isOpenStreetMapDownloadDirectoryAccessible()); importerConfig.setOpenStreetMapDir(pathNotAccessible); assertFalse(importerConfig.isOpenStreetMapDownloadDirectoryAccessible()); importerConfig.setOpenStreetMapDir(filePath); assertFalse(importerConfig.isOpenStreetMapDownloadDirectoryAccessible()); } @Test public void isOpenStreetMapHouseNumberDownloadDirectoryAccessible() { ImporterConfig importerConfig = new ImporterConfig(); importerConfig.setOpenStreetMapHouseNumberDir(accessiblePath); assertTrue(importerConfig.isOpenStreetMapHouseNumberDownloadDirectoryAccessible()); importerConfig.setOpenStreetMapHouseNumberDir(pathNotAccessible); assertFalse(importerConfig.isOpenStreetMapHouseNumberDownloadDirectoryAccessible()); importerConfig.setOpenStreetMapHouseNumberDir(filePath); assertFalse(importerConfig.isOpenStreetMapHouseNumberDownloadDirectoryAccessible()); } @Test public void isOpenStreetMapCitiesDirectoryAccessible() { ImporterConfig importerConfig = new ImporterConfig(); importerConfig.setOpenStreetMapCitiesDir(accessiblePath); assertTrue(importerConfig.isOpenStreetMapCitiesDirectoryAccessible()); importerConfig.setOpenStreetMapCitiesDir(pathNotAccessible); assertFalse(importerConfig.isOpenStreetMapCitiesDirectoryAccessible()); importerConfig.setOpenStreetMapCitiesDir(filePath); assertFalse(importerConfig.isOpenStreetMapCitiesDirectoryAccessible()); } @Test public void isOpenStreetMapPoiDirectoryAccessible() { ImporterConfig importerConfig = new ImporterConfig(); importerConfig.setOpenStreetMapPoisDir(accessiblePath); assertTrue(importerConfig.isOpenStreetMapPoisDirectoryAccessible()); importerConfig.setOpenStreetMapPoisDir(pathNotAccessible); assertFalse(importerConfig.isOpenStreetMapPoisDirectoryAccessible()); importerConfig.setOpenStreetMapPoisDir(filePath); assertFalse(importerConfig.isOpenStreetMapPoisDirectoryAccessible()); } @Test public void setOpenStreetMapDirShouldAddFileSeparatorIfItDoesnTEndsWithFileSeparator() { String openStreetMapDir = "Test"; ImporterConfig importerConfig = new ImporterConfig(); importerConfig.setOpenStreetMapDir(openStreetMapDir); Assert.assertTrue("setOpenStreetMapDir should add File separator", importerConfig.getOpenStreetMapDir().endsWith(File.separator)); Assert.assertEquals(openStreetMapDir + File.separator, importerConfig.getOpenStreetMapDir()); } @Test public void setOpenAdressesDirShouldAddFileSeparatorIfItDoesnTEndsWithFileSeparator() { String openAdressesDir = "Test"; ImporterConfig importerConfig = new ImporterConfig(); importerConfig.setOpenAddressesDir(openAdressesDir); Assert.assertTrue("setOpenAddressesDir should add File separator", importerConfig.getOpenAddressesDir().endsWith(File.separator)); Assert.assertEquals(openAdressesDir + File.separator, importerConfig.getOpenAddressesDir()); } @Test public void setQuattroshapesDirShouldAddFileSeparatorIfItDoesnTEndsWithFileSeparator() { String quattroshapes = "Test"; ImporterConfig importerConfig = new ImporterConfig(); importerConfig.setQuattroshapesDir(quattroshapes); Assert.assertTrue("setQuattroshapesDir should add File separator", importerConfig.getQuattroshapesDir().endsWith(File.separator)); Assert.assertEquals(quattroshapes + File.separator, importerConfig.getQuattroshapesDir()); } @Test public void setOpenStreetMapHouseNumberDirShouldAddFileSeparatorIfItDoesnTEndsWithFileSeparator() { String OpenStreetMapHouseNumberDir = "Test"; ImporterConfig importerConfig = new ImporterConfig(); importerConfig.setOpenStreetMapHouseNumberDir(OpenStreetMapHouseNumberDir); Assert.assertTrue("setOpenStreetMapHouseNumberDir should add File separator", importerConfig.getOpenStreetMapHouseNumberDir().endsWith(File.separator)); Assert.assertEquals(OpenStreetMapHouseNumberDir + File.separator, importerConfig.getOpenStreetMapHouseNumberDir()); } @Test public void setOpenStreetMapCitiesDirShouldAddFileSeparatorIfItDoesnTEndsWithFileSeparator() { String OpenStreetMapCitiesDir = "Test"; ImporterConfig importerConfig = new ImporterConfig(); importerConfig.setOpenStreetMapCitiesDir(OpenStreetMapCitiesDir); Assert.assertTrue("setOpenStreetMapCitiesDir should add File separator", importerConfig.getOpenStreetMapCitiesDir().endsWith(File.separator)); Assert.assertEquals(OpenStreetMapCitiesDir + File.separator, importerConfig.getOpenStreetMapCitiesDir()); } @Test public void setOpenStreetMapPoiDirShouldAddFileSeparatorIfItDoesnTEndsWithFileSeparator() { String OpenStreetMapPoiDir = "Test"; ImporterConfig importerConfig = new ImporterConfig(); importerConfig.setOpenStreetMapPoisDir(OpenStreetMapPoiDir); Assert.assertTrue("setOpenStreetMapPoiDir should add File separator", importerConfig.getOpenStreetMapPoisDir().endsWith(File.separator)); Assert.assertEquals(OpenStreetMapPoiDir + File.separator, importerConfig.getOpenStreetMapPoisDir()); } @Test public void setGeonamesDirShouldAddFileSeparatorIfItDoesnTEndsWithFileSeparator() { String geonamesDir = "Test"; ImporterConfig importerConfig = new ImporterConfig(); importerConfig.setGeonamesDir(geonamesDir); Assert.assertTrue("setGeonamesDir should add File separator", importerConfig.getGeonamesDir().endsWith(File.separator)); Assert.assertEquals(geonamesDir + File.separator, importerConfig.getGeonamesDir()); } @Test public void isGeonamesImporterShouldBeTrueByDefault() { ImporterConfig importerConfig = new ImporterConfig(); Assert.assertTrue("Geonames importer should be enabled by default ", importerConfig.isGeonamesImporterEnabled()); } @Test public void isQuattroshapeImporterShouldBeTrueByDefault() { ImporterConfig importerConfig = new ImporterConfig(); Assert.assertTrue("Quattroshapes importer should be enabled by default ", importerConfig.isQuattroshapesImporterEnabled()); } @Test public void isOpenAddressesImporterShouldBeTrueByDefault() { ImporterConfig importerConfig = new ImporterConfig(); Assert.assertTrue("OpenAddresses importer should be enabled by default ", importerConfig.isOpenaddressesImporterEnabled()); } @Test public void isOpenstreetmapImporterShouldBeTrueByDefault() { ImporterConfig importerConfig = new ImporterConfig(); Assert.assertTrue("OpenStreetMap importer should be enabled by default ", importerConfig.isOpenstreetmapImporterEnabled()); } @Test public void isConfigCorrectForImport(){ ImporterConfig importerConfig = new ImporterConfig(); //set Correct values importerConfig.setGeonamesDir(accessiblePath); importerConfig.setOpenStreetMapDir(accessiblePath); importerConfig.setQuattroshapesDir(accessiblePath); importerConfig.setAcceptRegExString(ImporterConfig.ACCEPT_ALL_REGEX_OPTION); //test with wrong geonamesDir importerConfig.setGeonamesDir(pathNotAccessible); Assert.assertFalse("when geonames dir is not ok the function should return false", importerConfig.isConfigCorrectForImport()); importerConfig.setGeonamesDir(accessiblePath); //test with wrong Openstreetmap dir importerConfig.setOpenStreetMapDir(pathNotAccessible); Assert.assertFalse("when openstreetmap dir is not ok the function should return false", importerConfig.isConfigCorrectForImport()); importerConfig.setOpenStreetMapDir(accessiblePath); //test with wrong Openaddresses dir importerConfig.setOpenAddressesDir(pathNotAccessible); Assert.assertFalse("when openaddresses dir is not ok the function should return false", importerConfig.isConfigCorrectForImport()); importerConfig.setOpenAddressesDir(accessiblePath); //test with wrong Openstreetmap house number dir importerConfig.setOpenStreetMapHouseNumberDir(pathNotAccessible); Assert.assertFalse("when openstreetmap house number dir is not ok the function should return false", importerConfig.isConfigCorrectForImport()); importerConfig.setOpenStreetMapHouseNumberDir(accessiblePath); //test with wrong Openstreetmap cities dir importerConfig.setOpenStreetMapCitiesDir(pathNotAccessible); Assert.assertFalse("when openstreetmap cities dir is not ok the function should return false", importerConfig.isConfigCorrectForImport()); importerConfig.setOpenStreetMapCitiesDir(accessiblePath); //test with wrong Openstreetmap poi dir importerConfig.setOpenStreetMapPoisDir(pathNotAccessible); Assert.assertFalse("when openstreetmap Poi dir is not ok the function should return false", importerConfig.isConfigCorrectForImport()); importerConfig.setOpenStreetMapPoisDir(accessiblePath); //test with wrong quattroshapesDir importerConfig.setQuattroshapesDir(pathNotAccessible); Assert.assertFalse("when QuattroshapesDir dir is not ok the function should return false", importerConfig.isConfigCorrectForImport()); importerConfig.setQuattroshapesDir(accessiblePath); //test with wrong regexp importerConfig.setAcceptRegExString("k[;l"); Assert.assertFalse("when regexp string is not ok the function should return false", importerConfig.isConfigCorrectForImport()); importerConfig.setAcceptRegExString(ImporterConfig.BASE_ACCEPT_REGEX); //test when everything is correct assertTrue("when all the condition are ok the function should return true", importerConfig.isConfigCorrectForImport()); importerConfig.setRetrieveFiles(true); importerConfig.setOpenStreetMapHouseNumberFilesToDownload(ImporterConfig.OPENSTREETMAP_DEFAULT_FILES_TO_DOWNLOAD); importerConfig.setOpenStreetMapPoisFilesToDownload(ImporterConfig.OPENSTREETMAP_DEFAULT_FILES_TO_DOWNLOAD); importerConfig.setOpenStreetMapCitiesFilesToDownload(ImporterConfig.OPENSTREETMAP_DEFAULT_FILES_TO_DOWNLOAD); importerConfig.setOpenStreetMapAdmFilesToDownload(ImporterConfig.OPENSTREETMAP_DEFAULT_FILES_TO_DOWNLOAD); importerConfig.setOpenStreetMapFilesToDownload(ImporterConfig.OPENSTREETMAP_DEFAULT_FILES_TO_DOWNLOAD); importerConfig.setOpenAddressesFilesToDownload(ImporterConfig.OPENADDRESSES_DEFAULT_FILES_TO_DOWNLOAD); importerConfig.setGeonamesFilesToDownload(ImporterConfig.GEONAMES_DEFAULT_FILES_TO_DOWNLOAD); String baseUrl = GISGRAPHY_DOWNLOAD_SERVER2; importerConfig.setGeonamesDownloadURL("http://download.geonames.org/export/dump/"); importerConfig.setOpenstreetMapDownloadURL(baseUrl+"/streets/"); importerConfig.setOpenAddressesDownloadURL(baseUrl+"/openaddresses/"); importerConfig.setOpenstreetMapCitiesDownloadURL(baseUrl+"/cities/"); importerConfig.setOpenstreetMapAdmDownloadURL(baseUrl+"/adms/"); importerConfig.setOpenstreetMapPoisDownloadURL(baseUrl+"/pois/"); importerConfig.setOpenstreetMaphouseNumbersDownloadURL(baseUrl+"/housenumbers/"); importerConfig.setQuattroshapesDownloadURL(baseUrl+"/quattroshapes/"); assertTrue("when all the condition are ok the function should return true when retrieve files is true", importerConfig.isConfigCorrectForImport()); } @Test public void testAcceptRegexpString(){ ImporterConfig importerConfig = new ImporterConfig(); importerConfig.setAcceptRegExString(" "); Assert.assertEquals(ImporterConfig.ACCEPT_ALL_REGEX_OPTION, importerConfig.getAcceptRegExString()); importerConfig.setAcceptRegExString("ATM"); Assert.assertEquals("base regexp should be added",ImporterConfig.BASE_ACCEPT_REGEX+"ATM", importerConfig.getAcceptRegExString()); importerConfig.setAcceptRegExString(null); Assert.assertEquals(ImporterConfig.ACCEPT_ALL_REGEX_OPTION, importerConfig.getAcceptRegExString()); importerConfig.setAcceptRegExString(ACCEPT_ALL_REGEX_OPTION); Assert.assertEquals("When option is "+ACCEPT_ALL_REGEX_OPTION+" no base regexp should be added",ACCEPT_ALL_REGEX_OPTION, importerConfig.getAcceptRegExString()); } @Test public void testSetOpenStreetMapFilesToDownload(){ ImporterConfig importerConfig = new ImporterConfig(); importerConfig.setOpenStreetMapFilesToDownload(" "); Assert.assertEquals(ImporterConfig.OPENSTREETMAP_DEFAULT_FILES_TO_DOWNLOAD, importerConfig.getOpenStreetMapFilesToDownload()); importerConfig.setOpenStreetMapFilesToDownload("FR.gis"); Assert.assertEquals("FR.gis", importerConfig.getOpenStreetMapFilesToDownload()); importerConfig.setOpenStreetMapFilesToDownload(null); Assert.assertEquals(ImporterConfig.OPENSTREETMAP_DEFAULT_FILES_TO_DOWNLOAD, importerConfig.getOpenStreetMapFilesToDownload()); } @Test public void testSetQuattroshapesFilesToDownload(){ ImporterConfig importerConfig = new ImporterConfig(); importerConfig.setQuattroshapesFilesToDownload(" "); Assert.assertEquals(ImporterConfig.QUATTROSHAPES_DEFAULT_FILES_TO_DOWNLOAD, importerConfig.getQuattroshapesFilesToDownload()); importerConfig.setQuattroshapesFilesToDownload("shapeXX.gis"); Assert.assertEquals("shapeXX.gis", importerConfig.getQuattroshapesFilesToDownload()); importerConfig.setQuattroshapesFilesToDownload(null); Assert.assertEquals(ImporterConfig.QUATTROSHAPES_DEFAULT_FILES_TO_DOWNLOAD, importerConfig.getQuattroshapesFilesToDownload()); } @Test public void testSetOpenStreetMapHouseNumberFilesToDownload(){ ImporterConfig importerConfig = new ImporterConfig(); importerConfig.setOpenStreetMapHouseNumberFilesToDownload(" "); Assert.assertEquals(ImporterConfig.OPENSTREETMAP_HOUSENUMBER_DEFAULT_FILES_TO_DOWNLOAD, importerConfig.getOpenStreetMapHouseNumberFilesToDownload()); importerConfig.setOpenStreetMapHouseNumberFilesToDownload("FR.gis"); Assert.assertEquals("FR.gis", importerConfig.getOpenStreetMapHouseNumberFilesToDownload()); importerConfig.setOpenStreetMapHouseNumberFilesToDownload(null); Assert.assertEquals(ImporterConfig.OPENSTREETMAP_HOUSENUMBER_DEFAULT_FILES_TO_DOWNLOAD, importerConfig.getOpenStreetMapHouseNumberFilesToDownload()); } @Test public void testSetGeonamesFileToDownload(){ ImporterConfig importerConfig = new ImporterConfig(); importerConfig.setGeonamesFilesToDownload(" "); Assert.assertEquals(ImporterConfig.GEONAMES_DEFAULT_FILES_TO_DOWNLOAD, importerConfig.getGeonamesFilesToDownload()); importerConfig.setGeonamesFilesToDownload("FR.zip"); Assert.assertEquals("FR.zip", importerConfig.getGeonamesFilesToDownload()); importerConfig.setGeonamesFilesToDownload(null); Assert.assertEquals(ImporterConfig.GEONAMES_DEFAULT_FILES_TO_DOWNLOAD, importerConfig.getGeonamesFilesToDownload()); } @Test public void testCreateImporterMetadataDirIfItDoesnTExistShouldCreateTheGeonamesDirIfItDoesnTExist(){ ImporterConfig fakeImporterConfig = new ImporterConfig(); String geonameDirPathThatDoesnTExist = System.getProperty("java.io.tmpdir")+File.separator+Math.abs(new Random().nextInt()); fakeImporterConfig.setGeonamesDir(geonameDirPathThatDoesnTExist); fakeImporterConfig.createImporterMetadataDirIfItDoesnTExist(); assertTrue("if the geonames directory doen't exists it should be created when the getAlreadyDoneFilePath method is called", new File(geonameDirPathThatDoesnTExist).exists()); } @Test public void testSetOpenstreetmapFillIsInShouldPersistThePropertiesFile() throws URISyntaxException, FileNotFoundException, IOException { ImporterConfig importerConfig = new ImporterConfig(); boolean openStreetMapFillIsInInitial = importerConfig.isOpenStreetMapFillIsIn(); importerConfig.setOpenStreetMapFillIsIn(!openStreetMapFillIsInInitial); URL resourceUrl = this.getClass().getResource(ImporterConfig.PROPERTIES_CONFIG_FILE_CLASSPATH); File file = new File(resourceUrl.toURI()); Properties properties = new Properties(); properties.load(new FileInputStream(file)); String actual = properties.getProperty(ImporterConfig.OPENSTREETMAP_FILL_ISIN_FIELD_NAME); Assert.assertEquals("the property has not been persist",String.valueOf(!openStreetMapFillIsInInitial), actual); Assert.assertEquals("the property has not been set",!openStreetMapFillIsInInitial, importerConfig.isOpenStreetMapFillIsIn()); //restore importerConfig.setOpenStreetMapFillIsIn(openStreetMapFillIsInInitial); Assert.assertEquals("the property has not been persist",openStreetMapFillIsInInitial, importerConfig.isOpenStreetMapFillIsIn()); Assert.assertEquals("the property has not been set",openStreetMapFillIsInInitial, importerConfig.isOpenStreetMapFillIsIn()); } }