public EmbeddedMongo() throws IOException {

    // the following logging setup makes the logging a lot less
    // verbose
    // TODO: figure out how to control it further
    Logger logger = Logger.getLogger(getClass().getName());
    IRuntimeConfig runtimeConfig =
        new RuntimeConfigBuilder().defaultsWithLogger(Command.MongoD, logger).build();
    MongodStarter starter = MongodStarter.getInstance(runtimeConfig);

    // use instead of logging code above
    // MongodStarter starter = MongodStarter.getDefaultInstance();

    IMongodConfig mongodConfig =
        new MongodConfigBuilder()
            .version(Version.Main.PRODUCTION)
            .net(new Net(PORT, Network.localhostIsIPv6()))
            .build();

    _mongodExecutable = starter.prepare(mongodConfig);
    MongodProcess mongod = _mongodExecutable.start();
    /*
    MongoClient mongo = new MongoClient("localhost", port);
    DB db = mongo.getDB("test");
    DBCollection col = db.createCollection("testCol", new BasicDBObject());
    col.save(new BasicDBObject("testDoc", new Date()));
    */
  }
  // ### Usage - custom mongod process output
  // #### ... to console with line prefix
  public void testCustomOutputToConsolePrefix() {

    RuntimeConfig runtimeConfig = new RuntimeConfig();
    runtimeConfig.setProcessOutput(
        new ProcessOutput(
            Processors.namedConsole("[mongod>]"),
            Processors.namedConsole("[MONGOD>]"),
            Processors.namedConsole("[console>]")));
    MongodStarter runtime = MongodStarter.getInstance(runtimeConfig);
  }
  // #### ... to file
  public void testCustomOutputToFile() throws FileNotFoundException, IOException {
    RuntimeConfig runtimeConfig = new RuntimeConfig();
    IStreamProcessor mongodOutput =
        Processors.named(
            "[mongod>]", new FileStreamProcessor(File.createTempFile("mongod", "log")));
    IStreamProcessor mongodError =
        new FileStreamProcessor(File.createTempFile("mongod-error", "log"));
    IStreamProcessor commandsOutput = Processors.namedConsole("[console>]");

    runtimeConfig.setProcessOutput(new ProcessOutput(mongodOutput, mongodError, commandsOutput));
    MongodStarter runtime = MongodStarter.getInstance(runtimeConfig);
  }
  // #### ... to java logging
  public void testCustomOutputToLogging() throws FileNotFoundException, IOException {
    Logger logger = Logger.getLogger(getClass().getName());

    RuntimeConfig runtimeConfig = new RuntimeConfig();
    runtimeConfig.setProcessOutput(
        new ProcessOutput(
            Processors.logTo(logger, Level.INFO),
            Processors.logTo(logger, Level.SEVERE),
            Processors.named("[console>]", Processors.logTo(logger, Level.FINE))));
    runtimeConfig
        .getDownloadConfig()
        .setProgressListener(new LoggingProgressListener(logger, Level.FINE));
    MongodStarter runtime = MongodStarter.getInstance(runtimeConfig);
  }
  @Override
  public void before() throws Throwable {

    int port = Network.getFreeServerPort();
    String portProp = System.getProperty(MONGO_PORT_PROP);
    if (portProp != null && !portProp.isEmpty()) {
      port = Integer.valueOf(portProp);
    }

    IMongodConfig conf =
        new MongodConfigBuilder()
            .version(Version.Main.PRODUCTION)
            .net(new Net(port, Network.localhostIsIPv6()))
            .build();

    Command command = Command.MongoD;
    IRuntimeConfig runtimeConfig =
        new RuntimeConfigBuilder()
            .defaultsWithLogger(command, LOGGER)
            .artifactStore(
                new ArtifactStoreBuilder()
                    .defaults(command)
                    .download(
                        new DownloadConfigBuilder()
                            .defaultsForCommand(command)
                            .proxyFactory(new SystemProxy())))
            .build();

    MongodStarter runtime = MongodStarter.getInstance(runtimeConfig);
    mongoExec = runtime.prepare(conf);

    mongoProc = mongoExec.start();

    client =
        new MongoClient(new ServerAddress(conf.net().getServerAddress(), conf.net().getPort()));

    // set the property for our config...
    System.setProperty("dbhost", conf.net().getServerAddress().getHostAddress());
    System.setProperty("dbport", Integer.toString(conf.net().getPort()));
  }
  // ### Customize Artifact Storage
  public void testCustomizeArtifactStorage() throws IOException {

    MongodConfig mongodConfig =
        new MongodConfig(Version.Main.V2_0, 12345, Network.localhostIsIPv6());

    /// - 8<- - - -
    IDirectory artifactStorePath =
        new FixedPath(System.getProperty("user.home") + "/.embeddedMongodbCustomPath");
    ITempNaming executableNaming = new UUIDTempNaming();

    RuntimeConfig runtimeConfig = new RuntimeConfig();
    runtimeConfig.getDownloadConfig().setArtifactStorePathNaming(artifactStorePath);
    runtimeConfig.setExecutableNaming(executableNaming);

    MongodStarter runtime = MongodStarter.getInstance(runtimeConfig);
    MongodExecutable mongodExe = runtime.prepare(mongodConfig);
    /// - >8- - - -
    MongodProcess mongod = mongodExe.start();

    mongod.stop();
    mongodExe.stop();
  }
  // ### Usage - custom mongod filename
  public void testCustomMongodFilename() throws UnknownHostException, IOException {

    int port = 12345;
    MongodConfig mongodConfig =
        new MongodConfig(Version.Main.V2_0, port, Network.localhostIsIPv6());

    RuntimeConfig runtimeConfig = new RuntimeConfig();
    runtimeConfig.setExecutableNaming(new UserTempNaming());
    MongodStarter runtime = MongodStarter.getInstance(runtimeConfig);

    MongodExecutable mongodExecutable = null;
    try {
      mongodExecutable = runtime.prepare(mongodConfig);
      MongodProcess mongod = mongodExecutable.start();

      Mongo mongo = new Mongo("localhost", port);
      DB db = mongo.getDB("test");
      DBCollection col = db.createCollection("testCol", new BasicDBObject());
      col.save(new BasicDBObject("testDoc", new Date()));

    } finally {
      if (mongodExecutable != null) mongodExecutable.stop();
    }
  }
 // #### ... to default java logging (the easy way)
 public void testDefaultOutputToLogging() throws FileNotFoundException, IOException {
   Logger logger = Logger.getLogger(getClass().getName());
   RuntimeConfig runtimeConfig = RuntimeConfig.getInstance(logger);
   MongodStarter runtime = MongodStarter.getInstance(runtimeConfig);
 }