Package org.openstreetmap.osmosis.replicationhttp.v0_6

Source Code of org.openstreetmap.osmosis.replicationhttp.v0_6.ReplicationTest

// This software is released into the Public Domain.  See copying.txt for details.
package org.openstreetmap.osmosis.replicationhttp.v0_6;

import java.io.File;
import java.net.InetSocketAddress;
import java.util.logging.ConsoleHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.junit.Assert;
import org.junit.Test;
import org.openstreetmap.osmosis.core.pipeline.common.TaskRunner;
import org.openstreetmap.osmosis.replication.common.ReplicationSequenceFormatter;
import org.openstreetmap.osmosis.replication.v0_6.ReplicationWriter;
import org.openstreetmap.osmosis.testutil.AbstractDataTest;


/**
* Performs an end to end test of the HTTP replication classes.
*
* @author Brett Henderson
*/
public class ReplicationTest extends AbstractDataTest {

  /**
   * Configures logging to write all output to the console.
   */
  private static void configureLoggingConsole() {
    Logger rootLogger;
    Handler consoleHandler;

    rootLogger = Logger.getLogger("");

    // Remove any existing handlers.
    for (Handler handler : rootLogger.getHandlers()) {
      rootLogger.removeHandler(handler);
    }

    // Add a new console handler.
    consoleHandler = new ConsoleHandler();
    consoleHandler.setLevel(Level.ALL);
    rootLogger.addHandler(consoleHandler);
  }


  /**
   * Configures the logging level.
   *
   * @param level
   *            The new logging level to apply.
   */
  private static void configureLoggingLevel(Level level) {
    Logger rootLogger;

    rootLogger = Logger.getLogger("");

    // Set the required logging level.
    rootLogger.setLevel(level);

    // Set the JPF logger to one level lower.
    Logger.getLogger("org.java.plugin").setLevel(Level.WARNING);
  }


  /**
   * Single end to end test.
   *
   * @throws Exception
   *             if an error occurs during processing.
   */
  @Test
  public void test() throws Exception {
    final int sequenceCount = 100;
    long timerStart;

    // Due to the multi-threaded nature of this test, it may be necessary to
    // enable logging to diagnose problems.
    final boolean enableLogging = false;
    if (enableLogging) {
      configureLoggingConsole();
      configureLoggingLevel(Level.FINEST);
      Logger.getLogger("org.openstreetmap.osmosis.replication.v0_6.ReplicationStateWriter").setLevel(Level.INFO);
    }

    // Create the primary replication data source.
    MockReplicationSource source = new MockReplicationSource();

    // Create the sequence server for notifying when new sequence numbers
    // are available and connect it to the primary source.
    ReplicationSequenceServer sequenceServer = new ReplicationSequenceServer(0);
    source.setChangeSink(sequenceServer);

    // Create a replication data writer and receive data from the primary
    // data source (via the sequence server).
    File workingDir1 = dataUtils.newFolder();
    sequenceServer.setChangeSink(new ReplicationWriter(workingDir1));

    // Send sequence through the primary pipeline to ensure the
    // sequence server is running.
    source.sendSequence();

    // Create a HTTP replication data server using the data from the
    // replication writer, and receive sequence number updates from the
    // sequence server.
    ReplicationDataServer dataServer = new ReplicationDataServer(sequenceServer.getPort(), workingDir1, 0);

    // Start the HTTP data server.
    TaskRunner serverRunner = new TaskRunner(dataServer, "data-server");
    serverRunner.start();

    /*
     * The server starts in another thread so we need to wait until it has
     * started. We will wait until the dynamically allocated port is
     * exported via the getPort method which occurs after server startup.
     */
    timerStart = System.currentTimeMillis();
    while (dataServer.getPort() == 0 && (System.currentTimeMillis() - timerStart < 10000)) {
      Thread.sleep(10);
    }
    Assert.assertFalse("Server port was not dynamically allocated.", sequenceServer.getPort() == 0);

    // Create a HTTP replication data client receiving data from the data
    // server.
    ReplicationDataClient dataClient = new ReplicationDataClient(new InetSocketAddress(dataServer.getPort()), "");

    // Create a replication data writer to receiving data from the HTTP data
    // source.
    File workingDir2 = dataUtils.newFolder();
    dataClient.setChangeSink(new ReplicationWriter(workingDir2));

    // Start the HTTP data server and HTTP data client.
    TaskRunner clientRunner = new TaskRunner(dataClient, "data-client");
    clientRunner.start();

    // Send the test replication intervals.
    for (int i = 0; i < sequenceCount; i++) {
      source.sendSequence();
    }

    // Wait for all the data to reach the destination.
    File finalStateFile = new File(workingDir2, new ReplicationSequenceFormatter(9, 3).getFormattedName(
        sequenceCount, ".state.txt"));
    timerStart = System.currentTimeMillis();
    while (!finalStateFile.exists() && (System.currentTimeMillis() - timerStart < 10000)) {
      Thread.sleep(100);
    }

    // Verify that all of the replication sequences made it to the
    // destination.
    Assert.assertTrue("The state file for sequence " + sequenceCount + " doesn't exist.", finalStateFile.exists());

    // Shut down the pipelines.
    clientRunner.interrupt();
    serverRunner.interrupt();
    clientRunner.join();
    serverRunner.join();
    source.release();
  }
}
TOP

Related Classes of org.openstreetmap.osmosis.replicationhttp.v0_6.ReplicationTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.