/* Copyright (c) 2013-2014 Boundless and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Distribution License v1.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/org/documents/edl-v10.html * * Contributors: * Victor Olaya (Boundless) - initial implementation */ package org.locationtech.geogig.osm.internal.history; import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.junit.Assert; import org.junit.Before; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import com.google.common.collect.Lists; import com.google.common.collect.Maps; /** * */ public class HistoryDownloaderTest extends Assert { private HistoryDownloader localResourcesDownloader; private ExecutorService executor; @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); private File downloadFolder; @Before public void setUp() throws Exception { String osmAPIUrl = getClass().getResource("01_10").toExternalForm(); long initialChangeset = 1; long finalChangeset = 10; downloadFolder = tempFolder.newFolder("downloads"); executor = Executors.newFixedThreadPool(6); localResourcesDownloader = new HistoryDownloader(osmAPIUrl, downloadFolder, initialChangeset, finalChangeset, executor); } @Test public void testFetchChangesets() throws Exception { Iterator<Changeset> iterator = localResourcesDownloader.fetchChangesets(); List<Changeset> changesets = Lists.newArrayList(iterator); assertEquals(10, changesets.size()); } @Test public void testFetchChangesetContents() throws Exception { Iterator<Change> changes; List<Change> list; Iterator<Changeset> changesetsIterator = localResourcesDownloader.fetchChangesets(); ArrayList<Changeset> changesets = Lists.newArrayList(changesetsIterator); assertEquals(10, changesets.size()); changes = changesets.get(0).getChanges().get().get(); list = Lists.newArrayList(changes); assertEquals(3, list.size());// see 01_10/1/download.xml assertTrue(list.get(0).getNode().isPresent()); assertTrue(list.get(1).getNode().isPresent()); assertTrue(list.get(2).getWay().isPresent()); // 01_10/10/download.xml is empty changes = changesets.get(9).getChanges().get().get(); assertFalse(changes.hasNext()); // 01_10/5/download.xml changes = changesets.get(4).getChanges().get().get(); list = Lists.newArrayList(changes); assertEquals(4, list.size());// see 01_10/1/download.xml assertTrue(list.get(0).getNode().isPresent()); assertTrue(list.get(1).getNode().isPresent()); assertTrue(list.get(2).getNode().isPresent()); assertTrue(list.get(3).getWay().isPresent()); } @Ignore @Test public void testFetchFailingChangesetsOnline() throws Exception { // String osmAPIUrl = "http://api06.dev.openstreetmap.org/api/0.6/"; String osmAPIUrl = "http://api.openstreetmap.org/api/0.6/"; long initialChangeset = 749;// this one gives a 500 internal server error long finalChangeset = 750; HistoryDownloader onlineDownloader = new HistoryDownloader(osmAPIUrl, downloadFolder, initialChangeset, finalChangeset, executor); Iterator<Changeset> iterator = onlineDownloader.fetchChangesets(); assertTrue(iterator.hasNext()); Changeset changeset = iterator.next(); assertEquals(749, changeset.getId()); Iterator<Change> changes; changes = changeset.getChanges().get().get(); assertNotNull(changes); assertFalse(changes.hasNext()); assertTrue(iterator.hasNext()); changeset = iterator.next(); assertEquals(750, changeset.getId()); changes = changeset.getChanges().get().get(); assertNotNull(changes); assertTrue(changes.hasNext()); } @Ignore @Test public void testFetchChangesetsOnline() throws Exception { String osmAPIUrl = "http://api06.dev.openstreetmap.org/api/0.6/"; // String osmAPIUrl = "http://api.openstreetmap.org/api/0.6/"; long initialChangeset = 1; long finalChangeset = 30; HistoryDownloader onlineDownloader = new HistoryDownloader(osmAPIUrl, downloadFolder, initialChangeset, finalChangeset, executor); List<Changeset> changesets = Lists.newArrayList(); Map<Long, List<Change>> changes = Maps.newTreeMap(); Iterator<Changeset> it = onlineDownloader.fetchChangesets(); while (it.hasNext()) { Changeset changeset = it.next(); changesets.add(changeset); Iterator<Change> iterator = changeset.getChanges().get().get(); changes.put(Long.valueOf(changeset.getId()), Lists.newArrayList(iterator)); } assertEquals(30, changesets.size()); } }