package fr.gouv.vitam.logbook.common.server.database.collections;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assume.assumeTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import fr.gouv.vitam.common.LocalDateUtil;
import fr.gouv.vitam.common.database.server.elasticsearch.ElasticsearchNode;
import fr.gouv.vitam.common.exception.VitamApplicationServerException;
import fr.gouv.vitam.common.guid.GUIDFactory;
import fr.gouv.vitam.common.junit.JunitHelper;
import fr.gouv.vitam.common.junit.JunitHelper.ElasticsearchTestConfiguration;
import fr.gouv.vitam.common.server.application.configuration.MongoDbNode;
import fr.gouv.vitam.common.thread.RunWithCustomExecutor;
import fr.gouv.vitam.common.thread.RunWithCustomExecutorRule;
import fr.gouv.vitam.common.thread.VitamThreadPoolExecutor;
import fr.gouv.vitam.common.thread.VitamThreadUtils;
import fr.gouv.vitam.logbook.common.parameters.LogbookOperationParameters;
import fr.gouv.vitam.logbook.common.parameters.LogbookParameterName;
import fr.gouv.vitam.logbook.common.parameters.LogbookParametersFactory;
import fr.gouv.vitam.logbook.common.server.LogbookConfiguration;
import fr.gouv.vitam.logbook.common.server.exception.LogbookAlreadyExistsException;
import fr.gouv.vitam.logbook.common.server.exception.LogbookDatabaseException;
import ru.yandex.qatools.embed.service.MongoEmbeddedService;
public class LogbookMongoDbAccessFactoryAuthenticationTest {
private static final String DATABASE_HOST = "localhost";
static LogbookMongoDbAccessImpl mongoDbAccess;
private static int port;
private static JunitHelper junitHelper;
private static MongoEmbeddedService mongo;
private static final String databaseName = "db-logbook";
private static final String user = "user-logbook";
private static final String pwd = "user-logbook";
private static final Integer TENANT_ID = 0;
private static final List<Integer> tenantList = Arrays.asList(0);
// ES
@ClassRule
public static TemporaryFolder esTempFolder = new TemporaryFolder();
private final static String ES_CLUSTER_NAME = "vitam-cluster";
private final static String ES_HOST_NAME = "localhost";
private static ElasticsearchTestConfiguration config = null;
@Rule
public RunWithCustomExecutorRule runInThread =
new RunWithCustomExecutorRule(VitamThreadPoolExecutor.getDefaultExecutor());
@BeforeClass
public static void setUpBeforeClass() throws Exception {
junitHelper = JunitHelper.getInstance();
port = junitHelper.findAvailablePort();
// ES
try {
config = JunitHelper.startElasticsearchForTest(esTempFolder, ES_CLUSTER_NAME);
} catch (final VitamApplicationServerException e1) {
assumeTrue(false);
}
// Starting the embedded services within temporary dir
mongo = new MongoEmbeddedService(
DATABASE_HOST + ":" + port, databaseName, user, pwd, "localreplica");
mongo.start();
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
if (config != null) {
JunitHelper.stopElasticsearchForTest(config);
}
mongo.stop();
junitHelper.releasePort(port);
}
@Test
@RunWithCustomExecutor
public void testCreateLogbook() throws LogbookDatabaseException, LogbookAlreadyExistsException {
VitamThreadUtils.getVitamSession().setTenantId(TENANT_ID);
// mongo
final List<MongoDbNode> nodes = new ArrayList<>();
nodes.add(new MongoDbNode(DATABASE_HOST, port));
// es
final List<ElasticsearchNode> esNodes = new ArrayList<>();
esNodes.add(new ElasticsearchNode(ES_HOST_NAME, config.getTcpPort()));
LogbookConfiguration config =
new LogbookConfiguration(nodes, databaseName, ES_CLUSTER_NAME, esNodes, true, user, pwd);
config.setTenants(tenantList);
new LogbookMongoDbAccessFactory();
mongoDbAccess = LogbookMongoDbAccessFactory.create(config);
assertNotNull(mongoDbAccess);
assertEquals("db-logbook", mongoDbAccess.getMongoDatabase().getName());
final LogbookOperationParameters parameters = LogbookParametersFactory.newLogbookOperationParameters();
for (final LogbookParameterName name : LogbookParameterName.values()) {
if (LogbookParameterName.eventDateTime.equals(name)) {
parameters.putParameterValue(name, LocalDateUtil.now().toString());
} else {
parameters.putParameterValue(name,
GUIDFactory.newEventGUID(0).getId());
}
}
mongoDbAccess.createLogbookOperation(parameters);
mongoDbAccess.close();
}
}