All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scalapi.embedmongo.EmbedMongoSupport.scala Maven / Gradle / Ivy

The newest version!
/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package scalapi.embedmongo

import de.flapdoodle.embed.mongo.config.{Net, MongodConfigBuilder}
import de.flapdoodle.embed.mongo.distribution.Version
import de.flapdoodle.embed.mongo.MongodStarter._
import de.flapdoodle.embed.process.runtime.Network.localhostIsIPv6
import com.mongodb.{DB, DBCollection, MongoClient}
import scalapi.jdk.net.Sockets.findAvailablePort

trait EmbedMongoSupport {

  private val mongoConfig = findAvailablePort {
    port =>
      new MongodConfigBuilder()
        .version(Version.Main.PRODUCTION)
        .net(new Net(port, localhostIsIPv6()))
        .build
  }

  private val mongoDaemon = getDefaultInstance.prepare(mongoConfig).start()

  protected val mongoPort = mongoConfig.net.getPort

  protected val mongo = new MongoClient("localhost", mongoPort)

  // Server control

  protected def stopMongo() {
    mongoDaemon.stop()
  }

  // Default collection

  protected val defaultDatabaseName = "defaultScalapiDatabase"

  protected def db: DB =
    mongo.getDB(defaultDatabaseName)

  protected def collection(collectionName: String): DBCollection =
    db.getCollection(collectionName)

  protected val defaultCollectionName = "defaultScalapiCollection"

  protected def collection: DBCollection =
    collection(defaultCollectionName)

}

object EmbedMongoSupport {

  val defaultPort = 27017

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy