// 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 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 the file-based database replicator. */ public class ApidbFileReplicatorTest extends AbstractDataTest { private final DatabaseUtilities dbUtils = new DatabaseUtilities(dataUtils); /** * A basic test loading an osm file into an API database and verifying that it gets replicated correctly. * * @throws IOException if any file operations fail. */ @Test public void testLoadAndDump() throws IOException { File authFile; File snapshotFile; File changesetFile; File outputFile; File workingDirectory; // Generate input files. authFile = dbUtils.getAuthorizationFile(); snapshotFile = dataUtils.createDataFile("v0_6/db-snapshot.osm"); changesetFile = dataUtils.createDataFile("v0_6/db-replicate-changeset.osc"); outputFile = dataUtils.newFile(); workingDirectory = dataUtils.newFolder(); // Remove all existing data from the database. dbUtils.truncateDatabase(); // Initialise replication. Osmosis.run(new String[] { "-q", "--replicate-apidb-0.6", "authFile=" + authFile.getPath(), "allowIncorrectSchemaVersion=true", "--write-replication", "workingDirectory=" + workingDirectory.getPath() }); // Load the database with a dataset. Osmosis.run(new String[] { "-q", "--read-xml-0.6", snapshotFile.getPath(), "--write-apidb-0.6", "authFile=" + authFile.getPath(), "allowIncorrectSchemaVersion=true" }); // Run replication. Osmosis.run(new String[] { "-q", "--replicate-apidb-0.6", "authFile=" + authFile.getPath(), "allowIncorrectSchemaVersion=true", "--write-replication", "workingDirectory=" + workingDirectory.getPath() }); // 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" }); // Run replication. Osmosis.run(new String[] { "-q", "--replicate-apidb-0.6", "authFile=" + authFile.getPath(), "allowIncorrectSchemaVersion=true", "--write-replication", "workingDirectory=" + workingDirectory.getPath() }); // Ensure that replication runs successfully even if no data is available. Osmosis.run(new String[] { "-q", "--replicate-apidb-0.6", "authFile=" + authFile.getPath(), "allowIncorrectSchemaVersion=true", "--write-replication", "workingDirectory=" + workingDirectory.getPath() }); // Ensure that replication can run with multiple loops. Osmosis.run(new String[] { "-q", "--replicate-apidb-0.6", "authFile=" + authFile.getPath(), "allowIncorrectSchemaVersion=true", "iterations=2", "--write-replication", "workingDirectory=" + workingDirectory.getPath() }); // Decompress the result file. Osmosis.run(new String[] { "-q", "--read-xml-change-0.6", new File(workingDirectory, "000/000/002.osc.gz").getPath(), "--write-xml-change-0.6", outputFile.getPath() }); // Validate that the replicated file matches the input file. dataUtils.compareFiles(changesetFile, outputFile); } }