package se.kodapan.osm.services.changesetstore;
import se.kodapan.osm.OsmCommonTest;
import java.io.Reader;
import java.io.StringReader;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
/**
* @author kalle
* @since 2013-05-03 20:27
*/
public class TestChangesetStore extends OsmCommonTest {
public void testGetFirstChangesetStateSince() throws Exception {
ChangesetStore store = new ChangesetStore();
setUserAgent(store);
store.open();
store.setBaseURL("http://download.geofabrik.de/europe/sweden-updates");
ChangesetStoreState mostRecentChangesetState = store.getMostRecentChangesetState();
if (mostRecentChangesetState.getSequenceNumber() < 10) {
fail("Not enough changesets on server to execute test!");
}
ChangesetStoreState changesetStateApriori = store.getChangesetState(mostRecentChangesetState.getSequenceNumber() - 10);
if (changesetStateApriori == null) {
fail("Apriori changeset does not exist on server.");
}
ChangesetStoreState changesetState = store.findFirstChangesetStateSince(changesetStateApriori.getTimestamp());
assertEquals(changesetStateApriori.getSequenceNumber().intValue() + 1, changesetState.getSequenceNumber().intValue());
System.out.println();
}
public void testGetChangesetStatesSince() throws Exception {
ChangesetStore store = new ChangesetStore();
setUserAgent(store);
store.open();
store.setBaseURL("http://download.geofabrik.de/europe/sweden-updates");
ChangesetStoreState mostRecentChangesetState = store.getMostRecentChangesetState();
if (mostRecentChangesetState.getSequenceNumber() < 10) {
fail("Not enough changesets on server to execute test!");
}
ChangesetStoreState changesetStateApriori = store.getChangesetState(mostRecentChangesetState.getSequenceNumber() - 10);
if (changesetStateApriori == null) {
fail("Apriori changeset does not exist on server.");
}
List<ChangesetStoreState> changesetStates = store.findChangesetStatesSince(changesetStateApriori.getTimestamp());
assertEquals(mostRecentChangesetState.getSequenceNumber(), changesetStates.get(changesetStates.size() - 1).getSequenceNumber());
assertEquals("Expecting number of changesets to be sequence number of last state - aprioi state, there might however be files missing at the server!", mostRecentChangesetState.getSequenceNumber() - changesetStateApriori.getSequenceNumber(), changesetStates.size());
assertEquals(changesetStateApriori.getSequenceNumber().intValue() + 1, changesetStates.get(0).getSequenceNumber().intValue());
System.out.println();
}
public void testGetMostRecentChangesetState() throws Exception {
ChangesetStore store = new ChangesetStore();
store.open();
setUserAgent(store);
store.setBaseURL("http://download.geofabrik.de/europe/sweden-updates");
ChangesetStoreState state = store.getMostRecentChangesetState();
Reader changesetReader = store.getChangeset(state.getSequenceNumber());
try {
System.currentTimeMillis();
} finally {
changesetReader.close();
}
}
public void testParseState() throws Exception {
ChangesetStore store = new ChangesetStore();
store.open();
setUserAgent(store);
StringBuilder stateBuilder = new StringBuilder();
stateBuilder.append("#this is a comment\n");
stateBuilder.append("sequenceNumber=1\n");
stateBuilder.append("timestamp=2006-12-31T20\\:57\\:28Z\n");
stateBuilder.append("txnMaxQueried=2\n");
stateBuilder.append("txnMax=3\n");
stateBuilder.append("txnActiveList=4,5\n");
stateBuilder.append("txnReadyList=6,7\n");
stateBuilder.append("unknown property=generates a warning. ignore me.\n");
stateBuilder.append("bad property line that generates a warning. ignore me.\n");
stateBuilder.append("#this is also a comment\n");
ChangesetStoreState state = store.parseChangesetState(new StringReader(stateBuilder.toString()));
assertEquals(new Integer(1), state.getSequenceNumber());
assertEquals(new Long(1167595048000l), state.getTimestamp());
assertEquals(new Long(2), state.getTxnMaxQueried());
assertEquals(new Long(3), state.getTxnMax());
assertEquals(Arrays.asList(new Long[]{4l, 5l}), state.getTxnActiveList());
assertEquals(Arrays.asList(new Long[]{6l, 7l}), state.getTxnReadyList());
}
public void testGetChangesetURL() throws Exception {
ChangesetStore store = new ChangesetStore();
store.open();
setUserAgent(store);
store.setBaseURL("http://foo/");
assertEquals(new URL("http://foo/000/000/000.osc.gz"), store.getChangesetURL(0));
assertEquals(new URL("http://foo/000/000/100.osc.gz"), store.getChangesetURL(100));
assertEquals(new URL("http://foo/000/001/000.osc.gz"), store.getChangesetURL(1000));
assertEquals(new URL("http://foo/001/000/000.osc.gz"), store.getChangesetURL(1000000));
}
public void testGetStateURL() throws Exception {
ChangesetStore store = new ChangesetStore();
store.open();
setUserAgent(store);
store.setBaseURL("http://foo/");
assertEquals(new URL("http://foo/000/000/000.state.txt"), store.getChangesetStateURL(0));
assertEquals(new URL("http://foo/000/000/100.state.txt"), store.getChangesetStateURL(100));
assertEquals(new URL("http://foo/000/001/000.state.txt"), store.getChangesetStateURL(1000));
assertEquals(new URL("http://foo/001/000/000.state.txt"), store.getChangesetStateURL(1000000));
}
public void testSetBaseURL() throws Exception {
ChangesetStore store = new ChangesetStore();
store.open();
setUserAgent(store);
store.setBaseURL("http://foo/");
assertEquals(new URL("http://foo/"), store.getBaseURL());
store.setBaseURL("http://foo");
assertEquals(new URL("http://foo/"), store.getBaseURL());
try {
store.setBaseURL("http://foo/bar#");
fail();
} catch (IllegalArgumentException iae) {
// all good
}
try {
store.setBaseURL("http://foo/bar#anchor");
fail();
} catch (IllegalArgumentException iae) {
// all good
}
try {
store.setBaseURL("http://foo/bar?");
fail();
} catch (IllegalArgumentException iae) {
// all good
}
try {
store.setBaseURL("http://foo/bar?query");
fail();
} catch (IllegalArgumentException iae) {
// all good
}
}
}