/* * Licensed 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 com.github.sakserv.minicluster.impl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.github.sakserv.minicluster.MiniCluster; import de.flapdoodle.embed.mongo.MongodExecutable; import de.flapdoodle.embed.mongo.MongodProcess; import de.flapdoodle.embed.mongo.MongodStarter; import de.flapdoodle.embed.mongo.config.IMongodConfig; import de.flapdoodle.embed.mongo.config.MongodConfigBuilder; import de.flapdoodle.embed.mongo.config.Net; import de.flapdoodle.embed.mongo.distribution.Version; public class MongodbLocalServer implements MiniCluster { // Logger private static final Logger LOG = LoggerFactory.getLogger(MongodbLocalServer.class); private String ip; private Integer port; private MongodStarter starter; private MongodExecutable mongodExe; private MongodProcess mongod; private IMongodConfig conf; private MongodbLocalServer(Builder builder) { this.ip = builder.ip; this.port = builder.port; } public String getIp() { return ip; } public Integer getPort() { return port; } public static class Builder { private String ip; private Integer port; public Builder setIp(String ip) { this.ip = ip; return this; } public Builder setPort(int port){ this.port = port; return this; } public MongodbLocalServer build() { MongodbLocalServer mongodbLocalServer = new MongodbLocalServer(this); validateObject(mongodbLocalServer); return mongodbLocalServer; } private void validateObject(MongodbLocalServer mongodbLocalServer) { if(mongodbLocalServer.ip == null) { throw new IllegalArgumentException("ERROR: Missing required config: MongoDB IP"); } if(mongodbLocalServer.port == null) { throw new IllegalArgumentException("ERROR: Missing required config: MongoDB Port"); } } } @Override public void start() throws Exception { LOG.info("MONGODB: Starting MongoDB on {}:{}", ip, port); starter = MongodStarter.getDefaultInstance(); configure(); mongodExe = starter.prepare(conf); mongod = mongodExe.start(); } @Override public void stop() throws Exception { stop(true); } @Override public void stop(boolean cleanUp) throws Exception { LOG.info("MONGODB: Stopping MongoDB on {}:{}", ip, port); mongod.stop(); mongodExe.stop(); if(cleanUp) { cleanUp(); } } @Override public void configure() throws Exception { conf = new MongodConfigBuilder() .version(Version.Main.PRODUCTION) .net(new Net(ip, port, false)) .build(); } @Override public void cleanUp() throws Exception { } }