package com.constellio.sdk.tests;
import static com.constellio.data.conf.HashingEncoding.BASE64;
import static org.mockito.Mockito.spy;
import java.io.File;
import java.util.Arrays;
import org.junit.After;
import org.junit.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.constellio.data.dao.services.bigVault.solr.BigVaultServer;
import com.constellio.data.dao.services.factories.DataLayerFactory;
import com.constellio.data.dao.services.records.RecordDao;
import com.constellio.data.io.concurrent.filesystem.AtomicFileSystem;
import com.constellio.data.io.concurrent.filesystem.AtomicFileSystemUtils;
import com.constellio.data.io.concurrent.filesystem.AtomicLocalFileSystem;
import com.constellio.data.io.concurrent.filesystem.ChildAtomicFileSystem;
import com.constellio.model.conf.FoldersLocator;
import com.constellio.model.entities.Language;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.Transaction;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.search.SearchServiceAcceptanceTestSchemas;
import com.constellio.model.services.search.SearchServices;
import com.constellio.model.services.search.query.logical.condition.LogicalSearchCondition;
import com.constellio.model.services.search.query.logical.valueCondition.ConditionTemplateFactory;
import com.constellio.sdk.tests.annotations.SlowTest;
@SlowTest
public class SolrSafeConstellioAcceptanceTest extends ConstellioTest {
private static Logger LOGGER = LoggerFactory.getLogger(SolrSafeConstellioAcceptanceTest.class);
protected SearchServiceAcceptanceTestSchemas schema = new SearchServiceAcceptanceTestSchemas(zeCollection);
protected SearchServiceAcceptanceTestSchemas.ZeSchemaMetadatas zeSchema = schema.new ZeSchemaMetadatas();
protected LogicalSearchCondition condition;
protected SearchServices searchServices;
protected RecordServices recordServices;
protected RecordDao recordDao;
protected Transaction transaction;
protected ConditionTemplateFactory factory;
private String getServerConfigurations(String coreName) {
File configFld = new File(new FoldersLocator().getSolrHomeConfFolder(), "configsets");
for (File configFile : configFld.listFiles()) {
if (configFile.getName().startsWith(coreName))
return new File(configFile, "conf").getAbsolutePath();
}
return null;
}
@Before
public void setUp()
throws Exception {
syncSolrConfigurationFiles();
givenCollection(zeCollection, Arrays.asList(Language.French.getCode(), Language.English.getCode()));
recordServices = getModelLayerFactory().newRecordServices();
recordDao = spy(getDataLayerFactory().newRecordDao());
searchServices = new SearchServices(recordDao, getModelLayerFactory());
transaction = new Transaction();
factory = new ConditionTemplateFactory(getModelLayerFactory(), zeCollection);
}
@After
public void cleanup() {
syncSolrConfigurationFiles();
}
private void syncSolrConfigurationFiles() {
DataLayerFactory dataLayerFactory = getDataLayerFactory();
for (BigVaultServer server : dataLayerFactory.getSolrServers().getServers()) {
AtomicFileSystem serverFileSystem = server.getSolrFileSystem();
AtomicFileSystem defaultConfiguration = new ChildAtomicFileSystem(
new AtomicLocalFileSystem(dataLayerFactory.getIOServicesFactory().newHashingService(BASE64)),
getServerConfigurations(server.getName()));
LOGGER.info("Syncing the <{}> configurations...", server.getName());
if (!AtomicFileSystemUtils.sync(defaultConfiguration, serverFileSystem)) {
server.reload();
LOGGER.info("Reloading the <{}> server", server.getName());
} else
LOGGER.info("No reloading for the <{}> server", server.getName());
}
}
protected Record newRecordOfZeSchema() {
return recordServices.newRecordWithSchema(zeSchema.instance());
}
}