// This software is released into the Public Domain. See copying.txt for details. package org.openstreetmap.osmosis.apidb.v0_6; import java.io.File; import java.io.IOException; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import java.util.TimeZone; import org.junit.Test; import org.openstreetmap.osmosis.apidb.v0_6.impl.DatabaseUtilities; import org.openstreetmap.osmosis.core.Osmosis; import org.openstreetmap.osmosis.testutil.AbstractDataTest; /** * Tests for PostgreSQL tasks. * * @author Brett Henderson */ public class ApiDbTest extends AbstractDataTest { private static final String DATE_FORMAT = "yyyy-MM-dd_HH:mm:ss"; private final DatabaseUtilities dbUtils = new DatabaseUtilities(dataUtils); private String convertUTCTimeToLocalTime(String dateString) throws ParseException { DateFormat inFormat; DateFormat outFormat; Date date; inFormat = new SimpleDateFormat(DATE_FORMAT, Locale.US); inFormat.setTimeZone(TimeZone.getTimeZone("UTC")); outFormat = new SimpleDateFormat(DATE_FORMAT, Locale.US); date = inFormat.parse(dateString); return outFormat.format(date); } /** * A basic test loading an osm file into a mysql database, then dumping it again and verifying * that it is identical. * * @throws IOException if any file operations fail. */ @Test public void testLoadAndDump() throws IOException { File authFile; File inputFile; File outputFile; // Generate input files. authFile = dbUtils.getAuthorizationFile(); inputFile = dataUtils.createDataFile("v0_6/db-snapshot.osm"); outputFile = dataUtils.newFile(); // Remove all existing data from the database. dbUtils.truncateDatabase(); // Load the database with a dataset. Osmosis.run(new String[] { "-q", "--read-xml-0.6", inputFile.getPath(), "--write-apidb-0.6", "authFile=" + authFile.getPath(), "allowIncorrectSchemaVersion=true" }); // Dump the database to an osm file. Osmosis.run(new String[] { "-q", "--read-apidb-0.6", "authFile=" + authFile.getPath(), "allowIncorrectSchemaVersion=true", "--tag-sort-0.6", "--write-xml-0.6", outputFile.getPath() }); // Validate that the output file matches the input file. dataUtils.compareFiles(inputFile, outputFile); } /** * A basic test loading an osm file into a apidb database, then dumping it from current tables * and verifying that it is identical. * * @throws IOException if any file operations fail. */ @Test public void testLoadAndCurrentDump() throws IOException { File authFile; File inputFile; File outputFile; // Generate input files. authFile = dbUtils.getAuthorizationFile(); inputFile = dataUtils.createDataFile("v0_6/db-snapshot.osm"); outputFile = File.createTempFile("test", ".osm"); // Remove all existing data from the database. dbUtils.truncateDatabase(); // Load the database with a dataset. Osmosis.run(new String[] { "-q", "--read-xml-0.6", inputFile.getPath(), "--write-apidb-0.6", "authFile=" + authFile.getPath(), "allowIncorrectSchemaVersion=true" }); // Dump the database to an osm file. Osmosis.run(new String[] { "-q", "--read-apidb-current-0.6", "authFile=" + authFile.getPath(), "allowIncorrectSchemaVersion=true", "--tag-sort-0.6", "--write-xml-0.6", outputFile.getPath() }); // Validate that the output file matches the input file. dataUtils.compareFiles(inputFile, outputFile); } /** * A test loading an osm file into a apidb database, then applying a changeset, then dumping it * again and verifying the output is as expected. * * @throws IOException if any file operations fail. */ @Test public void testApplyChangeset() throws IOException { File authFile; File snapshotFile; File changesetFile; File expectedResultFile; File actualResultFile; // Generate input files. authFile = dbUtils.getAuthorizationFile(); snapshotFile = dataUtils.createDataFile("v0_6/db-snapshot.osm"); changesetFile = dataUtils.createDataFile("v0_6/db-changeset.osc"); expectedResultFile = dataUtils.createDataFile("v0_6/db-changeset-expected.osm"); actualResultFile = File.createTempFile("test", ".osm"); // Remove all existing data from the database. dbUtils.truncateDatabase(); // Load the database with the snapshot file. Osmosis.run(new String[] { "-q", "--read-xml-0.6", snapshotFile.getPath(), "--write-apidb-0.6", "authFile=" + authFile.getPath(), "allowIncorrectSchemaVersion=true" }); // Apply the changeset file to the database. Osmosis.run(new String[] { "-q", "--read-xml-change-0.6", changesetFile.getPath(), "--write-apidb-change-0.6", "authFile=" + authFile.getPath(), "allowIncorrectSchemaVersion=true" }); // Dump the database to an osm file. Osmosis.run(new String[] { "-q", "--read-apidb-0.6", "authFile=" + authFile.getPath(), "allowIncorrectSchemaVersion=true", "--tag-sort-0.6", "--write-xml-0.6", actualResultFile.getPath() }); // Validate that the dumped file matches the expected result. dataUtils.compareFiles(expectedResultFile, actualResultFile); } /** * A test loading an osm file into a apidb database, then applying a changeset, then dumping the * original snapshot timeframe and verifying the output is as expected. * * @throws IOException if any file operations fail. * @throws ParseException if any date operations fail. */ @Test public void testSnapshotDump() throws IOException, ParseException { File authFile; File snapshotFile; File changesetFile; File expectedResultFile; File actualResultFile; // Generate input files. authFile = dbUtils.getAuthorizationFile(); snapshotFile = dataUtils.createDataFile("v0_6/db-snapshot.osm"); changesetFile = dataUtils.createDataFile("v0_6/db-changeset.osc"); expectedResultFile = dataUtils.createDataFile("v0_6/db-snapshot-b.osm"); actualResultFile = File.createTempFile("test", ".osm"); // Remove all existing data from the database. dbUtils.truncateDatabase(); // Load the database with the snapshot file. Osmosis.run(new String[] { "-q", "--read-xml-0.6", snapshotFile.getPath(), "--write-apidb-0.6", "authFile=" + authFile.getPath(), "allowIncorrectSchemaVersion=true" }); // Apply the changeset file to the database. Osmosis.run(new String[] { "-q", "--read-xml-change-0.6", changesetFile.getPath(), "--write-apidb-change-0.6", "authFile=" + authFile.getPath(), "allowIncorrectSchemaVersion=true" }); // Dump the database to an osm file. Osmosis.run(new String[] { "-q", "--read-apidb-0.6", "snapshotInstant=" + convertUTCTimeToLocalTime("2008-01-03_00:00:00"), "authFile=" + authFile.getPath(), "allowIncorrectSchemaVersion=true", "--tag-sort-0.6", "--write-xml-0.6", actualResultFile.getPath() }); // Validate that the dumped file matches the expected result. dataUtils.compareFiles(expectedResultFile, actualResultFile); } /** * A test loading an osm file into a apidb database, then applying a changeset, then extracting * the changeset timeframe and verifying the output is as expected. * * @throws IOException if any file operations fail. * @throws ParseException if any date operations fail. */ @Test public void testChangesetDump() throws IOException, ParseException { File authFile; File snapshotFile; File changesetFile; File expectedResultFile; File actualResultFile; // Generate input files. authFile = dbUtils.getAuthorizationFile(); snapshotFile = dataUtils.createDataFile("v0_6/db-snapshot.osm"); changesetFile = dataUtils.createDataFile("v0_6/db-changeset.osc"); expectedResultFile = dataUtils.createDataFile("v0_6/db-changeset-b.osc"); actualResultFile = File.createTempFile("test", ".osm"); // Remove all existing data from the database. dbUtils.truncateDatabase(); // Load the database with the snapshot file. Osmosis.run(new String[] { "-q", "--read-xml-0.6", snapshotFile.getPath(), "--write-apidb-0.6", "authFile=" + authFile.getPath(), "allowIncorrectSchemaVersion=true" }); // Apply the changeset file to the database. Osmosis.run(new String[] { "-q", "--read-xml-change-0.6", changesetFile.getPath(), "--write-apidb-change-0.6", "authFile=" + authFile.getPath(), "allowIncorrectSchemaVersion=true" }); // Dump the changeset to an osm file. Osmosis.run(new String[] { "-q", "--read-apidb-change-0.6", "intervalBegin=" + convertUTCTimeToLocalTime("2008-01-03_00:00:00"), "intervalEnd=" + convertUTCTimeToLocalTime("2008-01-04_00:00:00"), "authFile=" + authFile.getPath(), "allowIncorrectSchemaVersion=true", "--write-xml-change-0.6", actualResultFile.getPath() }); // Validate that the dumped file matches the expected result. dataUtils.compareFiles(expectedResultFile, actualResultFile); } }